我似乎无法找到此代码的问题..但我知道有一个..对于初学者......它没有将条目添加到我的数据库中,其次我可以' t访问旧条目..
<?php
require_once '../config.php';
$conn = new mysqli($server, $username, $password, $database);
if ($conn->connect_error) {
die("<p style=color:white>Could not connect to database: " . $conn->connect_error . "</p>");
}
$title = $_GET['x'];
if (isset($title)) {
$result = $conn->prepare("SELECT (id, url, title) FROM links WHERE title=$title");
$result->execute;
$goto = $result->get_result()->fetch_array();
$g = $goto[1];
header("Location: $g");
}
function GenerateString($string_length = 3) {
$permissible_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$char_length = strlen($permissible_characters);
$random = '';
for ($i = 0; $i < $string_length; $i++) {
$random .= $permissible_characters[rand(0, $char_length - 1)];
}
return $random;
}
$url = $_POST['url'];
$code = GenerateString();
if (isset($_POST['submit'])) {
if (substr($url, 0, 7) == "http://" ) {
$url = $url;
}
elseif (substr($url, 0, 8) == "https://") {
$url = $url;
} else {
$url = "http://".$url;
}
$result = $conn->prepare("INSERT INTO links VALUES('',$url,$code)");
}
?>
请修复任何你看错的东西..我是PHP的新手! 提前致谢! -Zack
答案 0 :(得分:1)
我看到的最明显的错误是:在你的阅读部分,你的$result->execute;
缺少括号,因此永远不会被调用(没有括号,它只是一个语句,而不是一个函数调用,在这种情况下什么都不做)。因此,请将其更改为$result->execute();
。
在写作部分,您准备语句但从不执行它。需要执行准备好的语句才能使其生效。在$result->execute();
之后添加$result = $conn->prepare(…);
以解决此问题。
作为旁注:您应该使用预期的预准备语句,使用变量绑定(bind_param
函数等)来防止SQL注入攻击!
有关详细信息,请参阅以下SO问题/答案:How can I prevent SQL injection in PHP?