【发布时间】:2017-01-03 05:06:18
【问题描述】:
我正在开发一个梦幻足球数据库只是为了好玩,我在 PHP 页面上取得了一些进展,但在从我的 html 数据中获取数据以供我的 php 更新脚本 (update.php )
这是我的表单代码:
$servername = "localhost";
$username = "root";
$password = "nottelling";
$dbname = "Football";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error){
die("Connection failed: " . $conn->connect_error);
}
$sqlqb = "SELECT Name_Team_Position FROM Football.2016_Players_QB;";
$resultqb = $conn->query($sqlqb);
echo " <form method=\"post\" action=\"update.php\"> <br> Enter Passcode:";
echo " <input name = \"Passcode\" type = \"text\"> </input> <br><br> ";
echo " Pick your QB: <select name='QB'> </option> "; // list box select command
foreach ($conn->query($sqlqb) as $row){
// Array or records stored in $row
echo " <option value=$row[id]>$row[Name_Team_Position]</option> ";
/* Option values are added by looping through the array */
}
echo " </select> ";// Closing of list box
echo " <br><br> <input type=\"submit\" value=\"Submit\"> </input> ";
echo " </form> ";
$conn->close();
?>
这里是 update.php
$servername = "localhost";
$username = "root";
$password = "nottelling";
$dbname = "Football";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$value1 = $_POST['Passcode'];
$value2 = $_POST['QB'];
$sql = "UPDATE Football.PlayerTeams SET QB = '$value2' WHERE Password = '$value1';";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
我的问题尽可能简明扼要:
此脚本肯定正确连接到数据库并成功执行更新查询。问题是 $value1 没有从 html 表单接收任何值。如果我将字符串“test”插入到与密码对应的行中,然后我使用此代码生成的表单,它会成功运行,但是当我检查数据库“test”时消失了,而只是空白 - “”。有人可以帮我弄清楚我在尝试将下拉值添加到我的操作脚本时做错了什么吗?
【问题讨论】:
-
您的代码有缺陷,
$row[id]不存在,因为 PHP 中的id被读取为常量而不是字符串'id'。这是一些非常基本的 PHP 就在这里。如果您启用错误报告,您会发现这一点。你没有。在开发时启用它,它是... 那 简单。其次,也许您应该阅读mysql_connect(并记下巨大的红色块),因为显然,您并不关心 mysql 注入,那么您为什么要使用mysqli? -
@Xorifelse 恭喜,你已经成功地口头攻击了一个不太懂 PHP 的人!
-
我没有学,因为我的老师对我很好,您应该根据给定的信息和enable error reporting first采取行动,将警告一一消除,将您的代码更新为prevent mysql injections。之后,检查
var_dump($_POST)是否包含正确的值。 -
其次,您可能想要创建一个名为
db.php的文件并将this 代码粘贴到其中。现在,对于您的update.php和index.php,您只需执行include 'db.php'和$conn = getdbconn();即可在您需要更改服务器设置时节省大量时间。 -
@Xorifelse 您似乎错过了这里没有错误的事实。只是不正确的值名称。