<?php
if (isset($_POST['submit'])) {
//google ReCAPTCHA
$secret = "-";
$response = $_POST['g-recaptcha-response'];
$remoteip = $_SERVER['REMOTE_ADDR'];
$url = "https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$response}&remoteip={$remoteip}";
$response = file_get_contents($url);
$result = json_decode($response);
if ($result->success) {
define("SERVERNAME", "-");
define("USERNAME", "-");
define("PASSWORD", "-");
define("DATABASE", "-");
$connection = mysqli_connect(SERVERNAME, USERNAME, PASSWORD, DATABASE);
if (!($connection->connect_error)) {
$sql = "INSERT INTO `gift` (`t`, `p`, `a`, `c`, `ph`, `e`) VALUES ('{$_POST['t']}', '{$_POST['p']}', '{$_POST['a']}', '{$_POST['c']}', '{$_POST['ph']}', '{$_POST['e']}')";
$result = $connection->query($sql);
if ($result) {
echo '<script>alert("OK.");</script>';
} else {
echo '<script>alert("ERROR1.");</script>';
}
} else {
echo '<script>alert("ERROR2.");</script>';
}
} else {
echo '<script>alert("Verification failed.");</script>';
}
}
?>
我不知道为什么它不起作用。我尝试使用var_dump($ sql),它向我返回了正确的字符串。在那之后我不能做var_dump($ result),因为它什么也没返回。 我迷路了。我整天都在尝试用它做某事,这也许就是为什么我看不到这里有什么问题的原因。
我的主要目标是将一些信息插入数据库。
答案 0 :(得分:1)
正如评论所暗示的,请继续阅读SQL注入并练习使用它们。请参见here和here。还可以查看PDO(强烈建议在mysqli上胜出)和here for a tutorial on where to begin with PDO
下面是一个非常基本和简单的绑定参数开始,以帮助防止sql注入:
$t = $_POST['t'];//Post data, you should probably validate this
$sql = $db->prepare("INSERT INTO `gift` (`t`, `p`, `a`, `c`, `ph`, `e`)
VALUES (:t, :p, :a, :c, :ph, :e)");// :t is your bind parameter
$sql->bindParam('t', $t);//bind t (:t) to $t
如果您不想用多行“ bindParam”填充代码,则可以将它们全部直接应用于execute方法
//where [] is an array of values in the order of your column parameters
//e.g. $_POST (Thanks Xorifelse )
$sql->execute([]);
正如其他人在评论中提到的那样,还请检查您如何命名列,因为您现在可能已经了解了它们,但是将来当您不参与该项目时,您可能会忘记它们的含义,这将使持续发展要困难一些。
此site提供了一些有关使用适当的命名约定(例如useApproriateNamesSoIknowWhatThisIsInAYear)的原因的信息