Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите решить запрос на удаление
 
 автор: OREON   (09.02.2013 в 00:37)   письмо автору
 
 

Есть скрипт который отвечает за добавление в базу айпи (бан) вот он
<?php
//Получаем IP
if(getenv('HTTP_X_FORWARDED_FOR'))
{
$ip getenv('HTTP_X_FORWARDED_FOR');}
elseif(
getenv('REMOTE_ADDR'))
{
$ip getenv('REMOTE_ADDR');}
 
//Соединяемся с БД
$host "";
$user "";
$pass "";
$db "";
$connect = @mysql_connect("$host""$user","$pass");
@
mysql_select_db("$db"$connect);
if(
$_POST['del_ip']){
$del_ip=$_POST['del_ip'];
$query "DELETE FROM `ipban` WHERE `id` = $del_ip";
$result = @mysql_query($query);
}
//Выводим форму
if($_POST['ips'] == NULL)
{echo
"
<form action method='post'>
<input type='name' name='ips'>
<input type='submit' value='Забанить'>
</form>
<form action method='post'>
<input type='name' name='del_ip'>
<input type='submit' value='Удалить'>
</form>"
;
 
}
else{
$ips htmlspecialchars($_POST['ips']);
//Делаем запрос на добавлние IP в блэк
$query "INSERT INTO `ipban`  VALUES(NULL, '$ips')";
$result = @mysql_query($query);
if(!
$result) {echo"Ошибка!";}
else{echo
"IP $ips забанен!";}
}
?>

Добавление айпи в базу работает,а вот удаление из базы айпи неработает почему то,и еще при запуске этого скрипта выскакивают ошибки
Notice: Undefined index: del_ip in /home/----/-----/www/ban/ban.php on line 15

Notice: Undefined index: ips in /home/------/----/www/ban/ban.php on line 21
 так же когда пытаюсь удалить айпи с бана пишет ошибку
Notice: Undefined index: ips in /home/----/-----/www/ban/ban.php on line 21


где неправильно записан запрос на удаление айпи с базы ?

  Ответить  
 
 автор: cheops   (09.02.2013 в 07:16)   письмо автору
 
   для: OREON   (09.02.2013 в 00:37)
 

Эти замечания сообщают, что у вас отсутствуют элементы массива $_POST с такими именами. Вместо
if($_POST['del_ip'])

испльзуйте
if(isset($_POST['del_ip']))

чтобы проверить существует ли такая переменная. У вас судя по всему не происходит передача $_POST данных. Проверьте, что у вас в массиве $_POST при помощи конструкции
<?php
  
echo "<pre>";
  
print_r($_POST);
  echo 
"</pre>";
?>

  Ответить  
 
 автор: OREON   (09.02.2013 в 09:26)   письмо автору
 
   для: cheops   (09.02.2013 в 07:16)
 

>Эти замечания сообщают, что у вас отсутствуют элементы массива $_POST с такими именами. Вместо
>
if($_POST['del_ip'])

>испльзуйте
>
if(isset($_POST['del_ip']))

>чтобы проверить существует ли такая переменная. У вас судя по всему не происходит передача $_POST данных. Проверьте, что у вас в массиве $_POST при помощи конструкции
>
<?php
>  echo "<pre>";
>  
print_r($_POST);
>  echo 
"</pre>";
>
?>

При такой проверке выдало
Array
(
)

ну и так же ошибка осталась в в стороке 21 в запросе
if($_POST['ips'] == NULL)

