X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Пустая запись
macbeth9
macbeth9
Topic Starter сообщение 27.12.2010, 11:45; Ответить: macbeth9
Сообщение #1


Привет всем! У меня при обновлении страницы с формой, в базу добавляется пустая запись..Как это исправить?

Привожу код обработчика

[PHP]<?php
include ("../blocks/db.php"); /*Соединение с базой данных*/
if (isset($_REQUEST['title'])){
$title = htmlspecialchars(trim($_REQUEST['title']));
if (strlen($title) == 0){
$error[] = "<font style='display:block;width:90%;color:#D8000C;text-align:center;font-weight:bold;padding-bottom:5px'>Пожалуйста, введите название</font>";
}
}
if (isset($_REQUEST['content2'])){
$content2 = htmlspecialchars(trim($_REQUEST['content2']));
if (strlen($content2) == 0){
$error[] = "<font style='display:block;width:90%;color:#D8000C;text-align:center;font-weight:bold;padding-bottom:5px'>Пожалуйста, введите в поле текст</font>";
}
}
if (isset($_REQUEST['content2'])){
$content2 = htmlspecialchars(trim($_REQUEST['content2']));
if (strlen($content2) < 500){
$error[] = "<font style='display:block;width:90%;color:#D8000C;text-align:center;font-weight:bold;'>Пожалуйста, введите в поле текст более 500 символов</font>";
}}
if(stristr($picture,".jpg")){$picture = "<img alt='".$myrow["title"]."' style='border:1px solid #b2cbd0' src='pic.php?url=img/".$picture."&w=300&h=300&p=n'><br><br>";} else {$picture= "" ;}
if(($_POST['login']!=="")||($_POST['title']!=="")||($_POST['content2']!=="")){
if ( $_FILES['picture']['name'] != "" ) {
$imageInfo = getimagesize($_FILES['picture']['tmp_name']);
$width = $imageInfo[0];
$height = $imageInfo[1];
if($height > 1000 || $width > 1000){echo "Изображение превышает допустимые размеры";exit;}
$newimg = date("YmdHis").".jpg";
if(stristr($_SERVER['OS'],"linux")){$path = str_replace("addnew.php","",$_SERVER['SCRIPT_FILENAME']) . "img/";}
else {$path = "img/";}
move_uploaded_file ( $_FILES['picture']['tmp_name'], $path . $newimg);}
else{ $newimg="noimg"; }
$datetime=date("YmdHis");
$result = mysql_query("INSERT INTO rasskazi (title, content2, login, picture, datetime ) VALUES ('$title', '$content2', '$login', '$newimg', '$datetime')");
//Если запрос пройдет успешно то в переменную result вернется true
if($result)
{
$yes[] = "Успех"; }
else{
$no[] = "Ошибка"; }
}
?>[/PHP]
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 27.12.2010, 13:17; Ответить: Mulder_hb
Сообщение #2


Сами код писали или понатаскали из разных источников, не понимая, что он делает? Зачем вы вводите массив ошибок error, если потом его нигде не обрабатываете? Зачем вы дважды проверяете на пустоту title, причем при вторая проверка сделана неверно? Естественно, ваш запрос в базу ничем не проверяется, а потому пустые значения вполне допустимы. Исправляйте код обработчика, причем кардинально.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LifeUP
LifeUP
сообщение 27.12.2010, 13:19; Ответить: LifeUP
Сообщение #3


форму кинь сюда. напишу обработчик
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Nitrex
Nitrex
сообщение 27.12.2010, 13:20; Ответить: Nitrex
Сообщение #4


Попова учили?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LifeUP
LifeUP
сообщение 27.12.2010, 13:27; Ответить: LifeUP
Сообщение #5


а попов тут причём?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
macbeth9
macbeth9
Topic Starter сообщение 27.12.2010, 22:30; Ответить: macbeth9
Сообщение #6


