MySQL的更新命令无法在PHP

时间:2018-05-06 18:51:03

标签: php html mysql database xampp

这是我第一个非常简单的学习php程序,我将PHP与MySQL服务器连接,插入,删除工作正常,但更新有一些问题。当我按下更新按钮时没有任何反应。 我的数据库名称是ddb3,表名是student1。 我使用的Apache服务器是通过Xampp托管的。 mysql_error();显示没有错误,也没有显示apache logfile中的错误

<?php
    mysql_connect("localhost", "root", "");
    mysql_select_db("ddb3");

    if(isset($_POST['submit'])) {
        $name = $_POST['name'];
        $age = $_POST['age'];
        mysql_query("INSERT INTO student1(name, age) VALUES ('$name', '$age');");
    }
    if(isset($_POST['delete'])) {
        $name = $_POST['name'];
        mysql_query("DELETE FROM student1 WHERE name = '$name';");
    }
    if(isset($_POST['update'])) {
        $name = $_POST['name'];
        $age = $_POST['age'];
        mysql_query("UPDATE student1 SET name = '$name' WHERE age = '$age';");
    }
?>
<html>
    <body>
        <center>
            <form name='f1' action='prog3.php' method='post'>
                <b>Name:<b><input type="text" name="name" size="20"><br>
                <b>Age:<b><input type="text" name="age" size="5"><br>
                <input type="submit" name="submit" value="Insert to Table"/>
                <input type="submit" name="delete" value="Delete from Table"/>
                <input type="submit" name="update" value="Update Row"/>
            </form>
        </center>
        <?php
            echo "<table align='center' name='t1' border='1' width=500px>
                  <tr><th>NAME</th><th>AGE</th></tr>";
            $select = mysql_query("SELECT * FROM student1");
            while($colmn = mysql_fetch_array($select)) {
                echo "<tr><td>$colmn[0]</td><td>$colmn[1]</td></tr>";
            }
            echo "<table>";
        ?>
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

将观察到的行为描述为&#34;不工作&#34;或&#34;没有任何反应&#34;在确定 实际问题时,提供的信息非常少。

(你如何确定&#34;没有任何反应&#34;或者它&#34;没有工作&#34;?)

我建议在代码中的特定点添加一些调试输出(例如,echo或var_dump),以确定代码中的哪个路径正在被采用。 ($_POST['update']是否已设置?if条件是否为TRUE?)

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/

我会注意到,我们会根据name更改student的{​​{1}},这很奇怪。例如,此声明将尝试为每个特定年龄的学生分配相同的名称......

age

这样做会很奇怪。 SQL有效。奇怪的是哪些行正在被更改(所有行的年龄= 19),以及正在应用的更改(将所有行的名称更改为相同的值。)

如果学生的名字是杰克,或吉尔,或其他什么都没关系。 表中每个行的年龄值都将改变。

我们通常不会存储&#34;年龄&#34;作为一列,而是存储出生日期(dob)。 DOB不会改变。但年龄会发生变化;年龄是DOB与当前(或某些指定的#34;以及#34;)日期之间的差异。年龄多少?几个月或几天的年龄?

如果我们坚持存储年龄,那么UPDATE student1 SET name = 'Ted' WHERE age = '19' 列更可能会更改名称列。

要识别应该更新哪个行... age是唯一的吗?可以有两行或更多行具有相同的name吗?

我们可能想要一些学生的唯一标识符,并在UPDATE语句中使用它。

name

使用已弃用的mysql_接口进行新开发。使用PDO。 (或者使用mysqli _)。

还使用带有绑定占位符的预准备语句来缓解SQL注入漏洞。如果由于某些不可思议的原因我们无法做到这一点,那么至少,SQL文本中包含的任何潜在不安全值都必须正确转义。

Little Bobby Tables https://xkcd.com/327/

OWASP Project SQL注入https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet