基本的PHP MySQL表单


Basic PHP MySQL Form

*下面的固定代码发布供参考(代码工作的第二部分第一部分没有)

旧帖子没有工作,我整个周末都在工作。我在数据库中获取的数据不是表单中的值。

我收到以下错误,

分析错误:语法错误,第51行上/Users/hunterjamesnelson/Sites/290Website/backend/p5services-bandend/test.php中出现意外的"INTO"(T_STRING)

这是指这行。。。

 $sql=INSERT INTO user(first-name,last-name,email) VALUES(isset($_POST['firstname']), isset($_POST['lasttname']), isset($_POST['email']));}

我怀疑这些问题与我如何使用引号有关,但到目前为止,我似乎已经尝试了每一个合乎逻辑的位置,现在只剩下这个了。

这是所有的代码。。。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<h1>test</h1>
<form action="test.php" method="post">
    FirstName:<input type="text" name"firstname"> <br>
    LastName:<input type="text" name"lasttname"> <br>
    Email:<input type="text" name"email"> <br>
    <!-- UserName:<input type="text" name"username"> <br>
    Phone:<input type="text" name"phone"> <br> -->
    <input type="submit" value="Submit" name="submit" />
</form>
</body>
</html>
<?php 
$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "p5services";
// Create connection
$dbc = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$dbc) {
    die("Connection failed: " . mysqli_connect_error());
}
// form VALUES
// $Fname = isset($_POST['firstname']) ? $_POST['firstname'] : '';
// $Lname = isset($_POST['lasttname']) ? $_POST['lasttname'] : '';
// $email = isset($_POST['email']) ? $_POST['email'] : '';
if (isset($_POST['submit'])) {
$sql=INSERT INTO user(first-name,last-name,email) VALUES(isset($_POST['firstname']), isset($_POST['lasttname']), isset($_POST['email']));}
if (mysqli_query($dbc, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($dbc);
}
mysqli_close($dbc);

结束旧帖子

*以下是我最终使用的有效方法,也许它会帮助一些人。。。

用户名:
密码:
<!-- start signup submit -->
<?php 
include '_include/php/mysqli_connect.php';
if (isset($_POST['submit_login'])) {
//set up session if the form was posted
    if($_SERVER['REQUEST_METHOD']=="POST") {
        $un = $_POST['username'];
        $pass = $_POST['password'];
        if(isset($un, $pass)) {
            $q = "SELECT * FROM user WHERE user_name='$un' AND pass='$pass' LIMIT 1";
            $r = mysqli_query($dbc, $q);
            if(mysqli_num_rows($r) == 1) {
                $row = mysqli_fetch_assoc($r);
                $_SESSION["loggedin"] = 1;
                $_SESSION["user_id"] = $row['user_id'];
                $_SESSION["username"] = $row['user_name'];
                $_SESSION["first_name"] = $row['first_name'];
                $_SESSION["roll"] = $row['roll_id'];
                $loggedin = 1;
                $user_id = $_SESSION['user_id'];
                $username = $_SESSION['username'];
                echo "Valid entery!";
            } else {
                $loginerror = "Invalid Username/Password Combination";
                echo $loginerror;
            }
        } else {
            session_destroy();
            $loginerror = "Username/Password field was empty";
            echo "else2";
        }
    }
} //end if submit_login
 ?>
<!-- end signup submit -->

正如@Sven B所指出的,您缺少引号。但这里还有更多的事情要做

开发环境应始终启用错误报告功能。最简单的方法是:

<?php
error_reporting(E_ALL); 
ini_set('display_errors', 1);

接下来,当您接受用户输入时,这会使您容易受到SQL Injection的攻击。为了解决这个问题,我们将使用事先准备好的语句。此外,我们将检查值是否在初始设置,这样我们就不必担心有人在数据库中插入多个具有null值的行(如果您的列接受null值)

if(isset($_POST['firstname'], $_POST['lastname'], $_POST['email'])):
    $dbc = new mysqli('host', 'user', 'pass', 'db');
    $dbc->prepare("insert into user(`first-name`,`last-name`,email) VALUES(?,?,?)");
    $dbc->bind_param('sss', $_POST['firstname'], $_POST['lastname'], $_POST['email']);
    $dbc->execute();
endif;

这将使您免受SQL注入的攻击,也将确保您不会在数据库中插入一堆空行。

您还会注意到包含连字符的列名周围的背景标记。考虑到您的列名,这是必要的。

  1. MySQLI准备的语句
  2. MySQLI绑定参数

您有两个错误,首先,您必须向查询添加引号。其次,在将isset()发送到数据库时不应该使用它,因为如果存在变量,isset只返回TRUE和FALSE(布尔值)。试用:

if ( isset($_POST['submit']) ) {
    // protect against SQL injection 
    $firstname = mysqli_real_escape($dbc, $_POST['firstname']);
    $lastname = mysqli_real_escape($dbc, $_POST['lastname']);
    $email = mysqli_real_escape($dbc, $_POST['email']);
     $sql= "INSERT INTO user(first-name,last-name,email) VALUES('$firstname', '$lastname', '$email')");
}

您需要将查询放入"中,然后您就有了

像这样:

$sql= "INSERT INTO user(first-name,last-name,email) VALUES($_POST['firstname'], $_POST['lasttname'],$_POST['email'])";

此外,我真的建议使用这样一个事先准备好的声明:

$sql = $dbc->prepare("INSERT INTO user(first-name,last-name,email) VALUES(?,?,?)");
$sql->bind_param('sss', $_POST['firstname'],$_POST['lastname'],$_POST['email']);
$sql->execute();