Проблема в php, если условие

У меня есть небольшая проблема. Я получаю доступ к сайту через 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!!";}
     ?>

Какой-либо путь, как предотвратить его?

5
задан LiveEn 25 June 2010 в 06:56
поделиться

3 ответа

Вы использовали оператор присваивания = вместо оператор равенства == .

Попробуйте изменить это:

elseif ($_GET['mode']='edit') {

на это:

elseif ($_GET['mode']=='edit') {
8
ответ дан 18 December 2019 в 09:05
поделиться

Проблема в том, что в следующих строках в операторе 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());
...

Эта операция возвращает истину, первое сравнение ложно и поэтому он попадает в раздел редактирования.

5
ответ дан 18 December 2019 в 09:05
поделиться

Решение:

Проблема определенно кроется в строке 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!!";
}
5
ответ дан 18 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: