我需要将下拉列表的值传递给已经存在的表,我尝试了一个简单的MySql查询,该查询在MySQL SQL控制台中可以正常工作。
这是我需要运行的查询:update Trial set Status = 'Test Status' where id = '123'
当我尝试运行此查询时,由于无法从行中获取ID的值而遇到了可变问题。
下面是两个查询,第一个查询获取所有数据,第二个不合适的查询是需要将下拉列表的值更新为ID存在的现有表。任何帮助表示赞赏。
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "cotactform";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, name, email, phone, Status,Url, datetime FROM Trial";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<tr style='text-align:center;'><td>" . $row["id"]. "</td><td>" . $row["name"] . "</td><td>" . $row["email"]. "</td><td>". $row["phone"]. "</td><td>". $row["Url"]. "</td><td>". $row["datetime"]. "</td><form method='get' action='displaydata.php'><td><select name='Status'><option>--Select Status--</option><option value='valid'>Valid</option><option value='invalid'>Invalid</option><option value='followup'>FollowUp</option></select><button type='submit' name='submit'>Submit</button></form></td> <td>". $row["Status"]."</td></tr>";
}
} else {
echo "0 results";
}
if(isset($_GET['submit']))
{
$Status=$_GET['Status'];
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// The query to update the Status
$ins="update Trial set Status = '$Status' where id = 'id'";
if($ins)
{
echo "<br>".$Status."inserted";
}
else
{
echo mysql_error();
}
}
$conn->close();
?>
编辑已更新,可添加隐藏字段:
while($row = $result->fetch_assoc()) {
echo "<tr style='text-align:center;'><td>" . $row["id"]. "</td><td>" . $row["name"] . "</td><td>" . $row["email"]. "</td><td>". $row["phone"]. "</td><td>". $row["Url"]. "</td><td>". $row["datetime"]. "</td><form method='get' action='displaydata.php'><td><select type='hidden' name=".$row["id"]."><option>--Select Status--</option><option value='valid'>Valid</option><option value='invalid'>Invalid</option><option value='followup'>FollowUp</option></select><button type='submit' name='submit'>Submit</button></form></td> <td>". $row["Status"]."</td></tr>";
}
第二次查询检查:
if(isset($_GET['submit']))
{
$Status=$_GET['Status'];
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//$id=$_GET['id'];
//$Status=$_GET['Status'];
$ins = "update Trial set Status = '" . $Status ."' where id = '".$id."'";
$run = $conn->query($ins);
if($ins)
{
echo "<br>".$Status."inserted";
}
else
{
echo mysql_error();
}
}
答案 0 :(得分:0)
针对更新查询尝试此操作-
$ins = "update Trial set Status = " . $Status ." where id = 123";
自然地,如果您可以获取'id'并将其存储为变量,然后用$id
(例如)替换硬编码的id(123),它将变成-
$ins = "update Trial set Status = " . $Status ." where id = " . $id;
答案 1 :(得分:0)
您的代码中有很多问题:
首先,您的代码已广泛用于SQL注入,您可以在此处使用PDO防止SQL注入。
第二,我没有看到您的UPDATE
查询执行查询。
第三,这只是一个建议,对多个状态使用整数,而不要使用Complete Word或String。
第四,,不知道您对<form>
的处理方式,您正在将hidden
属性和<select>
框一起使用ID
。
第五,使用mysql_error()
表示将mysqli和mysql混合在一起。
要获取ID,您需要将<form>
修改为:
<form>
<input type="hidden" name="id" value="your ID">
<select>
<option></option>
</select>
</form>
然后,您可以在查询中以ID
的形式获取此隐藏的$id = $_GET['id']
。
侧面说明:这非常重要,您正在使用<form>
方法GET
进行UPDATE查询,您必须使用SQL Injection防止代码。
一些参考文献:
How can I prevent SQL injection in PHP?
Are PDO prepared statements sufficient to prevent SQL injection?