php if条件下的问题

Liv*_*eEn 5 php if-statement conditional-statements

我有一个小问题.我访问该站点直通foro.php ID = 74&模式=添加或foro.php ID = 74&模式=编辑它工作得很好.但是当我添加一个冒号,分号(;β-或:)来foro.php ID = 74&模式=添加它转到编辑选项

foro.php ID = 74&模式=补充?;
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!!";}
     ?>
Run Code Online (Sandbox Code Playgroud)

任何方式如何预防呢?

Mik*_*ike 8

您已使用赋值运算符=而不是相等运算符==.

尝试改变这个:

elseif ($_GET['mode']='edit') {
Run Code Online (Sandbox Code Playgroud)

对此:

elseif ($_GET['mode']=='edit') {
Run Code Online (Sandbox Code Playgroud)


Sha*_*ade 5

问题是在以下几行中,在if语句中,您不是在比较,而是为GET数组中的mode元素赋值:

...
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());
...
Run Code Online (Sandbox Code Playgroud)

该操作返回true,第一次比较为false,这就是它进入编辑部分的原因.


amp*_*ine 5

解:

问题肯定在于elseif ($_GET['mode']='edit') {线路; =那里的运算符设置$_GET['mode']'edit'(总是计算到true).一个好但有词汇混乱的做法是写条件如下:

if (5 == $some_var)
Run Code Online (Sandbox Code Playgroud)

如果=不包括第二个,将立即给出错误.

建议:

您可能希望实现一个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!!";
}
Run Code Online (Sandbox Code Playgroud)