Неопределенная переменная: удалить в C: \ xampp \ htdocs \ xampp \ Test \ HRMS \ try \ search1.php в строке 61 - PullRequest
1 голос
/ 13 января 2012

Последние два часа я очень стараюсь, но не могу понять.Почему я получаю неопределенную переменную в 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>

Ответы [ 2 ]

3 голосов
/ 13 января 2012

Регистр глобалов отключен (и это хорошо), поэтому строка

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>
0 голосов
/ 13 января 2012

Перед зацикливанием результатов из переменной результата MySQL, вы должны ВСЕГДА убедиться, что она содержит какие-либо значения:

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

Другая проблема, с которой вы столкнулись, такая же, как в вашем предыдущем вопросе , переменная $ 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>

Пожалуйста, не копируйте, не вставляйте, читайте и пытайтесь понять.

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