使用 php 删除 mysql 中的一行

Delete a row in mysql with php

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

这个PHP显示了一个类型的员工必须做的课程列表,删除按钮应该删除你select它的列表的课程。

例如

cargocurso.php?id=1

显示员工类型,例如:

销售经理

并且在 table 中与该类型的员工相关的课程:

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>";


    }

    } 
?>

感谢您的帮助!

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

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

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

除了在 sql 中滥用引号和句点之外,循环中还有另一个输出 table.

的内容
<?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>";
        }
    } 
?>

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