HTTP发布到MySQL插入空行

时间:2015-04-30 14:06:42

标签: php mysql http post

我正在尝试设置一个帖子字符串,以便从远程系统直接将数据输入数据库。

发布字符串示例:http://www.domainname.com/insert.php?Phone=07000888888

这会返回我预期的成功消息,但是当我检查数据库时,电话字段为空白。

我的PHP插入脚本如下所示:

<?php
$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$dbname = "Client1";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$phone = mysql_real_escape_string($_POST['phone']);

$sql = "INSERT INTO LiveFeed (phone)
VALUES ('$_POST[Phone]')";

if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

任何人都可以弄明白为什么它会插入一个空行?

5 个答案:

答案 0 :(得分:0)

没有看到你的表格,这有助于我假设你使用的是GET而不是POST。

因此,如果以下是表单提交的结果,您需要使用GET获取您的值而不是POST:

http://www.domainname.com/insert.php?Phone=07000888888

变化:

$phone = mysql_real_escape_string($_POST['phone']);

$sql = "INSERT INTO LiveFeed (phone) VALUES ('$_POST[Phone]')";

$phone = mysql_real_escape_string($_GET['Phone']);

$sql = "INSERT INTO LiveFeed (phone) VALUES ('$phone')";

此外,对于一些额外的输入验证,您可以执行以下操作:

$phone = mysql_real_escape_string($_GET['Phone']);

if(!ctype_digit($phone)){
    echo "Incorrect Phone Number format";
}

$sql = "INSERT INTO LiveFeed (phone) VALUES ('$phone')";

这样可以确保手机号码中只包含数字(如果这确实是你想要的,并且没有+445498390类型号码)

答案 1 :(得分:0)

你的代码应该是这样的

<?php
$servername = "localhost";
$username = "XXXX";
$password = "XXXX";
$dbname = "Client1";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$phone = mysqli_real_escape_string($conn, $_GET['phone']);

$sql = "INSERT INTO LiveFeed (phone)
VALUES ('".$phone."')";

if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?>

答案 2 :(得分:0)

代码存在一些问题,因为服务器管理员让我感到有点不舒服。希望我们能同时解决这个问题和你的问题。

这就是我所接受的。

(为简洁起见,我删除了空行)

<?php
   // ...
   $phone = mysql_real_escape_string($_POST['phone']);
   $sql = "INSERT INTO LiveFeed (phone)
   VALUES ('$_POST[Phone]')";
   // ...

第一件事是你正确地转义字符串然后不使用转义字符串

<?php
   // ...
   $phone = mysql_real_escape_string($_POST['phone']);
   $sql = "INSERT INTO LiveFeed (phone)
   VALUES ('$phone')";
   // ...

但是,你从不检查价值,看看你有什么。

<?php
   // ...
   if(isset($_POST['phone'])){
       $phone = mysql_real_escape_string($_POST['phone']);
       $sql = "INSERT INTO LiveFeed (phone)
       VALUES ('$phone')";
       // ...
   }else{
       echo '<p><b>Error:</b> "Phone" not given.</p>';
       exit(0); // stop and do no more
   }
   // ...

最后(以防万一):如果您以http://example.com/example.php?phone=123456789 $_GET的方式发送数据。

<?php
   // ...
   if(isset($_GET['phone'])){
       $phone = mysql_real_escape_string($_GET['phone']);
       $sql = "INSERT INTO LiveFeed (phone)
       VALUES ('$phone')";
       // ...
   }
   // ...

现在,您应该拥有安全,干净且功能强大的代码,这些代码不会添加空行,也不会轻易被滥用。

答案 3 :(得分:0)

我终于明白了。

代码本身很好,后面的字符串URL在Phone中有一个大写的P.

一旦我将其更改为手机,它现在开始正常工作。

感谢您的帮助。

答案 4 :(得分:0)

我遇到了这个问题,无论我在PHP中尝试了什么过滤,我都无法阻止将空白行插入到数据库记录中。最终为我解决问题的是添加.trim();。我的javascript变量。希望这可以帮助其他有类似问题的人!