此查询中的PHP语法错误

时间:2014-04-17 01:10:18

标签: php sql syntax-error

任何人都可以帮我弄清楚这段代码中有什么问题吗?在我添加第三个查询以使用数据库中的当前信息填充表单之前,它曾经工作过。现在它只返回一个白页。

<?php

    if (isset($_GET['edit'])) {
        echo "<form action=\"user.php\" method=\"post\">";

            $userinfo = mysqli_query($con,"SELECT * FROM members WHERE members.id='".$_COOKIE[userid]."' AND members.username='".$_COOKIE[user]."'";
        while($uir = mysqli_fetch_array($userinfo)) {

        echo "
        <label for=\"name\">Navn:</label>
            <input type=\"text\" name=\"name\" placeholder=\"Your name\" value=\"".$uir['name']."\"required /><br />    

        <label for=\"mobil\">Mobil:</label>
            <input type=\"tel\" name=\"mobil\" placeholder=\"Mobil tlf\" value=\"".$uir['mobil']."\" required /><br />          

        <label for=\"bilnr\">Bil #:</label>
            <input type=\"tel\" name=\"bilnr\" placeholder=\"Bil Nr.\" value=\"".$uir['bilnr']."\" required /><br />

        <label for=\"regnr\">Registrerings nummer:</label>
            <input autocapitalize=\"characters\" type=\"text\" name=\"regnr\" placeholder=\"Reg.Nr.\" value=\"".$uir['regnr']."\" required /><br />";   

        }
        echo "<input type=\"submit\" /></form>";    
    }
    elseif (isset($_POST["bilnr"])) {
            $sql="UPDATE members SET name='$_POST[name]', mobil='$_POST[mobil]', bilnr='$_POST[bilnr]', regnr='$_POST[regnr]' WHERE id='".$_COOKIE[userid]."' AND username='".$_COOKIE[user]."'";
            if (!mysqli_query($con,$sql))
            {   
                die('Error: ' . mysqli_error($con));
            }
        echo "<p class=\"red\">Informasjonen er oppdatert!</p>";
        mysqli_close($con); }       

    else {
        echo "<a href=\"user.php?edit\">Oppdater bruker info</a>";
    }  

?>

2 个答案:

答案 0 :(得分:1)

您应该将数组键放在引号之间:

$_COOKIE['userid']

其次,不要在SQL代码中直接使用它们。当你编写这样的查询时,在代码中找到错误会更容易:

$name = $_POST['name'];
$mobil = $_POST['mobil'];
$bilnr = $_POST['bilnr'];
$regnr = $_POST['regnr'];


$sql="UPDATE members 
      SET name='$name', mobil='$mobil', bilnr='$bilnr',
      regnr='$regnr' etc.

答案 1 :(得分:0)

您忘记在第6行关闭第一个mysqli_query的括号。只需在该行的分号前添加一个右括号,php将再次解析它。

即:

$userinfo = mysqli_query($con,"SNIPPETY SNIP SNIP"."'";

为:

$userinfo = mysqli_query($con,"SNIPPETY SNIP SNIP"."'");

除非您想要SQL错误,否则请勿将实际查询更改为SNIPPETY SNIP SNIP。

根据John Conde的评论,调整代码以防止sql注入。