【问题标题】:Undefined variable: delete in C:\xampp\htdocs\xampp\Test\HRMS\try\search1.php on line 61未定义的变量:在第 61 行的 C:\xampp\htdocs\xampp\Test\HRMS\try\search1.php 中删除
【发布时间】:2012-01-13 06:17:34
【问题描述】:

在过去的 2 个小时里,我非常努力,但我无法理解。为什么我在 DELETE 中得到未定义的变量。请查看我的代码并帮助我。

我的主要目的是使用复选框一次删除多行。

当我尝试运行以下代码时,它给了我以下错误:

Undefined variable: delete in C:\xampp\htdocs\xampp\Test\HRMS\try\search1.php on line 61

但我已经通过以下方式使用它:

<td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Delete"></td>

提前致谢。

我的 php 代码:

  <?php
  $host="localhost"; // Host name
  $username="a"; // Mysql username
  $password="a"; // Mysql password
  $db_name="b"; // Database name
  $tbl_name="emp_info"; // Table name

  // Connect to server and select databse.
  mysql_connect("$host", "$username", "$password")or die("cannot connect");
  mysql_select_db("$db_name")or die("cannot select DB");

  $sql="SELECT * FROM $tbl_name";
  $result=mysql_query($sql);

  $count=mysql_num_rows($result);

  ?>
  <table width="400" border="0" cellspacing="1" cellpadding="0">
  <tr>
  <td><form name="form1" method="post" action="">
  <table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
  <tr>
  <td bgcolor="#FFFFFF">&nbsp;</td>
  <td colspan="4" bgcolor="#FFFFFF"><strong>Delete multiple rows in mysql</strong> </td>
  </tr>
  <tr>
  <td align="center" bgcolor="#FFFFFF">#</td>
  <td align="center" bgcolor="#FFFFFF"><strong>Id</strong></td>
  <td align="center" bgcolor="#FFFFFF"><strong>Name</strong></td>
  <td align="center" bgcolor="#FFFFFF"><strong>Password</strong></td>
  <td align="center" bgcolor="#FFFFFF"><strong>Address</strong></td>
  <td align="center" bgcolor="#FFFFFF"><strong>Source</strong></td>
  <td align="center" bgcolor="#FFFFFF"><strong>salary</strong></td>
  <td align="center" bgcolor="#FFFFFF"><strong>Zip</strong></td>
  <td align="center" bgcolor="#FFFFFF"><strong>Mobile</strong></td>
  <td align="center" bgcolor="#FFFFFF"><strong>Email</strong></td>
  </tr>
  <?php
  while($rows=mysql_fetch_array($result)){
  ?>
  <tr>
  <td align="center" bgcolor="#FFFFFF"><input name="checkbox[]" type="checkbox" id="checkbox[]" value="<? echo $rows['eid']; ?>"></td>
  <td bgcolor="#FFFFFF"><? echo $rows['eid']; ?></td>
  <td bgcolor="#FFFFFF"><? echo $rows['ename']; ?></td>
  <td bgcolor="#FFFFFF"><? echo $rows['password']; ?></td>
  <td bgcolor="#FFFFFF"><? echo $rows['address']; ?></td>
  <td bgcolor="#FFFFFF"><? echo $rows['source']; ?></td>
  <td bgcolor="#FFFFFF"><? echo $rows['salary']; ?></td>
  <td bgcolor="#FFFFFF"><? echo $rows['zip']; ?></td>
  <td bgcolor="#FFFFFF"><? echo $rows['mobile']; ?></td>
  <td bgcolor="#FFFFFF"><? echo $rows['email']; ?></td>
  </tr>
  <?php
  }
  ?>
  <tr>
  <td colspan="5" align="center" bgcolor="#FFFFFF"><input name="delete" type="submit" id="delete" value="Delete"></td>
  </tr>
  <?php
  // Check if delete button active, start this
  if($delete){
  for($i=0;$i<$count;$i++){
  $del_id = $checkbox[$i];
  $sql = "DELETE FROM $tbl_name WHERE eid='$del_id'";
  $result = mysql_query($sql);
  }

  // if successful redirect to search1.php
  if($result){
  echo "<meta http-equiv=\"refresh\" content=\"0;URL=search1.php\">";
  }
  }
  mysql_close();
  ?>
  </table>
  </form>
  </td>
  </tr>
  </table>

