代码之家  ›  专栏  ›  技术社区  ›  Tim

使用PHP链接到用户配置文件

  •  0
  • Tim  · 技术社区  · 14 年前

    我希望我的php查询显示带有指向用户配置文件的链接的用户名。

    <?php
    
    $get_items = "SELECT * FROM items WHERE category='test'";
    $result = mysql_query($get_items);
    
    while($item = mysql_fetch_array($result, MYSQL_ASSOC)){
        $creator = $item['created_by'];
         echo "<b>Seller: </b>"."<a href='userprof.php?id=$creator'>$creator</a>";  
        }
    ?>
    

    单击此链接将转到我创建的用户配置文件页面。但我想要“userprof.php?id=$creator”以知道要显示帐户信息的用户。这是最好的方法吗?如何读取url并显示正确的信息?

    4 回复  |  直到 14 年前
        1
  •  2
  •   Your Common Sense    14 年前
    <?php
    $userId = $_GET['id'];
    $sql = "SELECT * FROM user WHERE id = " . intval($userId);
    $result = mysql_query($sql);
    ...
    
        2
  •  0
  •   Josh K    14 年前

    您正在发送GET变量。

    $id = $_GET['id']; // Contains whatever was in $creator;
    
        3
  •  0
  •   Gitesh Dang    14 年前

    使用 $_GET 用于从URL获取变量。 就像在代码中一样,您希望访问用户配置文件,然后从url获取用户id 喜欢

    http://localhost/test/user_profile.php?uid=2
    

    在url中uid是2,这是您的用户id。 您可以使用代码获取此id

    $user_id = $_GET['uid'];
    

    在查询中使用此变量。

        4
  •  0
  •   Theodore R. Smith    14 年前

    天啊!!可怕的PHP比比皆是!我的眼睛疼!!

    这些人,没有一个人做了两件正确的事:

    1. 总是过滤用户输入!!
    2. 永远不要相信PHP转义函数,尤其是不要相信 intval() addslashes()
    3. 甚至 mysql_real_escape_string()
    4. 你应该用事先准备好的语句 一切

    这是正确的方法:

    <?php
    if (!filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))
    {
        trigger_error('Invalid User ID. It must be an integer (number).', PHP_USER_ERROR);
        exit;
    }
    
    $userId = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
    $sql = "SELECT * FROM user WHERE id = ?";
    
    $pdo = new PDO('mysql:host=localhost;db=mydb', $dbUsername, $dbPassWord);
    $statement = $pdo->prepare($sql);
    $statement->execute(array($userId));
    
    $result = $statement->fetch(PDO::FETCH_ASSOC);
    

    这是100%安全的。我希望人们既不要投我一票,也不要贬低我的回答。糟糕的代码是如此系统化,我们只需要在新来的人开始正确地学习它之前大喊大叫,否则PHP作为一种专业语言将受到严重损害。