【问题标题】:update sql after form submit表单提交后更新sql
【发布时间】:2016-09-08 23:49:51
【问题描述】:

好的,伙计们,我是新手,但是 1.我想在文本框中输入数字后更新我的sql。它正确回显但不会更改数据库。 2.我想删除第一个提交按钮并使其成为onchange事件。

我真的很困惑。多谢你们!这项工作几乎完成了。已经做了很长时间了。我还在学习php,请多多包涵。谢谢

<?php

$conn = new mysqli('localhost', 'root', 'jared17', 'hbadb') 
or die ('Cannot connect to db');

$result = $conn->query("select * from english");

echo "<html>";
echo "<body>";
echo "<form name='form' method = POST>";
echo "<select name = 'Students'>";
while ($row = $result->fetch_assoc()) {
$LRN = $row['LRN'];
$Last = $row['Last_Name']; 
$First = $row['First_Name'];
echo '<option value="'.$LRN.'">'.$Last.', '.$First.'</option>';

}
echo "</select>";
echo "<input type='submit' name='submit' value='Show'>";


if (isset($_POST['Students'])) {
$lrn = $_POST['Students'];
$stmt = $conn->prepare("SELECT Last_Name, First_Name, Level, Q1, Q2, Q3, Q4, FINAL FROM english WHERE LRN = ?");
$stmt->bind_param('i', $lrn);
$stmt->execute();
$stmt->bind_result($last, $first, $level, $q1, $q2, $q3, $q4, $final);
$stmt->fetch();
   echo "<table><tr><th>LRN</th><th>Name</th><th>Level</th><th>Q1</th><th>Q2</th><th>Q3</th><th>Q4</th><th>Final</th></tr>";
echo "<tr><td>$lrn</td><td>$last, $first</td><td>$level</td><td>$q1</td><td>$q2</td><td>$q3</td><td>$q4</td><td>$final</td></tr></table>";
}



///////////EDIT DATA
echo "Edit Data: ";
echo "<select name = 'Edit'>";

echo '<option value=Q1>Q1</option>';
echo '<option value=Q2>Q2</option>';
echo '<option value=Q3>Q3</option>';
echo '<option value=Q4>Q4</option>';
echo '<option value=FINAL>FINAL</option>';
echo '<input type="number" name="editdata">';
echo "</select>";
echo "<input type='submit' name='submit2' value='Edit Now'>";


if (isset($_POST['Edit'])) {
$upd = $_POST['Edit'];
$txt = $_POST['editdata'];
$now = "UPDATE english SET $upd=$txt WHERE LRN=$lrn";
$result2 = $conn->query($now);
echo $now;
    }



echo "</form>";



echo "</body>";
echo "</html>";
?>

【问题讨论】:

  • 它对 SQL 注入开放,但这可能不是测试原因。使用php.net/manual/en/mysqli.error.php 确定错误。
  • 我的问题不在于与 DB 的连接。我认为这是我的 php 代码。
  • 因为it doesn't change the DB 你应该看看当你执行查询时会发生什么。该错误函数用于查询,而不是连接。 php.net/manual/en/mysqli.connect-error.php 用于连接错误。

标签: php sql forms


【解决方案1】:

您需要将输入用引号括起来,否则 SQL 会认为您正在尝试引用列而不是字符串。

$now = "UPDATE english SET $upd=\"$txt\" WHERE LRN=\"$lrn\"";

或者如果您更喜欢单引号来避免转义 w 反斜杠,那么这应该是一样的:

$now = "UPDATE english SET $upd='$txt' WHERE LRN='$lrn'";

此外,这不是最佳实践,正如 chris85 所提到的,您会受到注入攻击,如果您想要最佳实践,那么您想使用这个:http://php.net/manual/en/mysqli-stmt.bind-param.php

【讨论】:

  • OP 显示的值将在未引用的查询中起作用(尽管可以注入)。 $txt 尽管名称实际上是一个数字,$lrn$upd 是一个列(可以反引号,但字母数字应该没问题)。
  • 好点 - 你可能是对的,但根据 mysql 架构,如果 LRN 列被定义为字符串而不是数字,我可能是对的。
  • 列类型无关紧要。由于语法,查询失败。您可以尝试将整数列设置为字符串,如果组合正确,它将插入为0
  • 所以即使我添加了反冲或只是“”,仍然不会更新数据库。
  • 如果您将查询输出通过您的行:echo $now; 复制并粘贴到 mysql 命令行中会发生什么?
猜你喜欢
  • 2020-07-23
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多