如何使用受控语句和用户输入的 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);