PHP MYSQL查询无法从$ _POST接收更新

时间:2016-01-05 13:03:00

标签: php mysqli html-table

我正在尝试使用某些条件调用和更新数据库中的表行。目前我有表格在文本框中加载数据并自动分配所有文本框的名称,以便我以后可以使用它们进行更新。

要显示的代码

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

mysqli_set_charset($conn,"utf8");
$check=$_POST["scenario1"];
$qwert="SELECT * FROM izprashtane WHERE Сценарий='$check'";
$query=mysqli_query($conn,$qwert);
$sql = "SHOW COLUMNS FROM izprashtane";
$result = mysqli_query($conn,$sql);
echo "<table width=650 border=1>\n";
$counter=0;
while ($get_info = mysqli_fetch_row($query)){
    echo "<tr>\n";
    while($row = mysqli_fetch_array($result)){
        echo "<td>" . $row['Field'] . "</td>";
    }
    echo "</tr>\n";
    echo "<tr>\n";
    $counter=0;
    foreach ($get_info as $field){
        $counter += 1;
        echo "\t<td><input type='text' name='$counter' value='$field'></td>\n";
    }
    echo "</tr>\n";
}
echo "</table>\n";
$conn->close();
?>
<html>
<body>
<form action="datacizprashtane.php" method="POST">
<input type="submit" value="Промяна" >
</form>
</body>
</html>

这会将表格行加载到一个带有可编辑文本框的表格中,并从0分配名称,但我需要。然后我得到了更新表的代码。它只是实验性的,所以我只有两个文本框,一旦我开始它就会添加其余文本。

要更新的代码

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "UPDATE izprashtane SET НаселеноМясто='$_POST[2]',Тримесичие='$_POST[3]' WHERE Сценарий='$_POST[6]'";
if (mysqli_query($conn, $sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . mysqli_error($conn);
}

$conn->close();

此时它给了我:

  

更新记录时出错:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的' аселеноМясто='',Тримес'附近使用正确的语法。

我曾尝试使用'".$_POST[3]."',但它甚至没有给我错误。对我做错了什么想法?

3 个答案:

答案 0 :(得分:1)

我认为您的问题是HTML中的<input...>字段不在<form....&gt;内。标签。

如果字段未放置在<form>内,则在按下提交按钮时不会发送它们。事实上,它们甚至不在页面<body>

目前只有提交按钮位于<form>标记内,这就是提交操作的原因,但没有传递数据,并且在使用之前您没有检查实际存在的字段。

答案 1 :(得分:0)

请准备以下内容:

> microbenchmark(row.range(M),testapply(M),testcbind(M),testpmin(M),times=10)
Unit: milliseconds
         expr       min        lq      mean    median        uq       max neval
 row.range(M) 3935.1435 4620.8645 4969.8812 5001.3030 5316.3731 5808.4092    10
 testapply(M) 2819.5916 2912.5050 3272.5916 3168.1254 3735.2308 3932.8697    10
 testcbind(M)  248.3587  256.4928  364.5640  282.8879  496.4234  633.2248    10
  testpmin(M)  163.0500  173.0381  203.5254  188.8449  197.8690  385.3048    10

此外,您的代码有点混乱,请确保使用预准备语句转义字符串或$sql = "UPDATE izprashtane SET НаселеноМясто=?,Тримесичие=? WHERE Сценарий=?"; $stmt = mysqli_prepare($conn, $sql); mysqli_bind_param($stmt, "sss", $_POST['2'], $_POST['3'], $_POST['6']); mysqli_execute($stmt); 以避免SQL注入。

编辑: 另外,添加

mysqli_escape_string

在第二次数据库连接之后,同时确保您的输入全部在您的表单中。

答案 2 :(得分:0)

您必须将所有表单字段放在表单标记之间(library(dplyr) library(magrittr) d %>% summarise_each(funs(mean(is.na(.)) <= 0.5)) %>% unlist %>% extract(d,. ) ) 例如:

<form>...</form>

我希望它会帮助你...