<form action="" method=post enctype='multipart/form-data' name="content3">
<label>Название:<span style="color:#F00">*</span></label><input style="margin-top:10px" type=text name=title size=35 maxlength="60" value="<? echo ''.$_POST["title"].'' ?>"><BR><font style="font-size:11px;">максимально 60 знаков</font><BR><BR>
<label>Текст:<span style="color:#F00">*</span></label><textarea name='content2' value="<? echo ''.$_POST["content2"].'' ?>" rows=20 cols=80 style="font-size: 11px;" ></textarea><BR><font style="font-size:11px;padding-left:150px">минимально 500 знаков</font><BR><BR>
<label>Изображение:</label><input style="margin-top:10px;font-size: 11px;" type=file name=picture size=30><BR><BR>
<input type="checkbox" name="chk"
onClick="apply()"> <font style='font-size: 11px;'>Я подтверждаю, что данная информация точна и достоверна</font></td></tr>
<input style="margin-top:10px" type=hidden name=login size=35 maxlength="70" value='<? echo $_SESSION["user"]["login"] ?>'><input type='submit' disabled style="margin:10px" name='submit' value='Добавить' class="submit">
</form>
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
macbeth9
macbeth9
Topic Starter сообщение 27.12.2010, 22:34; Ответить: macbeth9
Сообщение #7


Попова тут нет вообще) Mulder, я же не полностью код выложил, а вы тут сразу начинаете..через error вывожу ошибки
[PHP]<?php
if($error){ echo implode($error); }
?>[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZhukV
ZhukV
сообщение 28.12.2010, 10:17; Ответить: ZhukV
Сообщение #8


Ошибка возникает на 33 строке.
Я и сам когда стыкнулся с ней, думал что дуба дам.
Проблема в том, что Вы назвали поле datestamp, такой же и тип есть у данных SQL.
При Вашем запросе мускула просто не знает, что это. Тип данных или названия поля.
В результате есть два выхода:
1. Переименовать поле.
2. При запросе, установить поле в обратные косые черты : `datestamp`

Также у скрипте, есть некие ньюансы:
1. Зачем в самом начале подключатся к БД, если она может быть и не использована (Если ошибка валидации). В результате, подключайтесь только тогда, когда Вам нужно. Экономия пару сотых секунд:)
2. Если Вы данные грузите по каком то методу, то вытаскивайте их так же: $_GET, $_POST.
3. 28,29 строки зачем? И без них будет отлично работать. Вот можно так, если нужно грузить в директорию, где находится обрабатываемый файл:
[PHP]$path = dirname(__FILE__)[/PHP]
4. На 22 строке, Вы просто поверяете загружаемый файл по имени, а ошибки при загрузке? Лучше проверять по значению error, если файл не был загружен, код ошибки - 4
5. Если Вы хотите проверить, является ли загружаемый файл изображением, тогда обезательно нужно проверять по миме типу, находится в переменной type (Я вот могу взять файл пхп, перейменовать его на картинку, и загрузить :) Он то конечно же обрабатыватся не будет, но на тупых серверах, можа полностью получить доступ :))
6. На линуксах, в большинстве случаев, но только что созданных каталогах устанавливаются права 644, в результате, пользователь увидит ошибку при копировании. Лучше подавите ошибки при помощи @ и проверте, было ли скопировано.
7. 5, 11 строка, совсем не понятны. Если проверяете, есть ли что то в переменной, тогда просто проверяйте, а не делайте бог знает чего. Ваши же ресурсы и Ваше же время :):
[PHP]if($content2){//Если переменная имеет значение
//OR
if(!$content){//Если она пуста[/PHP]

Ошибки обработаны красиво, но вот вывод их?
(macbeth9 @ 28.12.2010, 00:34) *
Попова тут нет вообще) Mulder, я же не полностью код выложил, а вы тут сразу начинаете..через error вывожу ошибки

Следы Попова заметны, именно на проверках :)
Не нужно огрызатся, а приймите к вниманию:
Попов не научит!!! Научитесь сами, если захотите :), вот как многие из нас на этом форуме.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 28.12.2010, 11:10; Ответить: Mulder_hb
Сообщение #9


(macbeth9 @ 28.12.2010, 00:34) *
Попова тут нет вообще) Mulder, я же не полностью код выложил, а вы тут сразу начинаете..через error вывожу ошибки

А какой смысл вывода ваших ошибок, если скрипт после них продолжает работать, как ни в чем не бывало?
[PHP]if (strlen($title) == 0) {
$error[] = "<font style='display:block;width:90%;color:#D8000C;text-align:center;font-weight:bold;padding-bottom:5px'>Пожалуйста, введите название</font>";
}[/PHP]
Допустим strlen($title) действительно равен 0. И что? Я не вижу кода, при котором произойдет останов скрипта. А вы еще удивляетесь, почему запрос проходит. А ему просто ничто не мешает выполниться.
[PHP]if(($_POST['login']!=="")||($_POST['title']!=="")||($_POST['content2']!==""))[/PHP]
А это зачем? Выше вы уже проверили и title, и content2 на пустоту. Зачем опять проверять?

