从HTML表单将数据插入SQL表

时间:2017-01-05 11:43:35

标签: php html mysql sql forms

已创建一个HTML表单,该表单应该(填充时)将其保存的数据发送到插入新行的数据库,以便以后使用。但是,我似乎无法让它工作,我收到以下错误:

  

注意:使用未定义的常量con - 假设' con'在 C:\ xampp \ htdocs \ form \ insert.php 4

     

警告:mysql_query()要求参数1为字符串,在 C:\ xampp \ htdocs \ form \ insert.php 中给出的对象 17   
未插入数据

HTML代码

<!DOCTYPE html>
<html>
    <head>    
        <title>Form linked to database</title>
    </head>
    <body>
        <form action="insert.php" method="post">
            Name: <input type="text" name="username">
            <br>
            Email: <input type="text" name="email">
            <br>
            <input type="submit" value="insert">
        </form>
    </body>
</html>

PHP代码

<?php
$con = mysqli_connect('localhost','[retracted]','[retracted]');

if(!con) {
    echo 'Not connected to server!';
}

if(!mysqli_select_db($con,'tutorial')) {
    echo 'Database not selected!';
}

$Name = $_POST['username'];
$Email = $_POST['email'];

$sql = "INSERT INTO person (Name,Email) VALUES ('$Name','$Email')";
if(!mysql_query($con,$sql)) {
    echo 'Data not inserted';
} else {
    echo 'Data inserted';
}
//header("refresh:2; url=form.html");
?>

我是PHP新手,并关注了以下YouTube tutorial

我也在本地主机上使用XAMPP。任何帮助表示赞赏。谢谢。

5 个答案:

答案 0 :(得分:3)

你应该改变:

if(!con){
    echo 'Not connected to server!';
}

为:

if(!$con){
    echo 'Not connected to server!';
}

因为你在那里错过了一个美元符号。

此外,您在mysql_对象mysqli_上使用了$con功能:

if(!mysql_query($con,$sql))

将此更改为

if(!mysqli_query($con,$sql))

SQL注入

由于您的查询容易受到SQL注入攻击,因此我建议您查看使用预准备语句或使用mysqli_real_escape_string() - 但是,这会带来一些问题:{{3} }

答案 1 :(得分:1)

你犯了两个小错误,即

1)忘记在变量名称之前添加$,即更改

if(!$con){
        echo 'Not connected to server!';
    }

2)您已与mysqli_connect关联,但您正尝试在其中使用mysql_query个功能。所以请更改并使用mysqli_query

if(!mysqli_query($con,$sql)){ }

这是你的问题。我的建议是使用mysqliPDO,这是一种很好的做法。

答案 2 :(得分:0)

您没有使用正确的mySQL查询功能,您已经使用过:

的mysql_query($ CON

您应该使用:

mysqli_query

代替。如果您还有问题,请告诉我。

答案 3 :(得分:-1)

现在你有很多答案,我认为这些都不是正确的。我已经按照您的方式编写了新的代码,但是使用准备好的语句,所以您将保存到SQL注入。

<?php
    $con = mysqli_connect('localhost','[retracted]','[retracted]');

    if(!$con){
        echo 'Not connected to server!';
    }

    if(!mysqli_select_db($con,'tutorial')){
        echo 'Database not selected!';
    }

    $Name = $_POST['username'];
    $Email = $_POST['email'];

   if ($stmt = mysqli_prepare($con, "INSERT INTO person (Name, Email) VALUES (?, ?"))) {
    mysqli_stmt_bind_param($stmt, "ss", $Name, $Email);
    mysqli_stmt_execute($stmt);
    echo "Data inserted";
   }
   else {
    echo "Error";
   }

mysqli_close($con);

    //header("refresh:2; url=form.html");
?>

我认为它应该有效,如果不让我知道。

答案 4 :(得分:-2)

试试这个:

function showdiv(toshow){
    $("#contentdiv > div").hide("fast"); //Hide all divs
    $("#" + toshow).show("fast"); //Show one specific div
}