ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 05.01.2009, 16:50
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 850
С нами: 9975266

Репутация: 1916


По умолчанию

Цитата:
// не забываем об анти SQL
не менее сильно)

я б лучше вот так сделал:
PHP код:
<form action="" method="post">
<input type="checkbox" name="ids[]" value="1" />
<input type="checkbox" name="ids[]" value="2" />
<input type="checkbox" name="ids[]" value="3" />
<input type="checkbox" name="ids[]" value="4" />
<input type="submit" value="Удалить выбранные" />
</form>

<?php
$ids 
= isset($_POST['ids']) && is_array($_POST['ids']) ? array_map('intval'$_POST['ids']) : '';

if(
$ids){
    
    
$sql mysql_query('DELETE FROM `table`
                        WHERE `id` = IN ('
.join(','$ids).') ');
                        
    echo 
$sql 'Успешно =)' :  'Неудачно =('
    
}                             

?>

Последний раз редактировалось .:EnoT:.; 05.01.2009 в 16:53..
 
Ответить с цитированием

  #2  
Старый 06.01.2009, 14:51
-m0rgan-
Постоянный
Регистрация: 29.09.2008
Сообщений: 553
С нами: 9270510

Репутация: 519


По умолчанию

Доброе время суток!
Подскажите , что означает эта ошибка:
Ошибка запроса: Query was empty
кусок кода:
PHP код:
if($_GET['news']==add)
{
$query "SELECT * FROM news"$empty mysql_query($query);
$n mysql_num_rows($empty);
$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'>";
}

Зарание спасибо!
 
Ответить с цитированием

  #3  
Старый 06.01.2009, 15:13
.:EnoT:.
Постоянный
Регистрация: 29.05.2007
Сообщений: 850
С нами: 9975266

Репутация: 1916


По умолчанию

Цитата:
Ошибка запроса: Query was empty
По русски: Запрос был пуст)

у тебя register_globals = ON ?
Или где получение данных из массива POST?
а защита от sql инфекций?)

PHP код:
if($_GET==add
add ж у тебя не константа (как и news), кавычки какбэ надо

PHP код:
$form "...."
mysql_query($form);
if(
$form){ 
Какбэ проверять надо результат запроса, а не строку запроса.
PHP код:
$form "...."
$a mysql_query($form);
if(
$a){ 
я хз под чем ты писал такой скрипт, но явно новый год прошёл нормально))
 
Ответить с цитированием

  #4  
Старый 06.01.2009, 15:23
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами: 9649706

Репутация: 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, обрабатывай только данные
 
Ответить с цитированием

  #5  
Старый 06.01.2009, 16:12
-m0rgan-
Постоянный
Регистрация: 29.09.2008
Сообщений: 553
С нами: 9270510

Репутация: 519


По умолчанию

Поясню ситуацию:
Начал я писать движок...
Сначала все норм, потом перестали добавлятся новости(((
Потом мне посоветовали поставить другой конфиг, вот код:
PHP код:
<?
$link 
mysql_connect(localhosttesttest) 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` (
`
idint(20unsigned NOT NULL auto_increment,
`
namevarchar(20NOT NULL default '',
`
textvarchar(20NOT NULL default '',
`
text2varchar(20NOT NULL default '',
PRIMARY KEY (`id`),
KEY `id` (`id`)
ENGINE=MyISAM DEFAULT CHARSET=cp1251
Вроде все...
Хочется услышать все замечания и предложения по решению проблемы, ну и заодно по безопасности...
Зарание спасибо!
 
Ответить с цитированием

  #6  
Старый 06.01.2009, 16:19
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
С нами: 9649706

Репутация: 3338


По умолчанию

Проблема скорее всего здесь:

$index=$_GET['id'];

и, соотвественно, дальше здесь:

$query = "SELECT * FROM news WHERE `id` = '".$index."'"; $result = mysql_query($query);

попробуй подставить вместо $index просто реальную цифру той новости, которая реально существует

Ну и можно посмотреть значение $index (кладется туда вообще что-нибудь или нет):

PHP код:
$index=$_GET['id'];
echo 
$index
 
Ответить с цитированием

  #7  
Старый 06.01.2009, 16:48
Gifts
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
С нами: 9497186

Репутация: 1304


По умолчанию

-m0rgan- Либо ты нас непонятно зачем обманываешь, либо крайне сильно заблуждаешься... Во-первых, это НЕ весь листинг, ты либо этот файл где-то инклудишь, либо случайно удалил инклуд конфига из начала поста

PHP код:
<?
$link 
mysql_connect(localhosttesttest) 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..
 
Ответить с цитированием

  #8  
Старый 06.01.2009, 17:03
oRb
Members of Antichat - Level 5
Регистрация: 09.05.2008
Сообщений: 304
С нами: 9477026

Репутация: 2362
По умолчанию

Цитата:
Сообщение от Gifts  

Во-вторых if($_GET['edit']==news) - тебе парой постов выше сказали, что ты сравниваешь НЕ со строкой, а с константой, то есть эта проверка эквивалентна if($_GET['edit']==0)
Имя неопределенной константы преобразуется к строковому типу
PHP код:
<?
echo news;
?>
А так все остальное ты верно сказал.
 
Ответить с цитированием

  #9  
Старый 06.01.2009, 17:11
-m0rgan-
Постоянный
Регистрация: 29.09.2008
Сообщений: 553
С нами: 9270510

Репутация: 519


По умолчанию

Во)
Вснм спасибо!
Это мну очень сильно проглючило(((
P.S.:Нет, я не обнаную,это весь пхп код, а конфиг я вставлял в начале хтмл кода)
 
Ответить с цитированием

  #10  
Старый 06.01.2009, 17:25
diznt
Постоянный
Регистрация: 31.01.2008
Сообщений: 643
С нами: 9619229

Репутация: 445


По умолчанию

всем гуру раздела здрасти :-)
народ кто как изучал php?
То есть нужен учебничек онлайн (то есть прям на сайте)
то есть где там начинаеться все с самого простого (там переменные всякие и т.д.)(+с примерами чтобы было) и заканчивая там чем нибуть сложнейшим на php (к примеру простой двиг сайта где включаеться все что описывалось в учебнике (где это все эти туториалы))
офф сайты не катят

(html знаю)

Последний раз редактировалось diznt; 06.01.2009 в 17:27..
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[c/c++] Новичкам: задаем вопросы _Great_ С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 5421 21.04.2026 07:37
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 7 (пользователей: 0 , гостей: 7)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.