[PHP]if (isset($_REQUEST['content2'])){
$content2 = htmlspecialchars(trim($_REQUEST['content2']));
if (strlen($content2) == 0){
$error[] = "<font style='display:block;width:90%;color:#D8000C;text-align:center;font-weight:bold;padding-bottom:5px'>Пожалуйста, введите в поле текст</font>";
}
}
if (isset($_REQUEST['content2'])){
$content2 = htmlspecialchars(trim($_REQUEST['content2']));
if (strlen($content2) < 500){
$error[] = "<font style='display:block;width:90%;color:#D8000C;text-align:center;font-weight:bold;'>Пожалуйста, введите в поле текст более 500 символов</font>";
}}[/PHP]
А зачем тут дважды проверять на одно и тоже? Достаточно лишь проверить на "меньше 500".

А зачем такие дикие операционно-зависимые проверки путей?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
LifeUP
LifeUP
сообщение 28.12.2010, 12:30; Ответить: LifeUP
Сообщение #10


Форма:
<form action="" method=post enctype="multipart/form-data" name="content3">
<label style="cursor:pointer;">
Название:<span style="color:#F00">*</span> <input style="margin-top:10px" type="text" name="title" size="35" maxlength="60" value="<? echo ''.$_POST["title"].'' ?>"><font style="font-size:11px;">максимально 60 знаков</font>
</label><br /><br />
<label style="cursor:pointer;">
Текст:<span style="color:#F00">*</span> <textarea name="content2" value="<? echo ''.$_POST["content2"].'' ?>" rows=20 cols=80 style="font-size: 11px;" ></textarea><font style="font-size:11px;padding-left:10px">минимально 500 знаков</font>
</label><br /><br />
<label style="cursor:pointer;">
Изображение: <input style="margin-top:10px;font-size: 11px;" type="file" name="picture" size="30">
</label><br /><br />
<input type="checkbox" name="chk" onClick="apply()"> <font style='font-size: 11px;'>Я подтверждаю, что данная информация точна и достоверна</font>
<input style="margin-top:10px" type="hidden" name="login" size="35" maxlength="70" value='ceqwccqe'><br />
<input type="submit" style="margin:10px" name="submit" value="Добавить" class="submit">
</form>


Обработчик:
[PHP]
$info = '';

if (isset ($_POST['submit']))
{
$title = isset ($_POST['title']) ? $_POST['title'] : '';
$content2 = isset ($_POST['content2']) ? $_POST['content2'] : '';
$login = isset ($_POST['login']) ? $_POST['login'] : '';
$picture = isset ($_FILES['picture']) ? $_FILES['picture'] : '';
$chk = isset ($_POST['chk']) ? $_POST['chk'] : '';


if ($chk != 'on') {
$info = 'Подтвердите информацию';
} elseif (strlen ($title) < 3 || strlen ($title) > 150) {
$info = 'Название не может быть меньше 3 и больше 150 символов';
} elseif (strlen ($content2) < 3 || strlen ($content2) > 1000) {
$info = 'Титул не может быть меньше 3 и больше 150 символов';
} elseif (strlen ($login) < 3 || strlen ($login) > 20) {
$info = 'тут твой код который будет реагировать на логин';
} elseif (empty ($picture['size'])) {
$info = 'Выберите файл';
}


if (empty ($info))
{
# Папка куда будут записываться файлы
$filedir = dirname (__FILE__);

@copy ($picture['tmp_name'], $filedir . '/' . $picture['name']);

if (@mysql_query ("INSERT INTO rasskazi (title, content2, login, picture, datetime ) VALUES ('" . $title . "', '" . $content2 . "', '" . $login . "', '" . $newimg . "', '" . time () . "')"))
{
$info = 'Всё путём';
}
else
{
$info = 'Ошибка записи в БД';
}
}
}
echo $info;
[/PHP]

P.S Перед применением обработай входящие данные, также проверь файл чтобы шелл не залили, ну и корректируй под себя.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыКак улучшить запись голоса
0 k0ttee 5902 6.8.2020, 18:59
автор: k0ttee
Открытая тема (нет новых ответов) Переведу аудио/видио запись в текст
0 ByhAnka 1512 28.1.2017, 22:39
автор: ByhAnka
Открытая тема (нет новых ответов) Запись массива в БД (200 RUR)
3 pjotr 3494 7.2.2013, 15:41
автор: -A1ex-


 



RSS Текстовая версия Сейчас: 24.4.2024, 16:32
Дизайн