[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: upload image into Mysql by PHP
zerolinko
Добрый день!

Прошу помочь в решении данной проблемы!

Вот код на пхп который по идее должен закынуть картинку в БД, но каждый раз выдает ошибку Вы ввели не всю информацию, заполните пожалуйста все поля для ввода!


<?php
require("include/mysql.php");
if (isset($_POST['name']))
{
$name = $_POST['name'];
}
if ($name == '')
{
unset($name);
}
if (isset($_POST['meta_d']))
{
$meta_d = $_POST['meta_d'];
}
if ($meta_d == '')
{
unset($meta_d);
}
if (isset($_POST['meta_k']))
{
$meta_k = $_POST['meta_k'];
}
if ($meta_k == '')
{
unset($meta_k);
}
if (isset($_FILES['filename']['tmp_name']))
{
$filename = $_FILES['filename']['tmp_name'];
}
if ($filename == '')
{
unset($filename);
}
if(isset($_POST['description']))
{
$description = $_POST['description'];
}
if($description == '')
{
unset($description);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>
Главная | Добавить</title>
</head>

<body>
<?php

if (isset($name) && isset($meta_d) && isset($meta_k) && isset($filename) && isset($description))
{
$result = mysql_query("INSERT INTO `gallery` (`name`,`meta_d`,`meta_k`,`filename`,`description`) VALUES ('$name','$meta_d','$meta_k','$filename','$size','$description')");

if ($result == 'true')
{
echo "<p>Ваша фотография загружена успешно!</p>";
}
else
{
echo "<p>Ваша фотография не загружена!</p>";
}
}

else
{
echo "<p> Вы ввели не всю информацию, заполните пожалуйста все поля для ввода!";
}
?>


Вот собственно сама форма для ввода данных на хтмлэ:

<form name="form1" action="add_gallery.php" method="post" enctype="multipart/form-data">
<p>
<label>
Введите название фотографии<br>
<input
type="text" name="name" id="name">
</label>
</p>
<p>
<label>
Введите краткое описание фотографии<br>
<input
type="text" name="meta_d" id="meta_d">
</label>
</p>
<p>
<label>
Введите ключевые слова по которым будет найден Ваш сайт через поисковую систему<br>
<input
type="text" name="meta_k" id="meta_k">
</label>
</p>
<p>
<label>
Введите описание фотографии<br>
<input
type="text" name="description" id="description">
</label>
</p>
<p>
<label>
Нажмите обзор и выбирите Вашу фотогрию:<br>
<input
type="hidden" name="MAX_FILE_SIZE" value="30000">
<input
type="file" name="filename" id="filename">
</label>
</p>


Что делаю не так?



Спустя 15 минут (29.11.2011 - 23:04) zerolinko написал(а):
Убрав строчку
<input type="hidden" name="MAX_FILE_SIZE" value="30000">


Выводит:
Ваша фотография не загружена!

Спустя 4 минуты, 16 секунд (29.11.2011 - 23:08) Placido написал(а):
Количество и типы полей вот здесь
INSERT INTO `gallery` (`name`,`meta_d`,`meta_k`,`filename`,`description`)

должны совпадать с данными вот здесь
VALUES ('$name','$meta_d','$meta_k','$filename','$size','$description')

А у вас поля size в перовом случае нет.

Спустя 15 минут, 46 секунд (29.11.2011 - 23:24) Игорь_Vasinsky написал(а):
замечательное отображение того - как писать не нужно. Каждая строчка без исключения приносит радость.

И после долгих вычеслений, этот сногсшибательный скрипт кончает с собой после долгих мучений в итоге всё решает так

Цитата
if ($result == 'true')


где $result - boolean который вернулся после попытки записи в БД.

ТС. Вернуться бы к основам?

Спустя 2 минуты, 48 секунд (29.11.2011 - 23:27) zerolinko написал(а):
Спасибо Placido за помощь!
В следуйщий раз буду внимательней смотреть!


Игорь Vasinsky Вы не могли бы меня поправить и написать как нужно правильно писать?

Я новичок в этом деле и не особо понимаю структуризацию правильного кода

Спустя 3 минуты, 26 секунд (29.11.2011 - 23:30) Игорь_Vasinsky написал(а):
Править я ни чего не собираюсь. Спасиб за предложение.

Сам алгоритм радует. И если вы начинающий - как вы окозались рядом с БД.

Я даже не буду утруждаться - т.к. всё переписывать нужно

Первые строчки

Цитата
if (isset($_POST['name']))
{
$name = $_POST['name'];
}
if ($name == '')
{
unset($name);
}

я ввёл 1 пробел
я ввёл SQL-инъекцию, удалил БД.

Хватило 6 первых строчек.

Спустя 58 секунд (29.11.2011 - 23:31) Игорь_Vasinsky написал(а):
и по секрету для 1го условия if else {} - не обязательны, но это мелочи.


Пример простой проверки POST данных с помощью тернарного оператора + защита

$name = !empty(trim($_POST['name'])) ? mysql_real_escape_string($_POST['name']) : null;


всё. теперь $name - либо есть, либо NULL

можно ещё регулярками - так даже надёжней - один паттерн и проверили всё и разрешённые символы и длину.

Пропустит логин от 3 до 15 символов, все буквы, все цифры. - _ .
if(!preg_match("#^[0-9a-zа-я\-_\.]{3,15}$#ius", $_POST['name']))
echo "Не корректно";


специально простой паттерн выбрал

Спустя 7 минут, 28 секунд (29.11.2011 - 23:39) zerolinko написал(а):
Ну что ж, спасибо, теперь буду знать!

Но если поле NULL то иньекция этого поля произойдёт в sql?
Мне нужно чтобы скрипт не выполнялся будь хотя бы одно поле не заполнено


Спустя 8 минут, 26 секунд (29.11.2011 - 23:47) Игорь_Vasinsky написал(а):
Цитата
Но если поле NULL то иньекция этого поля произойдёт в sql?


Инъекция это другое, почитайте в гугле.

Чтоб удостовериться что поле на NULL, достаточно

if(!$name)
exit("Не корректное имя");



есть ещё более удобные, но сложнее варианты с хранением ошибок в массиве и т.д. и не в моих правила рекомендовать использовать exit() для остановки скрипта, но для вас суть - понять логику построения работы скрипта, который проверяет данные на корректность и решает исполнять ему запись в БД в итоге или нет.

я думаю на http://irbis-team.com - вы много для себя полездного откроете ;)

Спустя 4 минуты, 11 секунд (29.11.2011 - 23:51) Игорь_Vasinsky написал(а):
Цитата
if (isset($name) && isset($meta_d) && isset($meta_k) && isset($filename) && isset($description))


вот это отдельный шедевр.

и для чё вы без жалостно unset то всех???

у вас есть submit в форме, дайте ему name

и потом чтобы запустить скрипт, достаточно проверить нажата кнопка или нет

например у кнопки name name="send"

if(isset($_POST['send']))
{
//Запускайте проверку и остальное
}


вы же можете наблюдать весь POST массив строкой

echo '<pre>' . print_r($_POST, 1) . '</pre>';


здесь все ваши данные отправленные формой

Спустя 34 секунды (29.11.2011 - 23:52) m4a1fox написал(а):
Киньте человеку ссылку на ирбисе где поповщина разбирается...

Спустя 3 минуты, 8 секунд (29.11.2011 - 23:55) Игорь_Vasinsky написал(а):
да здесь больше на самодеятельность похоже. Нужно учиться. ссылка на ирбис - выше. там от А до Я, через год сложные классы писать будите.

и в моём журнале гляньте статейки.

особенно про кокатенацию в SQL запросах
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.