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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проверки GET и POST ???

Сообщения:  [1-10]    [11-20]  [21-26] 

 
 автор: ANGO   (21.05.2007 в 15:09)   письмо автору
 
   для: Trianon   (19.05.2007 в 14:29)
 

Спасибо, понял!

   
 
 автор: Trianon   (19.05.2007 в 14:32)   письмо автору
 
   для: cheops   (19.05.2007 в 01:06)
 

Варианты разнятся в первую очередь в том, что первый вариант имеет случаи, когда оставит переменную без вновь присвоенного значения. Это в рассматриваемом контексте - значимое отличие. А то, чем глушить нотисы - так, мелочи, на алгоритм не влияющие.

   
 
 автор: Trianon   (19.05.2007 в 14:29)   письмо автору
 
   для: ANGO   (19.05.2007 в 00:46)
 

Строка if(isset($_GET['id1'])) $id1=intval($_GET['id1']); - ошибочна. Ошибка её заключается в том, что в случае отсутствия параметра id1 в строке запроса, переменная $id1 оказывается незаданной, и вполне может остаться от другого кода. Например от magic-quotes.
Правильный код такой:
if(isset($_GET['id1'])) $id1=intval($_GET['id1']); else $id1=false;
где false - значение, которое заведомо не может являться актуальным идентификатором.
Этот оператор может быть упрощен до
$id1= isset($_GET['id1']) ? $_GET['id1'] : false;
А вот последний практически эквивалентен записи $id1=intval(@$_GET['id1']);
Небольшая разница проявляется в том, как регистрируются ошибки, и в том что он возвращает null вместо false, но в последующий код не чувствует различий между null, false, 0 и даже "".

[поправлено модератором]

   
 
 автор: cheops   (19.05.2007 в 01:06)   письмо автору
 
   для: ANGO   (19.05.2007 в 00:46)
 

Первый вариант позволяет исключить генерацию замечаний (Notice), правда последние часто отключают (на всех хостингах отключены). Для этого, следует выставить соответствующее значение для директивы error_reporting http://www.softtime.ru/info/articlephp.php?id_article=23, в конфигурационном файле php.ini
error_reporting = E_ALL & ~E_NOTICE  

Так же можно изменить уровень обработки ошибок локально, для этого в начало скрипта следует поместить функцию
<?php 
Error_Reporting
(E_ALL & ~E_NOTICE); 
?>

В качестве параметра, которой передать соответствующий уровень обработки ошибок.

   
 
 автор: ANGO   (19.05.2007 в 00:46)   письмо автору
 
   для: ANGO   (18.05.2007 в 17:57)
 

Попрошу, кто может объяснить подробнее, чем

if(isset($_GET['id1'])) $id1=intval(SqlSafeStr($_GET['id1']));

отличается от

$id1=intval(SqlSafeStr(@$_GET['id1']));

раньше я думал что @ ставится перед функцией чтобы скрыть ее ошибку

   
 
 автор: ANGO   (18.05.2007 в 17:57)   письмо автору
 
   для: ANGO   (18.05.2007 в 17:55)
 

то есть проверку if(isset($_GET['id1'])) осуществлять не нужно?

   
 
 автор: ANGO   (18.05.2007 в 17:55)   письмо автору
 
   для: Trianon   (18.05.2007 в 17:43)
 

а можно по подробнее, для человека, который только год програмит
вы добавили @
гда то можно более подробнее почитать?

   
 
 автор: Trianon   (18.05.2007 в 17:43)   письмо автору
 
   для: ANGO   (18.05.2007 в 17:24)
 

Еще раз повторяю. Переменные не инициализированы, из-за чего на скрипт может быть атака.
А теперь правильный вариант того же кода.

<?php
$id1 
intval(@$_GET['id1']); 
$id2 intval(@$_GET['id2']); 
if(
$id1 && !$id2)
    
mysql_query("SELECT * FROM table WHERE cat_1=$id1 "); 
else if(
$id1 && $id2)
    
mysql_query("SELECT * FROM table WHERE cat_1= $id1 AND cat_2=$id2 ");
else
{
  
header("Location: index.php");
  exit(); 
}
?>

   
 
 автор: ANGO   (18.05.2007 в 17:24)   письмо автору
 
   для: Trianon   (18.05.2007 в 17:07)
 

ой, я вас совсем запутал, пишу подробно как есть, в общем конструкция такая:

<?
if(isset($_GET['id1'])) $id1=intval(SqlSafeStr($_GET['id1']));
if(isset(
$_GET['id2'])) $id2=intval(SqlSafeStr($_GET['id2']));

if(isset(
$id1) AND !isset($id2))
{
mysql_query("SELECT * FROM table WHERE cat_1='$id1' ")
}

else if(isset(
$id1) AND isset($id2))
{
mysql_query("SELECT * FROM table WHERE cat_1='$id1' AND cat_2='$id2' ")
}

else
{
echo 
"<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=index.php'></HEAD></HTML>";
exit();
}
?>

   
 
 автор: Trianon   (18.05.2007 в 17:07)   письмо автору
 
   для: ANGO   (18.05.2007 в 17:03)
 

> ANGO (18.05.2007 в 14:09)
>.... и я осуществляю проверку вначале файла: if(isset($_POST['ID']))

и

> ANGO (18.05.2007 в 16:56)
> страница обрабатывает 2 условия, в которых находится SQL запрос и весь рабочий РНР код: if(isset($id1) AND !isset($id2))


условия отличаются.

   

Сообщения:  [1-10]    [11-20]  [21-26] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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