<;表单>;以及php中带有sql的$_POST


<form> and $_POST with sql in php

我有这个表单列表:

<form action="">
Inlognaam: <input type="text" name="inlognaam">
</form>

现在我想要的是,如果你把文本放进去,文本就会被设置到数据库中。

// Create connection
$con=mysqli_connect("localhost","root","","phpexpr");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
 }
$inlognaam = $_POST['inlognaam']; 

if(isset($POST['inlognaam'])){
$filename = $_POST['inlognaam'];
}
if(isset($filename)){ 
echo $filename;
}
$sql = 'INSERT INTO gebruikers (inlognaam) VALUES('.$filename.')';
mysql_query($sql);
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}   
echo "1 record added";
mysql_close($con);
?>

我得到了这个代码,但我不知道哪里出了问题,应该更改什么。有人能帮我吗?:)

您的代码有几个缺陷:

  • 您没有指定方法,所以您的表单将使用GET发送,而您在PHP代码中使用$_POST变量。使用

    <form action="" method="POST">
    
  • 您正在混合mysql_*函数和mysqli_*函数。不要再使用前者了,它们已经被弃用了。使用MySQLi或PDO(我更喜欢后者)。如果你不能决定是哪一个,这篇文章将对你有所帮助。如果你选择PDO,这里有一个很好的教程。

  • 您在这里执行两个查询(产生两个INSERT):

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

    只需获取第一个查询的值(如果要使用MySQLi,请使用mysqli_query)。

  • 最后但同样重要的是,由于查询的字符串连接,您对SQL注入持开放态度。切换到如下准备好的语句:

    $sql = 'INSERT INTO gebruikers (inlognaam) VALUES (?)';
    $stmt = $con->prepare($sql);
    $stmt->bind_param('s', $filename);
    $success = $_stmt->execute();
    if ($success) {
        …
    

<form action="" method="post">行使用方法名POST还有一件事你犯了错误,那就是在行中使用$_POST而不是$POST

if(isset($POST['inlognaam'])){
$filename = $_POST['inlognaam'];
}

此处,

当您没有指定表单标记的方法属性时,默认情况下它将使用GET方法来发布数据。

因此,设置或使用$_REQUEST从html文件中获取数据,这与form方法无关。

表单可能类似于<form action="" method="POST">试试

如果你得到一个错误,你能给我们一个错误吗?我看到您使用的是MySQLI连接,但您只需一个MySQL查询就可以将所有内容放入数据库中。

你需要这个代码:

<form action="" method="POST">
  <?php
// Create connection
$con = mysqli_connect("localhost","root","","phpexpr");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQLI: " . mysqli_connect_error();
 }
$inlognaam = trim($_POST['inlognaam']); 

if(isset($_POST['inlognaam']))
{
$filename = trim($_POST['inlognaam']);
}
if(isset($filename))
{ 
echo $filename;
}
$sql = 'INSERT INTO gebruikers (inlognaam) VALUES('.$con->real_escape_string($filename).')';
$con->query($sql);
if (!mysqli_query($sql,$con))
{
die('Error: ' . mysqli_error());
}   
echo "1 record added";
mysqli_close($con);
?>

我使用了MySQLI的OO端,因为我不习惯生产MySQLI中的通用端,也不习惯我这边的糟糕英语。

我还看到您没有在表单中声明操作,如果您不这样做,您需要使用POST,用户可以发布您可以发送到DB的信息。