|
|
|
|
|
для: Trianon
(19.05.2007 в 14:29)
| | Спасибо, понял! | |
|
|
|
|
|
|
|
для: cheops
(19.05.2007 в 01:06)
| | Варианты разнятся в первую очередь в том, что первый вариант имеет случаи, когда оставит переменную без вновь присвоенного значения. Это в рассматриваемом контексте - значимое отличие. А то, чем глушить нотисы - так, мелочи, на алгоритм не влияющие. | |
|
|
|
|
|
|
|
для: 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 и даже "".
[поправлено модератором] | |
|
|
|
|
|
|
|
для: 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
(18.05.2007 в 17:57)
| | Попрошу, кто может объяснить подробнее, чем
if(isset($_GET['id1'])) $id1=intval(SqlSafeStr($_GET['id1']));
отличается от
$id1=intval(SqlSafeStr(@$_GET['id1']));
раньше я думал что @ ставится перед функцией чтобы скрыть ее ошибку | |
|
|
|
|
|
|
|
для: ANGO
(18.05.2007 в 17:55)
| | то есть проверку if(isset($_GET['id1'])) осуществлять не нужно? | |
|
|
|
|
|
|
|
для: 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();
}
?>
|
| |
|
|
|
|
|
|
|
для: 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();
}
?>
|
| |
|
|
|
|
|
|
|
для: 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))
условия отличаются. | |
|
|
|
|