Таблица в базе создана с двумя полями
CREATE TABLE `ipban` ( 
`id` int NOT NULL auto_increment, 
`ip` text NOT NULL, 
PRIMARY KEY  (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;  

  Ответить  
 
 автор: Sfinks   (09.02.2013 в 10:33)   письмо автору
 
   для: OREON   (09.02.2013 в 09:26)
 

Notice - это не ошибка, а замечание.
Notice: Undefined index: del_ip in /home/----/-----/www/ban/ban.php on line 15
говорит о том, что вы пытаетесь обратиться к не существующему индексу массива.
Следовательно оно будет возникать при каждой попытке его прочитать.
Вариантов три:

1 - ИМХО нежелательный - отключить нотисы. Для этого в начале скрипта прописать:
<?
  error_reporting
(E_ALL E_NOTICE);

2 - ИМХО длинный - каждый раз при обращении к соответствующему элементу проверять существует ли он:
<?
  
if( key_exists('del_ip',$_POST) && $_POST['del_ip'] ){.....}

3 - я так делаю - в начале скрипта проверять существование индекса и, если нет, то объявить его:
<?
  
if( !key_exists('del_ip',$_POST) ) $_POST['del_ip'] = null;

  Ответить  
 
 автор: confirm   (09.02.2013 в 10:49)   письмо автору
 
   для: Sfinks   (09.02.2013 в 10:33)
 

Вариант 4:
<?
$_POST
['del_ip'] = isset($_POST['del_ip']) ? (exp)$_POST['del_ip'] : null;

  Ответить  
 
 автор: OREON   (09.02.2013 в 15:07)   письмо автору
 
   для: confirm   (09.02.2013 в 10:49)
 

Cпасибо за помощь,ошибок нет,но айпи с базы оно всеравно не удаляет, тыкните носом где ошибка в коде?

  Ответить  
 
 автор: Valick   (09.02.2013 в 15:29)   письмо автору
 
   для: OREON   (09.02.2013 в 15:07)
 

ошибок нет
для поиска ошибок и отладки уберите всех собак @ из кода
вот эту строку
$ips = htmlspecialchars($_POST['ips']);

заменить на
$ips = mysql_real_escape_string($_POST['ips']);

в зависимости от версии сервера, может потребоваться отключить магические кавычки

  Ответить  
 
 автор: OREON   (09.02.2013 в 15:42)   письмо автору
 
   для: Valick   (09.02.2013 в 15:29)
 

Так я и ненашел как редактировать свой топик,поэтому зделал так
<?php
//Получаем IP
if(getenv('HTTP_X_FORWARDED_FOR'))
{
$ip getenv('HTTP_X_FORWARDED_FOR');}
elseif(
getenv('REMOTE_ADDR'))
{
$ip getenv('REMOTE_ADDR');}
//Соединяемся с БД
$host "localhost";
$user "";
$pass "";
$db "";
$connect mysql_connect("$host""$user""$pass");
mysql_select_db("$db"$connect);
if (isset( 
$_POST['del_ip'] )) $del_ip =  $_POST['del_ip']; else $del_ip false;
if (isset( 
$_POST['ips']  )) $ips =  $_POST['ips'] ; else $ips false;
if(
$del_ip != false){
$query "DELETE FROM `ipban` WHERE `ip` = '$del_ip'";
//echo $query;
$result mysql_query($query);
}
//Выводим форму
if($ips == false)
{echo
"
<form action='ban.php' method='post'>
<input type='name' name='ips'>
<input type='submit' value='Забанить'>
</form>"
;

$query "SELECT * from ipban";
$result mysql_query($query);
echo 
"<form action ='ban.php' method='post'> <table>";
while (
$row mysql_fetch_assoc($result)) {
echo 
"<tr><td>".$row['ip']."</td><td><input type=hidden name='del_ip' value='".$row['ip']."'><input type=submit value='Разбанить'></td></tr>"; }
echo 
"</table></form>";
}
else{
$ips htmlspecialchars($ips);
//Делаем запрос на добавлние IP в блэк
$query "INSERT INTO `ipban` (ip) VALUES('$ips')";
$result mysql_query($query);
if(!
$result) {echo"Ошибка!";}
else{echo
"IP $ips забанен!";}
}



echo (
"<div style=\"text-align: center; margin-top: 10px;\"><a href=\"ban.php\">Вернуться назад</a></div>");

?>

Это рабочий вариант,всем спасибо за помощь.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования