这是我第一个非常简单的学习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>
答案 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