首页 > 解决方案 > 尝试使用 PHP 将查询传递到数据库时出错(来自 HTML 表单的数据)

问题描述

编辑:问题现在已经解决,我在下面提供了我的原始版本和固定版本的 PHP 代码。老实说,我不确定有什么区别,我以前从未使用过 PHP,但希望这对某人有所帮助!

寻求帮助。我目前正在做大学课程,需要一个元素的帮助。当我尝试传递从 Web 表单中获取的数据时,如果我使用以下语句,页面会出错:

    echo $db_connection->error;

它给出的错误是:

    Parse error: syntax error, unexpected '$useremail' (T_VARIABLE) in (directory goes here, i've removed it)

我不知道如何解决这个错误。如果我回显 SQL 插入查询并将其复制+粘贴到数据库中,它会完美运行。

任何帮助将非常感激。

编辑:固定的完整PHP代码如下:

        <?php

require_once "db.php";
    // below code checks whether the form is submitted
    // using the POST method or not

    if($_SERVER["REQUEST_METHOD"] == "POST")
    {
        // the form is submitted using the POST method
        // now proceed to process the form's data

        //$errPass = $errEmail = $errName = $errCVtype = $errCompanyname = "";
        //$pass = $email = $name = $usercomment = $cvtype = $companyname = "";

        //$pass           = mysqli_real_escape_string($db_connection, 
$_POST["password"]);

       // $salt = "TheQuickBrownFoxJumpedOverTheMoonTwice";
       // $data = $pass . $salt;
        //$password = crypt($data);
        //these commented lines are redundant (left in by lecturer)

        $useremail      = mysqli_real_escape_string($db_connection, $_POST["email"]);
        $fname          = mysqli_real_escape_string($db_connection, $_POST["fname"]);
        $sname          = mysqli_real_escape_string($db_connection, $_POST["sname"]);
        $cname          = mysqli_real_escape_string($db_connection, $_POST["cname"]);
        $usercomment    = mysqli_real_escape_string($db_connection, $_POST["comment"]);
        $cvtype         = mysqli_real_escape_string($db_connection, $_POST["cvchoice"]);
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
    <title>PHP and MySQLi Thank you message.</title>
    <link rel="stylesheet" href="../CSS/process_cv.css">
</head>
<body>
    <div id="container">
        <div id="text-field">
            <section>
<?php 


    if($_SERVER["REQUEST_METHOD"] == "POST" )
    {

        $qry = "insert into cv_test(email, fname, sname, cname, usercomment, cvrequested)
                values('$useremail', '$fname', '$sname', '$cname', '$usercomment', '$cvtype');";
        $res = $db_connection->query($qry);
        if($res)
        {   
            echo "<p id='Title'>Thank you for requesting to see my CV.</p>";
            echo "<p id='Name'>Your Name: <strong>".$fname."</strong></p>";
            echo "<p id='Email'>Your Email: <strong>".$useremail."</strong></p>";
            echo "<p id='Company'>Your Company Name: <strong>".$cname."</strong></p>";
            echo "<p id='Comment'>Your Comment: ".$usercomment."</p>";
            echo "<p id='CV'><a href='REMOVED PRIVATE URL";

            if ($cvtype === 'short') 
                echo "Short_CV";
            else
                echo "Long_CV";
            echo ".pdf' target='_blank'>View my ".$cvtype." CV</a></p>";
            //echo "<p id='image_map'><a href='../image_map.html'>Return To Image_Map</a></p>";
            exit();
        }
        else 
        {
            echo "<p>Error occurred, kindly try again later.</p>";
            //echo "<p><a href='../image_map.html'>Return To Image_Map</a></p>";
            exit();
        }

    }

$db_connection->close();    
?>
     </section>
    </div>
</div>
</body>
</html>

原始代码是:

        <?php

require_once "db.php";
    // below code checks whether the form is submitted
    // using the POST method or not

    if($_SERVER["REQUEST_METHOD"] == "POST")
    {
        // the form is submitted using the POST method
        // now proceed to process the form's data

        //$errPass = $erruseremail = $errfname = $errsname = $errcname = $errusercomment = $errcvtype = "";
        //$pass = $useremail = $fname = $sname = $cname = $usercomment = $cvtype = "";

        //$pass           = mysqli_real_escape_string($db_connection, $_POST["password"]);

        //$salt = "TheQuickBrownFoxJumpedOverTheMoonTwice";
        //$data = $pass . $salt;
        //$password = crypt($data);

        $useremail      = mysqli_real_escape_string($db_connection, $_POST["email"]);
        $fname          = mysqli_real_escape_string($db_connection, $_POST["fname"]);
        $sname          = mysqli_real_escape_string($db_connection, $_POST["sname"]);
        $cname          = mysqli_real_escape_string($db_connection, $_POST["cname"]);
        $usercomment    = mysqli_real_escape_string($db_connection, $_POST["comment"]);
        $cvtype         = mysqli_real_escape_string($db_connection, $_POST["cvchoice"]);
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
    <title>PHP and MySQLi Thank you message.</title>
</head>
<body>
<?php 
    if($_SERVER["REQUEST_METHOD"] == "POST")
    {
        $qry = "insert into cv_test(email, fname, sname, cname, usercomment, cvrequested)<br>
                values('$useremail', '$fname', '$sname', '$cname', '$usercomment', '$cvtype');";
        echo $qry . "<br>";
        $res = $db_connection->query($qry);
        if($res)
        {
            echo "<p>Thank you for requesting to see my CV.</p>";
            echo "<p> Your name: <strong>".$fname." ".$sname."</strong></p>";
            echo "<p>Your Company Name: <strong>".$cname."</strong></p>";
            echo "<p>Your email: ".$useremail."</p>";
            echo "<p>Your Comment: ".$usercomment."</p>";
            echo "<p><a href='REMOVED PRIVATE URL";

            if ($cvtype === 'short') 
                echo "Short_CV";
            else
                echo "Long_CV";
            echo ".pdf' target='_blank'>View my ".$cvtype." CV</a></p>";
            exit();
        }
        else 
        {
            echo "<p>Error occurred, kindly try again later.</p>";
            exit();
        }
    }
$db_connection->close();
?>
</body>
</html>

标签: phphtmlsqlforms

解决方案


问题出在您的 sql 文本中,有一个“br”标签。

"insert into cv_test(email, fname, sname, cname, usercomment, cvrequested)<br>
                values('$useremail', '$fname', '$sname', '$cname', '$usercomment', '$cvtype');"

那是导致错误的原因。

在您的新 sql 测试中,您删除了“br”标签。

"insert into cv_test(email, fname, sname, cname, usercomment, cvrequested)
                    values('$useremail', '$fname', '$sname', '$cname', '$usercomment', '$cvtype');"

'br' 不是 sql 语法的一部分


推荐阅读