从表单删除查询在MySQL中不起作用

时间:2018-08-11 20:17:31

标签: php mysql

<form>
<input type='text' name='source' placeholder='source'/>
<input type='text' name='destination' placeholder='destination'/>
<input type='text' name='trainid' placeholder='trainid'/>
<input type='submit' name='deletetrainid'/>
</form>
<?php
if(isset($_POST['deleteTrain'])){
echo "ENTER TRAINID,SOURCE AND DESTINATION TO DELETE TRAIN ROUTE";
echo "<form action='adminPage.php' method='POST'><input type='text' 
name='trainid'/>";
echo"<input type='text' name='source' placeholder='ENTER SOURCE'/>";
echo"<input type='text' name='destination' placeholder='ENTER 
DESTINATION'/>";
echo"<input type='submit' name='deletetrainid'/>";
echo"</form>";
if (isset($_POST['deletetrainid'])) {
    $source = $_POST['source'];
    $destination = $_POST['destination'];
    $trainid =  $_POST['trainid'];
    $query = "DELETE FROM trains WHERE trainid=$trainid AND source=$source 
    AND destination=$destination";
    $result = mysqli_query($connection, $query);
    if(!$result){
        die("QUERY FAILED". mysqli_error($connection));
    }
    else
    echo "Record Deleted";
    }
    }

单击名称为deletetrainid的按钮时,什么也没有发生,并且输入字段显示为空,再次填充。没有数据/行被删除。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

查看您的代码,我可以看到可能出错的几件事。 SQL注入攻击只是其中之一,就像提到的@Luca。

但是好吧,我做了您代码的自已版本,这是我可以为您解决的问题,可帮助您在某处获取信息。

<form action='adminPage.php' method='POST'>
    <input type='text' name='source' placeholder='source'/>
    <input type='text' name='destination' placeholder='destination'/>
    <input type='text' name='trainid' placeholder='trainid'/>
    <input type='submit' value'Submit'/>
</form>
<?php
    if (isset($_POST)) {
        $source = $_POST['source'];
        $destination = $_POST['destination'];
        $trainid =  $_POST['trainid'];
        $query = "DELETE FROM 
                      trains 
                  WHERE
                      trainid=$trainid 
                  AND 
                      source='$source' 
                  AND destination='$destination'";
        $result = mysqli_query($connection, $query);
        if(!$result){
            die("QUERY FAILED". mysqli_error($connection));
        }
        else
        echo "Record Deleted";
    } else {
        echo "Houston, we have a problem.";
    }

因此,第一: 您在第一个 ISSET deleteTrain上期望的信息不会显示在任何地方,也不会在任何地方设置,因此它永远不会触发表单。

第二: 您不需要两种形式,而且,只有第二种形式具有method ='POST'和操作集,您可以在第一种形式中进行设置。没有这种形式,您只能通过$ _GET获取信息。

第三: 您忘记在查询的文本变量上加上引号。这是行不通的,因为需要用引号将字符串引起来。

您一定会犯错误(确实有很多错误),所以请不要让它失望。 利用诸如 var_dump get_defined_vars() print | echo | print_r die()之类的东西。 .. 可以帮助您了解所有代码状况的一切,然后再寻求帮助,因此至少可以大致了解什么地方出了什么问题以及在哪里。

答案 1 :(得分:0)

在您的表单中,您无法添加属性:actionmethod。 您主题中 action 中的值是"",而 method 中的值是POST