помогите девушке сама не пойму! вот такая форма для пользователей к примеру: <form enctype="multipart/form-data" action="../test.info/obr.php" method="post"> <input type="file" name="foto"> <input type="submit"> </form> есть таблица в БД img а вот сам PHP: if ($foto !== " "){ copy($_FILES["foto"]["tmp_name"],"../test.info/files/".$_FILES["foto"]["name"]); } $result = mysql_query ("INSERT INTO img (foto) VALUES ('$foto')"); А вот вопрос: в таблицу img в поле foto попадает пустота а если в форме убираю enctype="multipart/form-data" то в поле фото попадает имя файла, но файл не копируется в папку в файле php.ini убрала register_globals = Off на register_globals = On, файл сохраняется и попадает в поле foto но там не то отправляла 34363.jpg а сохранилось mpphp99.tmp Люди подскажите?
Если я всё правильно понял, то попробуйте вот это (предупреждаю что это код без проверок и он уязвим) HTML: Код (Text): <form enctype="multipart/form-data" action="../test.info/obr.php" method="post"> <input type="file" name="foto"> <input type="submit"> </form> PHP: Код (Text): // Если в массиве существует элемент foto if (isset($_FILES['foto'])) { // Перемещаем из временной директории move_uploaded_file($_FILES['foto']['tmp_name'], "../test.info/files/".$_FILES["foto"]['name']); // Записываем имя файла $result = mysql_query("INSERT INTO img (foto) VALUES ('{$_FILES["foto"]['name']}')"); } register_global - зло, поверьте это вам не нужно! Для перемещения файла из временной директории используйте функцию move_uploaded_file, также советую прочитать эту статью.
и погубитель =) Добавлено спустя 1 минуту 43 секунды: не плодите темы и жить будет легче viewtopic.php?f=13&t=38867&p=316273#p316286
вы извините конечно за ( не плодите темы и жить будет легче ) просто думала так быстрее кто то ответит
А почему погубитель? Проверку сделала чтоб файл был формата JPEG JPG GIF PNG вродебы все работает как надо
он же написал =) и ты не уделила этому внимания. Это все равно что дать гранату ребенку и сказать, чтобы чеку не дергал. вот: если посмотришь на мой, увидишь там странный конструктив в части запроса где данные которые заносить ('".mysql_real_escape_string($_FILES["foto"]["name")."') без этой функции любой может подставить на место имени файла (а это не сложно) другой запрос в базу данных. например, убить все фотки. И он выполнится, т.к. ты пишешь его без оглядки прямо в запрос. опастносте!
Ок, больше не буду давать ребенку гранату =) А я даже незнала что можно сделать так чтоб все фотки удалились А проверка чтоб на конце файла было .JPG не помогает?
Проверка на JPG проверяет расширение загружаемого файла, хотя интересно было бы посмотреть на код... Вам же говорят про sql injection что гораздо хуже
вот вы напали на меня я же знала про такие штучки ч только учусь =) Добавлено спустя 3 минуты 34 секунды: А что значит в поле <textarea></textarea> тоже могут сделать запрос чтоб фотки удалились?
шас все исправлю и отправлю =) Добавлено спустя 37 минут 22 секунды: ВОТ HTML Код (Text): <form enctype="multipart/form-data" action="../test.info/obrabotka.php" method="post"> <table> <tr> <td><label for="type">Тип объявления</label></td> <td><input checked name="type" type="radio" value="ПРОДАЮ">Продаю<input name="type" type="radio" value="КУПЛЮ">Куплю</td> </tr> <tr> <td><label for="info">Коротко о товаре</label></td> <td><input maxlength="45" type="text" name="info" id="name"></td> </tr> <tr> <td><label for="tovar">Выберите товар</label></td> <td><select name="tovar"> <option>туфли</option> <option>платья</option></select> </td> </tr> <tr> <td><label for="sost">Выберите состояние</label></td> <td><select name="sost"> <option>новое</option> <option>б/у</option></select> </td> </tr> <tr> <td><label for="period">Срок размещения</label></td> <td><select name="period"> <option>30 дней</option> <option>60 дней</option> </select></td> </tr> <tr> <td><label for="prise">Цена в рублях</label></td> <td><input maxlength="9" type="text" name="prise"></td> </tr> <tr> <td><label for="img">Выберите фото 1</label></td> <td><input name="img" type="file"></td> </tr> <tr> <td><label for="text">Полный текст объявления</label></td> <td><textarea name="text" cols="40" rows="5"></textarea></td> </tr> <tr> <td><label for="gorod">Выберите город</label></td> <td><select name="gorod"> <option>Москва</option> <option>С-Петербург</option></select> </td> </tr> <tr> <td><label for="name">Контактное лицо</label></td> <td><input maxlength="40" type="text" name="name"></td> </tr> <tr> <td><label for="phone">Введите номер телефона</label></td> <td><input maxlength="11" type="text" name="phone"></td> </tr> <tr> <td><input name="submit" type="submit" value="Добавить объявление"></td> <td><input type="reset" value="Удалить данные"></td> </tr> </table> </form> А ВОТ PHP Код (Text): $db = mysql_connect("localhost", "php", "12345"); mysql_select_db("test", $db); $date = date("d-m-Y"); $time = date("H:i:s"); // если существуют такие переменные то if (isset($type) && isset($info) && isset($tovar) && isset($sost) && isset($period) && isset($prise) && isset($text) && isset($gorod) && isset($name) && isset($phone)){ // проверка на введение номера цены if(!preg_match("/^[0-9]{1,9}+$/", $_POST['prise'])){ echo ("<p>Цена заданна в неверном формат(Вернитесь назад и исправьте цену)</p>"); } // проверка на введение телефона else if(!preg_match("/^[0-9]{6,11}+$/", $_POST['phone'])){ echo ("<p>Телефон задан в неверном формате!(Вернитесь назад и исправьте телефон)</p>"); } else if(!preg_match("[^\s]+(?=\.(jpg|gif|png))\.\2", $_POST['img'])){ echo ("<p>некоректный файл</p>"); } // то добавляем в таблицу переменные else { if (isset($_FILES['img']) && !$_FILES['img']['error']){ // Перемещаем из временной директории copy($_FILES['img1']['tmp_name'], "../test.info/files/".$_FILES['img1']['name']);}; $result = mysql_query ("INSERT INTO table (type, info, tovar, sost, period, prise, text, gorod, name, phone, img, date, time) VALUES ('$title', '$marca', '$sost', '$period', '$type', '$prise', '$text', '$gorod', '$name', '$phone', '".mysql_real_escape_string($_FILES["img"]["name"])."', '$date', '$time')"); } } else{ echo "<p>Вы заполнили не все поля!(Вернитесь назад и заполните пропущенные поля)</p>"; } ?> Что еще можно добавить для безопастности?
А вы не все данные фильтруете как я вижу только $_FILES["img"]["name"] Код (Text): $result = mysql_query ("INSERT INTO table (type, info, tovar, sost, period, prise, text, gorod, name, phone, img, date, time) VALUES ('$title', '$marca', '$sost', '$period', '$type', '$prise', '$text', '$gorod', '$name', '$phone', '".mysql_real_escape_string($_FILES["img"]["name"])."', '$date', '$time')"); или фильтрация происходит в другом месте? Добавлено спустя 15 минут 10 секунд: А проверять тип файла через $_FILES['img']['type'] не хотите?
А как делать фильтрацию других данных, ".mysql_real_escape_string($_POST["title"]["name"])." ? А как проверять тип файла через $_FILES['img']['type'] можно по подронее please ?
Да фильтровать через mysql_real_escape_string. Подробней будет в книге, можно воспользоваться гуглом в крайнем случае на пр. здесь http://www.w3schools.com/php/php_file_upload.asp
я же предупреждал просто я ответил непосредственно на вопрос. Вопросы безопасности это достаточно широкая тема
Всеровно спасибо aspirin просто я новичок в PHP училась по уроков Евгения Попова Добавлено спустя 51 секунду: урокам
А что посоветуете чтоб я знала PHP как вы? И только чтоб не слишком замудрено америку открывать не собираюсь. Добавлено спустя 6 минут 47 секунд: А что именно показать =) ?
чтобы изучить пхп не мудрено, надо просто писать на аглицком свой вопрос или задачу в гугель. В 99% случаев на первой же странице можно найти пяток готовых решений. Обычно все задачи начинающего программиста уже обсосаны и решения весьма распространены. Все что не понятно - тащи сюда и спрашивай. Тут разъяснят быстро. только пожалуйста, работай сразу в нормальном редакторе. типа netbeans