Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Не могу сохранить имя файла в базу данных
 
 автор: davidoff_72   (16.05.2015 в 15:14)   письмо автору
 
 

Через форму сохраняю в папку фаил. Хочу в базу данных сохранять файл, чтоб потом выводить вместе остальной информацией в браузер , например фото пользователя вместе с остальной инфой о нем.
Вот код, фаил сохраняю в папку а вот с загрузкой имени в базу данных проблемы

<?php
include ('connect.php');

if (isset(
$_POST["send"])) {
    
    
$sql mysql_query("INSERT INTO `kandidat` (`rezum_txt`, `fail`, `veb`, `data`) 
                        VALUES ('"
.$_POST['rezum_txt']."','".$_FILES['name']."','".$_POST['veb']."', NOW())");
    
    if (
$sql) {
        echo 
"<p>Данные успешно добавлены в таблицу.</p>";
    } else {
        echo 
"<p>Произошла ошибка.</p>";
    }
}
//проверяем, если файл загружен и ошибок нет    if ($_FILES['file']['error'] == 0)
if($_FILES['file']['error'] == 0){ 
                  
//выбираем путь временного хранилища файла
    
$temp $_FILES['file']['tmp_name']; 
                   
//выбираем путь, куда будем сохранять файл
    
$name_file $_FILES['file']['name']; 
                   
//перемещаем файл из временной папки к нам на сервер
    
move_uploaded_file($temp"fail/" .$name_file); 


?>

<table>
<form action="<?=$_SERVER['PHP_SELF']?>"  method="post" enctype="multipart/form-data">
  
 
    <tr>
       <td>Резюме: </td>
       <td><textarea rows="10" cols="95" name="rezum_txt" ></textarea></td>
    </tr>    
    <tr>
        <td>Ссылка на резюме в интернете:</td>
        <td><input type="url" name="veb" size="70"></td>
    </tr>
    <tr>
        <td>file:</td>
        <td><input type="file" name="file" size="30"></td>    
    </tr>
    
    <tr>
        <td colspan="2"><input type="submit" name ="send" value="внести кандидата"></td>
    </tr>    
</form>
</table>

  Ответить  
 
 автор: elenaki   (16.05.2015 в 16:00)   письмо автору
 
   для: davidoff_72   (16.05.2015 в 15:14)
 

$_FILES['file']['name']; 
!!!!

А вставляете в базу с каким именем? Вот так надо

$sql = mysql_query("INSERT INTO `kandidat` (`rezum_txt`, `fail`, `veb`, `data`)  
                        VALUES ('".$_POST['rezum_txt']."','".$_FILES['file']['name']."','".$_POST['veb']."', NOW())");

  Ответить  
 
 автор: davidoff_72   (16.05.2015 в 19:17)   письмо автору
 
   для: elenaki   (16.05.2015 в 16:00)
 

Спасибо. Как все просто оказалось. Вроде все нормально.
Но теперь другая проблема... подскажите как его открыть? Можно какую нибудь ссылку . Спасибо

  Ответить  
 
 автор: confirm   (16.05.2015 в 20:17)   письмо автору
 
   для: elenaki   (16.05.2015 в 16:00)
 

" . basename($_FILES['file']['name']) . "

  Ответить  
 
 автор: davidoff_72   (16.05.2015 в 21:04)   письмо автору
 
   для: confirm   (16.05.2015 в 20:17)
 

Не осуждайте за криворукость, подскажите пожалуйста где нехватает знаний:


<?php
$sql 
mysql_query('SELECT `ID`, `rezum_txt`, `veb`, `fail`, `data` FROM `kandidat` WHERE 1');
...
while (
$result mysql_fetch_array($sql)) {
...
echo    
"<td>".$result['fail'].basename($_FILES['fail']['name']) ."</td>      
        </tr>"

        
    }

?>


в браузер выводится имя файла. Как сделать, чтоб имя было активным (или кнопка, ссылка) кликая по нему открывался бы файл? Спасибо.

  Ответить  
 
 автор: confirm   (17.05.2015 в 03:35)   письмо автору
 
   для: davidoff_72   (16.05.2015 в 21:04)
 

<td>".$result['fail'].basename($_FILES['fail']['name']) ."</td> - это что такое? $_FILES['fail']['name'] - это имя файла в массиве $_FILES доступное только во время загрузки файла. В базу же надо писать не значение этого массива, а применяя к нему basename(), потому как еще не факт, что это имя, а подставить можно все, что угодно. $result['fail'] - и содержит это сохраненное имя. А чтобы скачивать и по прямой ссылке, это
<?
'<td><a href="путь_к_файлу">'  $result['fail'] . '</a></td></tr>'

  Ответить  
 
 автор: davidoff_72   (19.05.2015 в 00:51)   письмо автору
 
   для: confirm   (17.05.2015 в 03:35)
 

Как всё просто! Спасибо
Вот как я это решил:
<?php 
echo "<td><a href='fail/"$result[fail]."'>"  .substr($result['fail'],0,10 ). "</a></td>";
?>


Но вот небольшая проблема. По роду деятельности мне необходимо сохранять файлы с именами на русском языке.
Сохрнаняя фаил на русском он в папку сохраняется с именем в виде кракозябры а потом не открывается из браузера.
Как сделать, чтоб сохранять файл с именем на русском языке и открывать потом из браузера?
Спасибо

  Ответить  
 
 автор: KPETuH   (19.05.2015 в 10:52)   письмо автору
 
   для: davidoff_72   (19.05.2015 в 00:51)
 

Что за род деятельности где разрешены имена только на русском? Просветите.

  Ответить  
 
 автор: davidoff_72   (19.05.2015 в 15:07)   письмо автору
 
   для: KPETuH   (19.05.2015 в 10:52)
 

подбор персонала. кандидаты (пользователи) присылают свои резюме (вордовские файлы - .doc .docx .rtf .pdf) с именами файлов на русском языке. не хотелось бы каждый фаил переименовывать.
Если можете подскажите

  Ответить  
 
 автор: KPETuH   (19.05.2015 в 16:42)   письмо автору
 
   для: davidoff_72   (19.05.2015 в 15:07)
 

Переименовывайте все файлы как вам угодно всего делов-то

  Ответить  
 
 автор: hars@bk.ru   (19.05.2015 в 14:13)   письмо автору
 
   для: davidoff_72   (19.05.2015 в 00:51)
 

используй это

//проверяем, если файл загружен и ошибок нет    if ($_FILES['file']['error'] == 0) 
if($_FILES['file']['error'] == 0){  
                  //выбираем путь временного хранилища файла 
    $temp = $_FILES['file']['tmp_name'];  
                   //выбираем путь, куда будем сохранять файл 
    $name_file = iconv("UTF-8", "WINDOWS-1251", $_FILES['file']['name']);  
                   //перемещаем файл из временной папки к нам на сервер 
    move_uploaded_file($temp, "fail/" .$name_file);  
}  

  Ответить  
 
 автор: davidoff_72   (19.05.2015 в 15:35)   письмо автору
 
   для: hars@bk.ru   (19.05.2015 в 14:13)
 

Спасибо. Всё работает.
Теперь у меня задача чтоб в цикле выводились фото клиентов вместе с остальной информацией. Если можете подскажите.

<?php
$sql 
mysql_query('SELECT `ID`, `rezum_txt`, `veb`, `foto` FROM `kandidat`  WHERE 1 ORDER BY data DESC');
...


while (
$result mysql_fetch_array($sql)) 
{


echo      
"<td>?????"$result[foto]."  ???? </td>"
?>

  Ответить  
 
 автор: hars@bk.ru   (20.05.2015 в 09:58)   письмо автору
 
   для: davidoff_72   (19.05.2015 в 15:35)
 

Ну собственно не вижу проблемы. Только не понятно, у вас в MySQL сами фотографии хранятся или их имена.

  Ответить  
 
 автор: davidoff_72   (20.05.2015 в 22:27)   письмо автору
 
   для: hars@bk.ru   (20.05.2015 в 09:58)
 

Спасибо. Уже решил проблему. Но у меня вопрос, как сделать , чтоб в столбец `photo` сохранялись только файлы с раширением: .jpg, .png и другие картинки?

Вот как это решил:

<?php
$sql 
mysql_query('SELECT ... `photo`, .. FROM `kandidat`  WHERE 1 ORDER BY data DESC');


while (
$result mysql_fetch_array($sql)) 
{
 
echo 
"<td>";
    
$photo "<img src = 'fail/"$result[photo]."' height='100' width='70'/>";    
switch(
$result['photo'] or NULL)
                {
                case 
1:
                echo 
$photo;
                    break;
                case 
2:
                echo 
NULL;
                    break;
                }
                echo 
"</td>";
?>

  Ответить  
 
 автор: davidoff_72   (19.05.2015 в 19:50)   письмо автору
 
   для: davidoff_72   (19.05.2015 в 00:51)
 

А как создать такую возможость: открыть фаил, отредактировать и сохранить на том же месте с тем же именем?
Спасибо

  Ответить  
 
 автор: hars@bk.ru   (20.05.2015 в 09:56)   письмо автору
 
   для: davidoff_72   (19.05.2015 в 19:50)
 

Читайте уже мануал http://php.net/manual/ru/function.fopen.php

$handle = fopen("C:\\inetpub\\wwwroot\\file_name.txt", "a+"); //'a+'    Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.
fwrite( $handle, date("Y-m-d H:i:s").'; Запись
');
fclose($handle);


Список возможных режимов для fopen() используя mode
mode Описание
'r' Открывает файл только для чтения; помещает указатель в начало файла.
'r+' Открывает файл для чтения и записи; помещает указатель в начало файла.
'w' Открывает файл только для записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пробует его создать.
'w+' Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длины. Если файл не существует - пытается его создать.
'a' Открывает файл только для записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.
'a+' Открывает файл для чтения и записи; помещает указатель в конец файла. Если файл не существует - пытается его создать.
'x' Создаёт и открывает только для записи; помещает указатель в начало файла. Если файл уже существует, вызов fopen() закончится неудачей, вернёт FALSE и выдаст ошибку уровня E_WARNING. Если файл не существует, попытается его создать. Это эквивалентно указанию флагов O_EXCL|O_CREAT для внутреннего системного вызова open(2).
'x+' Создаёт и открывает для чтения и записи; иначе имеет то же поведение что и'x'.
'c' Открывает файл только для записи. Если файл не существует, то он создается. Если же файл существует, то он не обрезается (в отличии от 'w'), и вызов к этой функции не вызывает ошибку (также как и в случае с 'x'). Указатель на файл будет установлен на начало файла. Это может быть полезно при желании заблокировать файл (смотри flock()) перед изменением, так как использование 'w' может обрезать файл еще до того как была получена блокировка (если вы желаете обрезать файл, можно использовать функцию ftruncate() после запроса на блокировку).
'c+' Открывает файл для чтения и записи; иначе имеет то же поведение, что и 'c'.

  Ответить  
 
 автор: davidoff_72   (20.05.2015 в 23:26)   письмо автору
 
   для: hars@bk.ru   (20.05.2015 в 09:56)
 

нет, что то пока не получается осознать...

  Ответить  
 
 автор: davidoff_72   (19.05.2015 в 23:57)   письмо автору
 
   для: confirm   (17.05.2015 в 03:35)
 

Имена файлов я сохраняю в mediumblob в mysql . Правильно ли это?

  Ответить  
 
 автор: hars@bk.ru   (20.05.2015 в 10:00)   письмо автору
 
   для: davidoff_72   (19.05.2015 в 23:57)
 

Это тип хранения бинарных данных - например файл.
Хранить там имя файла конечно тоже можно, но для этого есть тип varchar

  Ответить  
 
 автор: davidoff_72   (20.05.2015 в 23:15)   письмо автору
 
   для: hars@bk.ru   (20.05.2015 в 10:00)
 

Спасибо. поменял на varchar (255).
о у меня проблема, если я удаляю запись, то в бд удаляется а вот фаил в папке остается. Как сделать, чтоб вместе с удалением записи из бд удалялся ещё и фаил из папки?
Вот обработчик удаления:
<?php
include ('connect.php');
if (isset(
$_GET['del'])) {
    
$sql mysql_query('DELETE FROM `kandidat` WHERE `ID` = "'.$_GET['del'].'"');
    if (
$sql) {
        echo 
"<p>Кандидат удален.</p>";?>
        <script language="JavaScript"> window.location.href = "http://localhost/proba/checkbox.php"</script>
    <?php    
    
} else {
        echo 
"<p>Произошла ошибка.</p>";
    }
}
 
?>

  Ответить  
 
 автор: KPETuH   (21.05.2015 в 10:18)   письмо автору
 
   для: davidoff_72   (20.05.2015 в 23:15)
 

почитайте уже мануал по работе с файлами в php

  Ответить  
 
 автор: davidoff_72   (30.05.2015 в 16:27)   письмо автору
 
   для: KPETuH   (21.05.2015 в 10:18)
 

читаю мануал каждый раз когда вижу незнакомое значение... к сожалению не понимаю язык мануала. не спрашивал бы есллиб понимал

  Ответить  
 
 автор: KPETuH   (01.06.2015 в 10:14)   письмо автору
 
   для: davidoff_72   (30.05.2015 в 16:27)
 

Мануал на php.net отлично переведен на русский.

  Ответить  
 
 автор: hars@bk.ru   (21.05.2015 в 10:27)   письмо автору
 
   для: davidoff_72   (20.05.2015 в 23:15)
 

Опять даю ссылку на мануал.
На глупые вопросы больше не отвечу.

http://php.net/manual/ru/function.unlink.php

  Ответить  
 
 автор: davidoff_72   (30.05.2015 в 16:28)   письмо автору
 
   для: hars@bk.ru   (21.05.2015 в 10:27)
 

мануал у меня скачен. к сожелению не понимаю язык мануала. Не хотите помогать не помогайте.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования