update命令在php中不起作用

nzrxty8p  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(455)

这是我的第一个非常简单的学习php程序我已经连接我的php与mysql服务器和插入,删除是工作得很好,但更新有一些问题。当我按下更新按钮时,什么也没发生。我的数据库名是ddb3,表名是student1。我使用的apache服务器是通过xampp托管的。 mysql_error(); 在apache日志文件中没有显示错误,也没有显示错误

<?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>
kyxcudwk

kyxcudwk1#

将观察到的行为描述为“不起作用”或“什么也没发生”在确定实际问题时,提供的有用信息很少。
(你是如何确定“什么都没发生”,还是“没用”?)
我建议在代码中的特定点添加一些调试输出(例如,echo或varïu dump),以确定代码中的路径(是 $_POST['update'] 设置?是 if 条件是否为真?)
https://ericlippert.com/2014/03/05/how-to-debug-small-programs/
我会注意到,很奇怪我们会改变 namestudent 基于 age . 例如,此语句将尝试为每个特定年龄的学生指定相同的名称。。。

UPDATE student1
   SET name = 'Ted'
  WHERE age = '19'

这样做会很奇怪。sql有效。奇怪的是,正在更改哪些行(所有年龄为19岁的行)以及正在应用的更改(将所有行的名称更改为相同的值)
不管学生的名字是杰克、吉尔还是别的什么。表中年龄值为19的每一行都将发生更改。
我们通常不将“年龄”存储为列,而是存储出生日期(dob)。出生日期不会改变。但是年龄会改变;年龄是出生日期和当前(或某些指定的“截止”)日期之间的差值。年龄是多少?以月为单位,还是以天为单位?
如果我们坚持存储年龄,那么它更有可能 age 列将更改为名称列。
要确定应更新的行。。。是 name 独一无二?可以有两行或更多行具有相同的属性吗 name ?
我们可能需要一些学生的唯一标识符,并在更新语句中使用它。

UPDATE student1 s 
   SET s.some_col = 'new_value'
 WHERE s.id = 'unique_identifier'

不要将不推荐使用的mysql\接口用于新的开发。使用pdo(或者使用mysqli。
还可以使用带有绑定占位符的准备好的语句来缓解sql注入漏洞。如果由于某种难以理解的原因我们不能做到这一点,那么至少,任何包含在sql文本中的潜在不安全值都必须正确地转义。
小波比tablehttps://xkcd.com/327/
owasp项目sql注入https://www.owasp.org/index.php/sql_injection_prevention_cheat_sheet

相关问题