Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

06.01.2009, 15:13
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
Ошибка запроса: Query was empty
По русски: Запрос был пуст)
у тебя register_globals = ON ?
Или где получение данных из массива POST?
а защита от sql инфекций?)
add ж у тебя не константа (как и news), кавычки какбэ надо
PHP код:
$form = "....";
mysql_query($form);
if($form){
Какбэ проверять надо результат запроса, а не строку запроса.
PHP код:
$form = "....";
$a = mysql_query($form);
if($a){
я хз под чем ты писал такой скрипт, но явно новый год прошёл нормально))
|
|
|

06.01.2009, 15:23
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Значит в таблицу news нет записей. Должна быть хоть одна запись, чтобы запрос был успешным.
Дальше
PHP код:
$form = "INSERT INTO news VALUES ('$num', '$name', '$text', '$text2', '$ip')";
Так неправильно, правильно так:
PHP код:
$form = "INSERT INTO news (`num`, `name`, `text`,`text2`,`ip` ) VALUES ('$num', '$name', '$text', '$text2', '$ip')";
т.е. надо указать поля, куда вставляешь данные, а не так вот просто.
А если у тебя поле num просто id для какого-то текста, который просто увеличивается на единицу, так проще и сделать сразу такое поле с автоинкриментом, оно само будет автоматически увеличиваться при появлении новой записи, т.е. сначала сделай такую таблицу (один раз):
PHP код:
$query = "CREATE TABLE news (
num int(10) NOT NULL auto_increment,
name varchar(200) default NULL,
text varchar(200) default NULL,
text2 varchar(200) default NULL,
ip varchar(200) default NULL,
PRIMARY KEY (num)
);";
$end=@mysql_query($query);
И всё, забудь про num, обрабатывай только данные
|
|
|

