【问题标题】:Delete a row in mysql with php [duplicate]用php删除mysql中的一行[重复]
【发布时间】:2016-01-21 22:53:35
【问题描述】:

我正在做一些 php + mysql 来删除我的数据库中的行,当我按下按钮时没有任何反应的问题。非常感谢您的帮助。

这个 PHP 显示了一个类型的员工必须做的课程列表,删除按钮应该删除您选择的列表中的课程。

例如

cargocurso.php?id=1

显示员工的类型,例如:

销售经理

并在表格中列出与该类型员工相关的课程:

1 |销售 | (删除按钮)

<?php

$link = mysql_connect("localhost", "root","123456"); 
mysql_select_db("ecl", $link); 

if (isset($_GET['id'])) {

    $id=$_GET['id'];;

    $sql = mysql_query("select k.idcargo, c.fullname, k.nombre_cargo, d.cursoid, d.id from mdl_course as c 
                        inner join mdl_user_cursos_asoc as d on c.id = d.cursoid
                        inner join mdl_user_cargo as k on d.cargoid = k.idcargo where k.idcargo=$id", $link);

    if (isset($_POST['delete'])) {
    $idasoc = $_POST['idasoc'];
    $sql2 = "DELETE FROM mdl_user_cursos_asoc WHERE id = '.$idasoc.'";
    $result = mysql_query($sql2);

        echo "has been deleted.";
    }   

    if(mysql_num_rows($sql) == 0) {

        echo "No hay cursos asociados";

    } else {

    $cargnombre = mysql_fetch_array($sql);

        echo $cargnombre[2]."</br></br>";

    echo "<form action='".$_SERVER['PHP_SELF']."' method='post'>";
    echo "<table border='1px'>";

    while ($row = mysql_fetch_array($sql)) {
                echo "<tr>";
                echo "<input type='hidden' name='idasoc' value = '.$row[4].'>";
                echo "<td>$row[1]</td>";
                echo "<td><input type='submit' name='delete' value='Eliminar'></td>";
                echo "</tr>";
            }
    echo "</table>";
    echo "</form>";


    }

    } 
?>

感谢您的帮助!

【问题讨论】:

  • 您不应使用已弃用的 mysql_* 函数。改用 mysqli 或 PDO,您的代码对 SQL 注入开放。总是逃避你的输入! (如果你使用 mysqli 或 PDO,你应该为此使用准备好的语句)。
  • 你有没有使用isset($_POST['idasoc'])检查过POST变量$idasoc是否有任何值????
  • 查看以下链接 php.net/manual/en/function.mysql-error.phpphp.net/manual/en/function.error-reporting.php 并将其应用到您的代码中,您将看到您所犯的错误。

标签: php mysql delete-row


【解决方案1】:

删除记录的sql语句有一个小错误-那里有虚假句点.。改为:

$sql2 = "DELETE FROM mdl_user_cursos_asoc WHERE id = '{$idasoc}'";

另外,其他人可能会注意到 lso - 停止使用现已弃用的 mysql_* 函数,因为它们现在通常被认为是不安全的。

除了在sql中滥用引号和句点之外,循环中还有另一个输出表格内容的地方。

<?php
    $link = mysql_connect("localhost", "root","123456"); 
    mysql_select_db("ecl", $link); 

    if( isset( $_GET['id'] ) ) {

        $id=$_GET['id'];

        $sql = mysql_query("select k.idcargo, c.fullname, k.nombre_cargo, d.cursoid, d.id from mdl_course as c 
                            inner join mdl_user_cursos_asoc as d on c.id = d.cursoid
                            inner join mdl_user_cargo as k on d.cargoid = k.idcargo where k.idcargo=$id", $link );

        if ( isset( $_POST['delete'], $_POST['idasoc'] ) ) {/* Combine `isset` to test multiple POST vars are set */
            $idasoc = $_POST['idasoc'];
            $sql2 = "DELETE FROM mdl_user_cursos_asoc WHERE id = '{$idasoc}'";/* changed here */
            $result = mysql_query( $sql2 );

            echo "has been deleted.";
        }   

        if( mysql_num_rows( $sql ) == 0 ) {
            echo "No hay cursos asociados";
        } else {
            $cargnombre = mysql_fetch_array( $sql );
            echo $cargnombre[2]."</br></br>";


        echo "
        <form action='".$_SERVER['PHP_SELF']."' method='post'>
            <table border='1px'>";

            while( $row = mysql_fetch_array( $sql ) ) {
                    echo "
                    <tr>
                        <td>
                            <input type='hidden' name='idasoc' value = '{$row[4]}'><!-- changed here -->
                            {$row[1]}
                        </td>
                        <td><input type='submit' name='delete' value='Eliminar'></td>
                    </tr>";
                }
        echo "
            </table>
        </form>";
        }
    } 
?>

如果您不打算使用准备好的语句(可以减轻 sql 注入)更改为 mysqli 或 PDO,那么至少要确保过滤从您的用户那里收到的任何数据 - 例如,mysql_real_escape_string 至少提供了一些保护。

【讨论】:

  • 你是对的那些“。”,谢谢你的帮助!
  • 我还有一个问题,当你按下删除按钮时,它删除了最后一行而不是你选择的那一行。知道有什么问题吗?
  • 是的。通常 - 将按钮类型从 submit 更改为 button,添加 data-id=$id 属性并使用 javascript 通过附加到按钮的事件监听器提交表单
猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 2019-07-23
相关资源
最近更新 更多