我正在尝试设置一个帖子字符串,以便从远程系统直接将数据输入数据库。
发布字符串示例: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);
?>
任何人都可以弄明白为什么它会插入一个空行?
答案 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变量。希望这可以帮助其他有类似问题的人!