如何使用受控语句和用户输入的 html 表单通过 php 向 mysql 数据库添加一行?
How do I add a row to mysql db via php using controlled statements and html form for user input?
我正在尝试建立我网站的 "admin" 部分。我可以在其中更新工单上的客户状态(如果您更喜欢这个术语,也可以是工单)。我有它,我可以在文本字段中输入一个 int,然后点击提交到 DELETE,但我无法让我的 addRow 函数工作。它没有导致错误,这让我相信我没有正确传递我的变量。
以下是 admin.php 上的表格:
<form name="newRow" METHOD="post" ACTION="q.php">
Status of New Entry: <input type="text" value="Open" name="newStatus" /><br>
Type of Maintenance being completed: <input type="text" value="Software Maintenance" name="maintType" /><br>
<input type="submit" value="Add" name="newEntry" />
</form>
<form name="delRow" METHOD="post" ACTION="q.php">
<input type="text" name="deleteID" />
<input type="submit" value="Delete" name="delEntry"/>
</form>
至于我的 q.php,这是我连接到我的数据库后得到的(同样,我使用 delEntry/delRow 部分没有问题,所以我看不出如何connection/mysqli 初始化问题将是问题:
//prepare statements
$addData = $conn->prepare("INSERT INTO $tname (status, mainttype) VALUES (?, ?)");
$addData->bind_param("s,s", $newStatus, $maintType);
$delData = $conn->prepare("DELETE FROM $tname WHERE id=?");
$delData->bind_param("i", $deleteID);
//end prepared statements
//if New Entry Button is pressed
$newStatus = isset($_POST['newStatus'])
? $_POST['newStatus']
: '';
$maintType = isset($_POST['maintType'])
? $_POST['maintType']
: '';
$addData->execute();
if ( false===$addData ) {
die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
else{
printf("rows inserted: %d\n", $addData->affected_rows);
}
//if Del Entry Button is pressed
if ( isset( $_POST['delEntry'] ) ) {
$deleteID = $_POST['deleteID'];
$delData->execute();
}
$addData->close();
$delData->close();
$conn->close();
?>
我的列根据 phpMyAdmin 匹配:
$addData = $conn->prepare("INSERT INTO $tname (status, mainttype) VALUES (?, ?)");
状态和维护类型(是 2 t)。我的 ID(主要)是一个 auto_incriment,所以我将其省略,因为我不想意外导致任何密钥重复错误。它 auto_incriment 已经过测试,似乎工作正常。
为了让它更有趣,我添加了一个 echo $newStatus;在我准备好的语句执行后,它返回了正确的值。我似乎在添加新行时遇到问题。仍然没有生成错误。
printf("rows inserted: %d\n", $addData->affected_rows);
returns 0 行也受到影响。
简单的逗号问题。在:
$addData->bind_param("ss", $newStatus, $maintType);
我把它列为:
$addData->bind_param("s,s", $newStatus, $maintType);
我正在尝试建立我网站的 "admin" 部分。我可以在其中更新工单上的客户状态(如果您更喜欢这个术语,也可以是工单)。我有它,我可以在文本字段中输入一个 int,然后点击提交到 DELETE,但我无法让我的 addRow 函数工作。它没有导致错误,这让我相信我没有正确传递我的变量。
以下是 admin.php 上的表格:
<form name="newRow" METHOD="post" ACTION="q.php">
Status of New Entry: <input type="text" value="Open" name="newStatus" /><br>
Type of Maintenance being completed: <input type="text" value="Software Maintenance" name="maintType" /><br>
<input type="submit" value="Add" name="newEntry" />
</form>
<form name="delRow" METHOD="post" ACTION="q.php">
<input type="text" name="deleteID" />
<input type="submit" value="Delete" name="delEntry"/>
</form>
至于我的 q.php,这是我连接到我的数据库后得到的(同样,我使用 delEntry/delRow 部分没有问题,所以我看不出如何connection/mysqli 初始化问题将是问题:
//prepare statements
$addData = $conn->prepare("INSERT INTO $tname (status, mainttype) VALUES (?, ?)");
$addData->bind_param("s,s", $newStatus, $maintType);
$delData = $conn->prepare("DELETE FROM $tname WHERE id=?");
$delData->bind_param("i", $deleteID);
//end prepared statements
//if New Entry Button is pressed
$newStatus = isset($_POST['newStatus'])
? $_POST['newStatus']
: '';
$maintType = isset($_POST['maintType'])
? $_POST['maintType']
: '';
$addData->execute();
if ( false===$addData ) {
die('prepare() failed: ' . htmlspecialchars($mysqli->error));
}
else{
printf("rows inserted: %d\n", $addData->affected_rows);
}
//if Del Entry Button is pressed
if ( isset( $_POST['delEntry'] ) ) {
$deleteID = $_POST['deleteID'];
$delData->execute();
}
$addData->close();
$delData->close();
$conn->close();
?>
我的列根据 phpMyAdmin 匹配:
$addData = $conn->prepare("INSERT INTO $tname (status, mainttype) VALUES (?, ?)");
状态和维护类型(是 2 t)。我的 ID(主要)是一个 auto_incriment,所以我将其省略,因为我不想意外导致任何密钥重复错误。它 auto_incriment 已经过测试,似乎工作正常。
为了让它更有趣,我添加了一个 echo $newStatus;在我准备好的语句执行后,它返回了正确的值。我似乎在添加新行时遇到问题。仍然没有生成错误。
printf("rows inserted: %d\n", $addData->affected_rows);
returns 0 行也受到影响。
简单的逗号问题。在:
$addData->bind_param("ss", $newStatus, $maintType);
我把它列为:
$addData->bind_param("s,s", $newStatus, $maintType);