我正在尝试通过他的ID从数据库中打印用户名。我希望通过将 id 输入到输入表单来选择它,但它不起作用。有什么线索吗?
<div>
<p><u>Anzeigen eines Users mit Eingebafeld für die id</u></p>
<form method="post1" >
<p>Zu suchende id:</p> <input type="text" name="id" class="form-control"><br>
<input type="submit" name="Buttonid" value="Suchen" class="btn btn-primary" >
</form>
</div>
<div>
<?php
/*ini_set('display_errors', 0);*/
$mysqli = new mysqli("localhost", "test", "test", "test");
if ($mysqli->connect_errno) {
print "Failed to connect to MySQL: " . $mysqli->connect_error;
}
$id = @$_POST1;
$res = $mysqli->query("SELECT username FROM user WHERE id = $id");
$row = $res->fetch_assoc();
print '<p>' . $row['username'] .'</p>';
?>
</div>
</div>
你真的需要小心$_POST
并清理那里的所有混乱。使用准备好的状态也会很好,但这里有一个很好的解决方案,可以确保安全并正常工作。
<?php
/*ini_set('display_errors', 0);*/
$mysqli = new mysqli("localhost", "test", "test", "test");
if ($mysqli->connect_errno) {
die("Failed to connect to MySQL: " . $mysqli->connect_error);
}
if(isset($_POST['id']) && !empty($_POST['id']))
{
$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT, array(
'options' => array(
'default' => 0
);
// to be shure that is number
$id = preg_replace("/[^0-9]/Ui", "", $id);
$res = $mysqli->query("SELECT username FROM user WHERE id = {$id} LIMIT 1;");
$row = $res->fetch_assoc();
if(isset($row['username']) && !empty($row['username']))
print '<p>' . $row['username'] .'</p>';
else
print '<p>No username</p>';
}
?>
不理想,但你会明白,我只是更改您的代码。
很可能你想要这样的东西:
<div>
<p><u>Anzeigen eines Users mit Eingebafeld für die id</u></p>
<form method="post" >
<p>Zu suchende id:</p> <input type="text" name="id" class="form-control"><br>
<input type="submit" name="Buttonid" value="Suchen" class="btn btn-primary" >
</form>
</div>
<div>
<?php
/*ini_set('display_errors', 0);*/
if (isset($_POST['id'])){
$mysqli = new mysqli("localhost", "test", "test", "test");
if ($mysqli->connect_errno) {
print "Failed to connect to MySQL: " . $mysqli->connect_error;
}
$id = $mysqli->real_escape_string($_POST['id']);
$res = $mysqli->query("SELECT username FROM user WHERE id = $id");
$row = $res->fetch_assoc();
print '<p>' . html_entities($row['username']) .'</p>';
}
?>
</div>
</div>
请注意以下更改:
- 帖子1 -->帖子
-
@$POST1
-->$_POST['id']
,不知道你在哪里看到这个奇怪的代码。 - 添加
real_escape_string
以确保输入的 id 不是 SQL 注入,也可以将其转换为 int。 - 添加
html_entities
以确保用户名是XSS安全的。
当表单的方法设置为 post
时,表单中的变量将在 $_POST
数组中捕获。另请注意,我检查此数组是否具有id
的值,因为每当表单加载时,php 代码也会执行,即使表单尚未提交。