提问人:frraj 提问时间:2/27/2018 最后编辑:ceejayozfrraj 更新时间:2/27/2018 访问量:44
使用PHP将数据从网站发布到MySQL不起作用
posting data from website to MySQL using PHP does not work
问:
我是PHP的新手,并试图从网站的访问者那里获得用户代理,然后将此信息发送到MySQL。
Home.html(此页面有一个按钮,用户应单击该按钮以将他带到另一个页面,在那里他将看到他的设备信息
<div id="TestMe_img">
<a href="Result.php">
<input type="submit" value="Test Your Device">
</a>
</div>
Result.php(结果页面包含 2 件事:1- PHP 代码。 2- HTML 代码) PHP的
<?php
$server = "localhost";
$user = "root";
$pass = "";
$dbname = "user_data";
$userAgent = $_POST['userAgent'];
// Create connection
$conn = new mysqli($server,$user, $pass, $dbname);
// Check connection
if($conn -> connect_error) {
die("Conneciton Failed: " . $conn -> connect_error);
}
if (empty($userAgent)) {
echo "User Agent is blank";
die();
}
$sql = "INSERT INTO UserData (UserAgent) VALUES ('$userAgent')";
if ($conn -> query($sql) === TRUE) {
echo "Thank you! Hana is stupid";
}
else
echo "Unfortunately Hana is smart";
$conn -> close();
?>
HTML 部件
<body onload="userAgent();">
<table>
<tr>
<td>user agent</td>
<td id="userAgent"></td>
</tr>
</table>
</body>
JavaScript的
function userAgent(){
var userAgent = navigator.userAgent;
document.getElementById('userAgent').innerHTML = userAgent;
}
但是,有一个我找不到的错误,因为每次我单击按钮时,它都会将我带到result.php并向我显示浏览器上的代码,而数据库上没有结果!
答:
好吧,这会稍微长一点,但请耐心等待。
1st:您将收到“用户代理为空”消息,因为用户代理实际上并未提交到 PHP 页面。您需要将输入(隐藏或文本)放入表单中,将数据推入其中,然后提交该表单。像这样更改您的 HTML,那么至少您的日期将被提交:
<form method="post" action="Result.php">
<input type="hidden" id="userAgent">
<input type="submit" value="Test Your Device">
</form>
第二:你甚至不需要这样做,因为 userAgent 已经可用于 PHP,即使没有手动提交它。只需使用以下变量:
$_SERVER['HTTP_USER_AGENT']
第三:你永远不应该把未经清理的输入放到SQL字符串中。这将导致SQL注入,您的服务器将被黑客入侵。 而不是:
$sql = "INSERT INTO UserData (UserAgent) VALUES ('$userAgent')";
$conn->query($sql);
您必须使用准备好的语句(对于几乎所有接受变量的查询),以便没有人可以操作您的查询。否则,如果您的 $userAgent 变量包含单个引号,则可以中断查询,攻击者可以注入他想要的任何 SQL 代码。因此,请执行此操作以解决您的安全问题:
$statement = $conn->prepare("INSERT INTO UserData (UserAgent) VALUES (?)");
$statement->bind_param('s', $userAgent);
$statement->execute();
's' 参数实际上是要在语句中准备的每个参数的一个字母。在本例中,它表示您要传递字符串。“i”是一个整数,“d”是一个双精度,更多信息请看这里:http://php.net/manual/de/mysqli-stmt.bind-param.php
第四:你的问题与phpMyAdmin完全无关,所以你可能应该改变标题。
我希望这能帮助你开始。
评论