【问题标题】:HTML Form sending data to SQL table [closed]HTML表单将数据发送到SQL表[关闭]
【发布时间】:2023-03-23 10:01:01
【问题描述】:

提交后,“servers”表中添加了一个新行,但每个数据都显示为“0”,而不是我输入的数据。我对行使用 VARCHAR64。

Form.html

<html>
<head>
</head>
<body>
<form action="db.php" method="post">
server id: <input type="text" name="post_serverid">
server ip: <input type="text" name="post_serverip">
<input type="submit>
</body>
</html>

db.php

<?php

$con=mysqli_connect("localhost","root","","toplist");

//Checking the connection
if(mysqli_connect_errno($con))
{
  echo "Cold not connect to SQL Database: " + mysqli_connect_error();
}

mysqli_query($con, "INSERT INTO servers (serverid, serverip) VALUES ('$_POST['post_serverid']', '$_POST['post_serverip']')");

?>

【问题讨论】:

  • 奇怪的是,mysqli_query($con,"INSERT INTO form (name, dob) VALUES ('$_POST[post_name]', '$_POST[post_dob]')");工作。但是当我用SERVERID替换NAME,用SERVERIP替换DOB时,输入的数据没有插入..
  • @GangDonIt,以后请不要发布您的代码的屏幕截图。请将代码复制并粘贴到问题的正文中。
  • "但是当我用 SERVERID 替换 NAME,用 SERVERIP 替换 DOB 时,输入的数据没有插入.." --- 那是因为你需要改变你的相应的列名。 @GangDonIt - 将您的 SERVERID 列重命名为 NAMESERVERIP 重命名为 DOB 或反之亦然。
  • @Fred-ii- 我当然做到了。
  • 你在上面的评论中写道它有效。 @GangDonIt

标签: php html mysql sql sql-server


【解决方案1】:

首先:切勿在未先验证/清理之前将用户数据直接放入数据库。

接下来,您的 mysqli_query() 中有一些奇怪的标点符号。试试这个:

$serverid = $mysqli->real_escape_string($_POST['serverid']);
$serverip = $mysqli->real_escape_string($_POST['serverip']);

$sql = "INSERT INTO servers (serverid, serverip) VALUES('$serverid', '$serverip');";

mysqli_query($con, $sql);

【讨论】:

  • 我收到错误:未定义:mysqli 并在第 10 行调用成员函数 real_escape_string()。第 10 行是“$serverid = $mysqli->real_escape_string($_POST['serverid']) ;"
  • 因为需要把$mysqli-&gt;real_escape_string改成$con-&gt;real_escape_string@GangDonIt
  • 是的,我的错。对不起。 @Fred-ii-关于 $con 与 $mysqli 是对的。
【解决方案2】:

From OP's comment:

“奇怪的是,mysqli_query($con,"INSERT INTO form (name, dob) VALUES ('$_POST[post_name]', '$_POST[post_dob]')"); 有效。”

“但是当我将NAME替换为SERVERID,并将DOB替换为SERVERIP时,输入的数据并没有插入。”


问题是,您需要相应地更改您的 POST 变量和列名。

NAME 列重命名为SERVERID,将DOB 列重命名为SERVERIP

post_nameserveridpost_dobserverip


现在可以通过这种方式完成新查询:

$serverid = mysqli_real_escape_string($con,$_POST['serverid']);
$serverip = mysqli_real_escape_string($con,$_POST['serverip']);

$sql = "INSERT INTO `servers` (`serverid`, `serverip`) VALUES ('$serverid', '$serverip');";

mysqli_query($con, $sql);

使用这种方法将有助于防止SQL injection.

【讨论】:

    【解决方案3】:

    您可能想要使用$_POST['key'] 而不是$_POST[key]

    【讨论】:

    • 这是评论,不是回答
    • 感谢您的尝试,但这带来了更多错误。
    【解决方案4】:

    $_POST 是一个关联数组,您需要使用单引号或双引号访问键。

    例子:

    将您的查询更改为

    $query = "INSERT INTO servers (serverid, serverip) VALUES ('".$_POST['post_serverid']."','".$_POST['post_serverip']."')";
    
    mysqli_query($con, $query);
    

    此外,您目前很容易受到 SQL 注入的影响。我建议使用准备好的语句或至少在将 $_POST 变量插入数据库之前对其进行转义。

    希望这会有所帮助!

    【讨论】:

    • 实际上,您可以使用单引号或双引号访问值 - 只是双引号允许解释内容,因此使用 $ 和类似的如果没有正确转义可能会出现问题
    【解决方案5】:
    $serverip=$_POST['post_serverid'];
    $serverid=$_POST['post_serverip'];
    $query = mysqli_query($con,"INSERT INTO servers (serverid, serverip) VALUES ('$serverid','$serverid')");
    

    试试这个,应该可以的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      相关资源
      最近更新 更多