06.01.2009, 16:12
|
|
Постоянный
Регистрация: 29.09.2008
Сообщений: 553
Провел на форуме: 2584134
Репутация:
519
|
|
Поясню ситуацию:
Начал я писать движок...
Сначала все норм, потом перестали добавлятся новости(((
Потом мне посоветовали поставить другой конфиг, вот код:
PHP код:
<?
$link = mysql_connect(localhost, test, test) or die('Не возможно соединиться с базой ('.mysql_error().')');
mysql_select_db(test) or die('Нельзя выбрать базу ('.mysql_error().')');
$result = mysql_query($query) or die ('Ошибка запроса: '.mysql_error());
?>
Когда я прохожу по адресу localhost/admin
появляется ошибка:
Ошибка запроса: Query was empty
полный код:
PHP код:
<?
$name=$_POST['name'];
$text=$_POST['text'];
$text2=$_POST['text2'];
if($_GET['page']==news)
{
print"<center><a href=?news=add>Добавить новость</a></center><br><br>";
$query = "SELECT * FROM news order by id desc LIMIT 0,100000"; $result = mysql_query($query);
while ($row = mysql_fetch_array($result)) :
print'<table width="100%" border="0" cellpadding="3" style="border: 1px solid #324316"><tr><td bgcolor="#324316">'.$row['name'].'</td></tr><tr><td>'.$row['text'].'<br>'.$row['text2'].'</td></tr>
<tr><td bgcolor="#324316"><a href="?news=delete&id='.$row['id'].'">Удалить</a>
<a href="?edit=news&id='.$row['id'].'">Редактировать</a></td></tr>
</table><br>';
endwhile;
}
if($_GET['edit']==news)
{
$index=$_GET['id'];
$query = "SELECT * FROM news WHERE `id` = '".$index."'"; $result = mysql_query($query);
while ($row = mysql_fetch_array($result)) :
print'
<form method="POST" action="index.php?news=edit&id='.$row['id'].'">
<table width="100%" border="0" cellpadding="3" style="border: 1px solid #324316"><tr><td bgcolor="#324316">
Название новости: <input type="text" name="name" size="40" value="'.$row['name'].'"></td></tr><tr><td>Первый текст: (выводится на главной странице)<br><br>
<textarea rows="5" name="text" cols="70">'.$row['text'].'</textarea><br><br>
Второй текст: (выводится на странице подробнее о новости)<br><br>
<textarea rows="10" name="text2" cols="70">'.$row['text2'].'</textarea></td></tr>
<tr><td bgcolor="#324316"><center>
<input type=submit value="OK"></center></td></tr></table></form>';
endwhile;
}
if($_GET['news']==edit)
{
$index=$_GET['id'];
$edit = "UPDATE `news` SET `name` = '$name', `text` = '$text', `text2` = '$text2' WHERE `id` = ".$index;
mysql_query($edit);
if($edit){
echo"<font color=red>Новость успешно изменена!</font><meta http-equiv='refresh' content='2;URL=index.php?page=news'>";
}
}
if($_GET['news']==delete)
{
$da=$_GET['id'];
$del = "DELETE FROM `news` WHERE `id` = '".$da."'";
mysql_query($del);
if($del){
echo"<font color=red>Новость успешно удалена!</font><meta http-equiv='refresh' content='2;URL=index.php?page=news'>";
}
}
if($_GET['news']==add)
{
$query = "SELECT * FROM news"; $result = mysql_query($query);
$n = mysql_num_rows($result);
$num=$n+1;
echo'<form method="POST" action="index.php?add=news">
<table width="100%" border="0" cellpadding="3" style="border: 1px solid #324316"><tr><td bgcolor="#324316">
Название: <input type="text" name="name" size="40" value="'.$name.'"></td></tr><tr><td>Первый текст: (выводится на главной странице)<br><br>
<textarea rows="5" name="text" cols="70">'.$text.'</textarea><br><br>
Второй текст: (выводится на странице подробнее о новости)<br><br>
<textarea rows="10" name="text2" cols="70">'.$text2.'</textarea></td></tr>
<tr><td bgcolor="#324316"><center>
<input type=submit value="OK"></center></td></tr></table></form>';
}
if($_GET['add']==news)
{
$form = "INSERT INTO news VALUES ('$num', '$name', '$text', '$text2', '$ip');";
mysql_query($form);
if($form){
echo"<font color=red>Новость успешно добавлена!</font><meta http-equiv='refresh' content='2;URL=index.php?page=news'>";
}
}
?>
Создаю таблицу невс с колонками:
PHP код:
CREATE TABLE `news` (
`id` int(20) unsigned NOT NULL auto_increment,
`name` varchar(20) NOT NULL default '',
`text` varchar(20) NOT NULL default '',
`text2` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Вроде все...
Хочется услышать все замечания и предложения по решению проблемы, ну и заодно по безопасности...
Зарание спасибо!
|
|
|

06.01.2009, 16:19
|
|
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме: 9220514
Репутация:
3338
|
|
Проблема скорее всего здесь:
$index=$_GET['id'];
и, соотвественно, дальше здесь:
$query = "SELECT * FROM news WHERE `id` = '".$index."'"; $result = mysql_query($query);
попробуй подставить вместо $index просто реальную цифру той новости, которая реально существует
Ну и можно посмотреть значение $index (кладется туда вообще что-нибудь или нет):
PHP код:
$index=$_GET['id'];
echo $index;
|
|
|

06.01.2009, 16:48
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
-m0rgan- Либо ты нас непонятно зачем обманываешь, либо крайне сильно заблуждаешься... Во-первых, это НЕ весь листинг, ты либо этот файл где-то инклудишь, либо случайно удалил инклуд конфига из начала поста
PHP код:
<?
$link = mysql_connect(localhost, test, test) or die('Не возможно соединиться с базой ('.mysql_error().')');
mysql_select_db(test) or die('Нельзя выбрать базу ('.mysql_error().')');
>>>>>>>>>>>$result = mysql_query($query) or die ('Ошибка запроса: '.mysql_error()); <<<<<<<<<<<<<<<<<<
?>
Смотрим на выделенную строчку. Тебе что сказали? Для всех mysql_query сделать такую конструкцию, а не бездумно копировать ее зачем-то в конфиг оО. Естественно, что $query - пустая строка в конфиге, собственно отсюда и ошибка.
Во-вторых if($_GET['edit']==news) - тебе парой постов выше сказали, что ты сравниваешь НЕ со строкой, а с константой, то есть эта проверка эквивалентна if($_GET['edit']==0)
В третьих:
PHP код:
$form = "INSERT INTO news VALUES ('$num', '$name', '$text', '$text2', '$ip');";
mysql_query($form);
if($form)
$form - это заданная строка и ты проверяешь задал ли ты ее, а не выполнил ли ты запрос с ней. И так же в других местах кода
В-четвертых, Читать прикрепленную в этом разделе тему про анти-SQLinj
Последний раз редактировалось Gifts; 06.01.2009 в 16:50..
|
|
|

06.01.2009, 17:03
|
|
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
Провел на форуме: 7875940
Репутация:
2362
|
|
Сообщение от Gifts
Во-вторых if($_GET['edit']==news) - тебе парой постов выше сказали, что ты сравниваешь НЕ со строкой, а с константой, то есть эта проверка эквивалентна if($_GET['edit']==0)
Имя неопределенной константы преобразуется к строковому типу
А так все остальное ты верно сказал.
|
|
|

06.01.2009, 17:11
|
|
Постоянный
Регистрация: 29.09.2008
Сообщений: 553
Провел на форуме: 2584134
Репутация:
519
|
|
Во)
Вснм спасибо!
Это мну очень сильно проглючило(((
P.S.:Нет, я не обнаную,это весь пхп код, а конфиг я вставлял в начале хтмл кода)
|
|
|

06.01.2009, 17:25
|
|
Постоянный
Регистрация: 31.01.2008
Сообщений: 643
Провел на форуме: 6128108
Репутация:
445
|
|
всем гуру раздела здрасти :-)
народ кто как изучал php?
То есть нужен учебничек онлайн (то есть прям на сайте)
то есть где там начинаеться все с самого простого (там переменные всякие и т.д.)(+с примерами чтобы было) и заканчивая там чем нибуть сложнейшим на php (к примеру простой двиг сайта где включаеться все что описывалось в учебнике (где это все эти туториалы))
офф сайты не катят
(html знаю)
Последний раз редактировалось diznt; 06.01.2009 в 17:27..
|
|
|

06.01.2009, 17:29
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
diznt https://forum.antichat.ru/thread89681.html
От себя - знание любого языка + постепенное изучение операторов PHP
|
|
|

06.01.2009, 18:24
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
Я бы посоветовал книгу: Максим Кузнецов - PHP на примерах.
Имя неопределенной константы преобразуется к строковому типу
это так, но всё равно ты получишь ошибку о неопределённой константе, хотя текст и выведется.
В любом случае так делать не надо)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|