我是PHP / SQL编码的新手,我完全不知道为什么这个编码不起作用。数据库本身是由我的大学制作的,所以我只是想连接它(我不确定我是否能够放弃细节,所以我把连接编码拿出来。我处于基本级别所以重要的技术语言将超越我的头脑,但任何建议将不胜感激!
我正在尝试将链接到PHP文件的表单中的结果插入到数据库表中。我不确定我是否需要在PHP文件中放置任何内容来说明这一点?但这是我的代码:
<?php
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// Connect to database
$sql = "SELECT runnerid, position, eventid, date, finishtime, categoryid, agegrade, pb FROM Results";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
{
echo "<table>";
echo '<table border=1><tr><th>Runner ID</th><th>Position</th><th>Event ID</th><th>Date</th><th>Finish Time</th><th>Category ID</th><th>Age Grade</th><th>Personal Best</th></tr>';
echo "<tr><td>";
echo $row['runnerid'];
echo "</td><td>";
echo $row['position'];
echo "</td><td>";
echo $row['eventid'];
echo "</td><td>";
echo $row['date'];
echo "</td><td>";
echo $row['finishtime'];
echo "</td><td>";
echo $row['categoryid'];
echo "</td><td>";
echo $row['agegrade'];
echo "</td><td>";
echo $row['pb'];
echo "</td>
</tr>";
}
echo "</table>";
}
} else {
echo "0 results";
}
$sql = "INSERT INTO Results VALUES ('$_POST[runnerid]', '$_POST[position]' '$_POST[eventid]' '$_POST[date]' '$_POST[finishtime]' '$_POST[categoryid]' '$_POST[agegrade]' '$_POST[pb]')";
$result = $conn->query($sql);
if (!$result) {
die('Could not insert data' . mysql_error());
}
$conn->close();
?>
我甚至尝试过没有$_POST
编码的代码来添加新数据,但这也没有用。
答案 0 :(得分:6)
没有人提到的是,鉴于您的代码,我可以轻松地用一个请求消灭整个数据库。以下是您需要采取的措施来防范SQL injection attacks:
$sql = "INSERT INTO Results VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param('iiississ', $_POST["runnerid"], $_POST["position"], $_POST["eventid"], $_POST["date"], $_POST["finishtime"], $_POST["categoryid"], $_POST["agegrade"], $_POST["pb"]);
$result = $stmt->execute();
if (!$result) {
die('Could not insert data: ' . $conn->error);
}
Read up on prepared statements:
绑定变量与查询分开发送到服务器,因此不会干扰它。在解析语句模板之后,服务器直接在执行点使用这些值。绑定参数不需要进行转义,因为它们永远不会直接替换为查询字符串。必须为服务器提供绑定变量类型的提示,以创建适当的转换。
答案 1 :(得分:3)
如果你很好地缩进你的代码,你会更容易看到错误。
您有不匹配的花括号
您的查询语法错误,即参数
如果您使用""
围绕变量名称,变量将在{}
字符串中更好地替换。
您需要在while循环之外移动<table>
并移除第二个<table....
代码
表格标题在循环之外也会更好
您还在使用mysql_error()
但是您实例化了一个mysqli_
对象,不允许混合扩展。请改用$conn->error
另见@ miken32回答建议使用绑定变量。
以下是一些建议修复: -
<?php
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// Connect to database
$sql = "SELECT runnerid, position, eventid, date,
finishtime, categoryid, agegrade, pb FROM Results";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
echo '<table border="1">
<tr><th>Runner ID</th><th>Position</th><th>Event ID</th>
<th>Date</th><th>Finish Time</th><th>Category ID</th>
<th>Age Grade</th><th>Personal Best</th>
</tr>';
while($row = $result->fetch_assoc()) {
{
echo "<tr><td>";
echo $row['runnerid'];
echo "</td><td>";
echo $row['position'];
echo "</td><td>";
echo $row['eventid'];
echo "</td><td>";
echo $row['date'];
echo "</td><td>";
echo $row['finishtime'];
echo "</td><td>";
echo $row['categoryid'];
echo "</td><td>";
echo $row['agegrade'];
echo "</td><td>";
echo $row['pb'];
echo "</td>
</tr>";
}
echo "</table>";
// } remove extra barckey
} else {
echo "0 results";
}
$sql = "INSERT INTO Results
VALUES ('{$_POST['runnerid']}', '{$_POST['position']}',
'{$_POST['eventid']}', '{$_POST['date']}',
'{$_POST['finishtime']}' '{$_POST['categoryid']}',
'{$_POST['agegrade']}', '{$_POST['pb']}')";
$result = $conn->query($sql);
if (!$result) {
die('Could not insert data' . $conn->error);
}
$conn->close();
?>
答案 2 :(得分:-2)
WebSecurityConfigurerAdapter
答案 3 :(得分:-3)
兄弟,你忘了,每个价值之后。如果你在sql查询中直接从post中获取任何值,那么它将在'“。$ _ post。”'或“'。$ _ post。'之间。”一个条件将适合看到您将理解的以下查询。
一切顺利......
如果有任何问题,请评论plz。让我知道我会解决
必须如下:
$sql = "INSERT INTO Results VALUES ('".$_POST[runnerid]."', '".$_POST[position]."', '".$_POST[eventid]."', '".$_POST[date]."', '".$_POST[finishtime]."', '".$_POST[categoryid]."', '".$_POST[agegrade]."', '".$_POST[pb]."')";