Проблема в php if условии - PullRequest
5 голосов
/ 25 июня 2010

У меня небольшая проблема. Я захожу на сайт через foro.php? Id = 74 & mode = add или foro.php? Id = 74 & mode = edit, он работает нормально .. Но когда я добавляю двоеточие, точка с запятой (; или :) в foro.php? Id = 74 & mode = добавить это идет к опции редактирования

foro.php ID = 74 & режим = добавить;
? Foro.php ID = 74 & режим = добавить:
foro.php? ID = 74 & режим = добавить»

Ниже мой код

<?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!!";}
     ?>

В любом случае, как это предотвратить?

Ответы [ 3 ]

8 голосов
/ 25 июня 2010

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

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

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

к этому:

elseif ($_GET['mode']=='edit') {
5 голосов
/ 25 июня 2010

Решение:

Проблема определенно связана со строкой 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 голосов
/ 25 июня 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...