У меня есть небольшая проблема. Я получаю доступ к сайту через foro.php? id=74&mode=add или foro.php? id=74&mode=edit это хорошо работает.. Но когда я добавляю двоеточие, точка с запятой (; или :) к foro.php? id=74&mode=add это переходит к опции редактирования
foro.php? id=74&mode=add;
foro.php? id=74&mode=add:
foro.php? id=74&mode=add’
Ниже мой код
<?php
$numb=mysql_real_escape_string($_GET['id']);
if ($_GET['mode']=='add') {
$sql1="select * from cello where number='".mysql_real_escape_string($numb)."' LIMIT 1";
$result1=mysql_query($sql1) or die(mysql_error());
while ($row=mysql_fetch_array($result1)) {
$name=$row['name'];
echo $name;
}
}
elseif ($_GET['mode']='edit') {
$sql="select * from cello account_number='".mysql_real_escape_string($numb)."' limit 1";
$result=mysql_query($sql) or die(mysql_error());
while ($row=mysql_fetch_array($result)) {
$acnumb=$row['number'];
$name=$row['name'];
$address=$row['address'];
echo $acnumb;
echo $name;
echo $address;
}
}
else {echo "error!!";}
?>
Какой-либо путь, как предотвратить его?
Вы использовали оператор присваивания =
вместо оператор равенства ==
.
Попробуйте изменить это:
elseif ($_GET['mode']='edit') {
на это:
elseif ($_GET['mode']=='edit') {
Проблема в том, что в следующих строках в операторе if вы не сравниваете, а присваиваете значение элементу режима в массиве GET:
...
elseif ($_GET['mode']='edit') {
$sql="select * from cello account_number='".mysql_real_escape_string($numb)."' limit 1";
$result=mysql_query($sql) or die(mysql_error());
...
Эта операция возвращает истину, первое сравнение ложно и поэтому он попадает в раздел редактирования.
Решение:
Проблема определенно кроется в строке elseif ($_GET['mode']='edit') {
; оператор =
там устанавливает $_GET['mode']
в 'edit'
(что всегда оценивается как true
). Хорошей, но лексически запутанной практикой является написание условий типа:
if (5 == $some_var)
Которые немедленно выдадут ошибку, если второй =
не был включен.
Предложение:
Возможно, вы захотите реализовать элемент управления switch
для организации кода:
<?php
switch ($_GET['mode']) {
case 'add':
$sql1="select * from cello where number='".mysql_real_escape_string($numb)."' LIMIT 1";
$result1=mysql_query($sql1) or die(mysql_error());
while ($row=mysql_fetch_array($result1)) {
$name=$row['name'];
echo $name;
}
break;
case 'edit':
$sql="select * from cello account_number='".mysql_real_escape_string($numb)."' limit 1";
$result=mysql_query($sql) or die(mysql_error());
while ($row=mysql_fetch_array($result)) {
$acnumb=$row['number'];
$name=$row['name'];
$address=$row['address'];
echo $acnumb;
echo $name;
echo $address;
}
break;
default:
echo "error!!";
}