无法在代码中的更新MySql查询中传递ID的值

时间:2019-02-20 12:07:00

标签: php mysql

我需要将下拉列表的值传递给已经存在的表,我尝试了一个简单的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();
    }
}

2 个答案:

答案 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?