【问题讨论】:

    标签: php mysql sql phpmyadmin


    【解决方案1】:

    Register globals 已关闭(这很好)所以这条线

    if($delete){
    

    应该是

    if (isset($_POST['delete'])) { ...
    

    此外,您需要重新构建代码,因为当您有删除记录的发布请求时,绝对没有必要对数据库进行选择查询。

    这是您需要的完整代码。用这个替换你的。

    <?php
    
    error_reporting(E_ALL);
    
    $host = "localhost"; // Host name
    $username = "a"; // Mysql username
    $password = "a"; // Mysql password
    $db_name = "b"; // Database name
    $tbl_name = "emp_info"; // Table name
    
    // Connect to server and select databse.
    mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");
    
    // Delete records
    if (isset($_POST['delete']))
    {
        // Concatenate ids in a comma-separated string
        $ids = implode(',', $_POST['checkbox']);
    
        if (!empty($ids))
        {
            $sql = "DELETE FROM $tbl_name WHERE eid IN ($ids)";
            $result = mysql_query($sql) or die(mysql_error());
        }
    
        // Redirect back
        header('Location: search1.php');
        die();
    }
    
    // Select records
    $sql = "SELECT * FROM $tbl_name";
    $result = mysql_query($sql);
    
    $count = mysql_num_rows($result);
    
    ?>
    <table width="400" border="0" cellspacing="1" cellpadding="0">
        <tr>
            <td>
                <form name="form1" method="post" action="">
                    <table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
                        <tr>
                            <td bgcolor="#FFFFFF">&nbsp;</td>
                            <td colspan="4" bgcolor="#FFFFFF"><strong>Delete multiple rows in mysql</strong></td>
                        </tr>
                        <tr>
                            <td align="center" bgcolor="#FFFFFF">#</td>
                            <td align="center" bgcolor="#FFFFFF"><strong>Id</strong></td>
                            <td align="center" bgcolor="#FFFFFF"><strong>Name</strong></td>
                        </tr>
                        <?php while ($rows = mysql_fetch_array($result)) { ?>
                        <tr>
                            <td align="center" bgcolor="#FFFFFF">
                                <input name="checkbox[]" type="checkbox" id="checkbox[]"
                                       value="<?php echo $rows['eid']; ?>">
                            </td>
                            <td bgcolor="#FFFFFF"><?php echo $rows['eid']; ?></td>
                            <td bgcolor="#FFFFFF"><?php echo $rows['ename']; ?></td>
                        </tr>
                        <?php } ?>
                        <tr>
                            <td colspan="5" align="center" bgcolor="#FFFFFF">
                                <input name="delete" type="submit" id="delete" value="Delete">
                            </td>
                        </tr>
                    </table>
                </form>
            </td>
        </tr>
    </table>
    

    【讨论】:

    • 首先感谢您的关注,但它仍然显示相同的错误... 注意:未定义的变量:在 C:\xampp\htdocs\xampp\Test\HRMS\try\search1 中删除。第 61 行的 php :(
    • 我刚刚复制并粘贴了您的代码 /*[if ($_POST['delete']) { ]*/ 代替我的代码,但它显示相同的错误...
    • 您应该确保使用isset 或array_key_exists 定义$_POST['delete'],以防$_POST['delete'] = NULL
    • 绝对应该有isset。
    • @Nazariy:我申请了 isset;现在它没有显示任何错误,但即使我点击删除按钮它也没有删除:(
    【解决方案2】:

    在从 MySQL 结果变量循环结果之前,您应该始终必须确保它包含任何值:

    if($total > 0)
    {
        while ($rows = mysql_fetch_array($result))
        {
            //your code goes here
        }
    }
    

    您在这里遇到的另一个问题与您的previous question 相同,变量 $delete 未定义,根据您的代码,不清楚它来自哪里。

    所以,如果$delete 实际上是一个$_POST 变量,那么您的if 语句应该如下所示:

    if(isset($_POST['delete'])){}
    

    另一个问题,$checkbox 未定义。我建议您阅读有关 filter_input 方法的更多信息,因为它可以非常方便地清理用户提交的数据。

    另外,您使用了不正确的 html 标签,而不是:

    <td align="center" bgcolor="#FFFFFF"><strong>Id</strong></td>
    

    使用正确的TD标签,使文本居中对齐并使其变为粗体,bgcolor也应在CSS文件中定义。

    <th bgcolor="#FFFFFF">Id</th>
    

    您的最终代码应如下所示:

    <?php
    $host = "localhost"; // Host name
    $username = "a"; // Mysql username
    $password = "a"; // Mysql password
    $db_name = "b"; // Database name
    $tbl_name = "emp_info"; // Table name
    
    // Connect to server and select databse.
    mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");
    
    // Make sure that delete action was called using
    //$delete = isset($_POST['delete']);
    //OR
    //$delete = array_key_exists('delete', $_POST);
    //OR
    $delete = filter_input(INPUT_POST, 'delete');
    
    $selected = filter_input(INPUT_POST, 'checkbox', FILTER_VALIDATE_INT, FILTER_REQUIRE_ARRAY);
    
    if ($delete && !empty($selected))
    {
    
        foreach ($selected as $id)
        {
            $sql = "DELETE FROM $tbl_name WHERE eid='$id'";
    
            $result = mysql_query($sql);
        }
    
        // if successful redirect to search1.php
        echo "<meta http-equiv=\"refresh\" content=\"0;URL=search1.php\">";
    }
    
    $sql = "SELECT * FROM $tbl_name";
    
    $result = mysql_query($sql);
    
    $count = mysql_num_rows($result);
    
    ?>
    
    
    <form name="form1" method="post" action="">
        <table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
            <tr>
                <th bgcolor="#FFFFFF">&nbsp;</th>
                <th colspan="9" bgcolor="#FFFFFF">Delete multiple rows in mysql</th>
            </tr>
            <tr>
                <th bgcolor="#FFFFFF">#</th>
                <th bgcolor="#FFFFFF">Id</th>
                <th bgcolor="#FFFFFF">Name</th>
                <th bgcolor="#FFFFFF">Password</th>
                <th bgcolor="#FFFFFF">Address</th>
                <th bgcolor="#FFFFFF">Source</th>
                <th bgcolor="#FFFFFF">salary</th>
                <th bgcolor="#FFFFFF">Zip</th>
                <th bgcolor="#FFFFFF">Mobile</th>
                <th bgcolor="#FFFFFF">Email</th>
            </tr>
            <?php
            if ($count)
            {
                while ($rows = mysql_fetch_array($result))
                {
                    ?>
                    <tr>
                        <td align="center" bgcolor="#FFFFFF">
                            <input name="checkbox[]" type="checkbox" id="checkbox" value="<?php echo $rows['eid']; ?>">
                        </td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['eid']; ?></td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['ename']; ?></td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['password']; ?></td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['address']; ?></td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['source']; ?></td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['salary']; ?></td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['zip']; ?></td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['mobile']; ?></td>
                        <td bgcolor="#FFFFFF"><?php echo $rows['email']; ?></td>
                    </tr>
                    <?php
                }
            }
            mysql_close();
            ?>
            <tr>
                <td colspan="10" align="center" bgcolor="#FFFFFF">
                    <input name="delete" type="submit" id="delete" value="Delete">
                </td>
            </tr>
        </table>
    </form>
    

    请不要只是复制粘贴,阅读并尝试理解它。

    【讨论】:

    • 当我应用 isset 时它没有显示任何错误但是当我点击删除按钮时它没有删除:(
    • 它没有显示任何错误,但仍然没有删除。我的列字段名称是相同的 eid; m 保留在查询中。即使我不知道哪里出了问题,它也应该与表格匹配。如果你对这些代码做的不多,那么这一定会像昨天一样工作。请...检查代码...在此先感谢...
    • 您遇到了太多问题,以至于我忘记在您的代码开头放置删除功能。再试一次,试着理解为什么会这样写。
    • @ Nazariy:非常感谢您宝贵的时间...我检查了您的代码...我很难理解为什么当 m 使用正确的列名时它没有从表中删除:( 干杯...
    • 尝试检查您的 html 输出并确保在 HTML SOURCE 中设置了复选框值,如果您使用 MySQL InnoDB 表并且它有一些从另一个表链接的外键,它可能会阻止删除记录。
    猜你喜欢
    • 2015-04-25
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多