通过 mySQL 中的 php 通过 id 打印用户名


Printing a username by id via php from MySQL

我正在尝试通过他的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 代码也会执行,即使表单尚未提交。