如何使用php从数据库正确输出数据?

m1m5dgzv  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(281)

我有一个数据库,表名为user,有3列:first\u name、last\u name和email。在html中,我有一个表单,提示用户键入一些数据并存储在数据库中。在我的index.php页面中,有一个表显示了所有输入的名字,当你按这个名字时,它会打开一个名为output.php的新页面,其中包含所有信息。问题是,当我按名称时,它会显示数据库中所有数据的结果,而不是有关我所按名称的信息。当我添加信息时,它在数据库中工作。如何正确输出数据?output.php的代码是:
output.php的代码是:

$stmt = $pdo->query('SELECT first_name, last_name, email FROM user ');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo("<p>First Name:".$row["first_name"]." ");
echo("</p><p>Last Name:".$row["last_name"]." "); 
echo("<p>Email:".$row["email"]." ");
}
j0pj023g

j0pj023g1#

如前所述,你需要一个 WHERE 子句,因为您注意到用户表中只有3列,所以您需要添加一个自动递增列(名为 uid 或者 id 或者 ID …等等),然后将该id从表单传递到sql语句,或者(虽然不是很好,但可以工作)如果您的电子邮件地址是唯一的,则可以将其用作标识符。如果用户可以多次使用用户表中的同一电子邮件地址,则必须创建一个新列。我建议你做一个 id 列,但要使其工作,您可以尝试以下操作:
基于您的php示例

<?php if(!empty($_POST['email'])):
    # Trim the input, to remove spaces/tabs
    $email = trim($_POST['email']);
    # Make sure this is an email address
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)):
        # You don't have to die, but I am doing for quickness/ease
        die('Invalid email.');
    else:
        $query = $pdo->prepare("SELECT * FROM users WHERE email = ?");
        $query->execute([$email]);
        while($row = $query->fetch(PDO::FETCH_ASSOC)): ?>

            <p>FIRST: <?php echo $row['first_name'] ?></p>
            <p>LAST: <?php echo $row['last_name'] ?></p>
            <p>EMAIL: <?php echo $row['email'] ?></p>

        <?php endwhile ?>

    <?php endif ?>

<?php else: ?>

    <p>Type in the email you are searching for.</p>
    <form method="post" action="#">
        <input type="text" name="email" placeholder="Email address" />
        <input type="submit" value="Select" />
    </form>

<?php endif ?>

如果您有一个id,并输出一个用户列表,您可以将他们的id作为查询使用 WHERE 日期:

<a href="/?action=edit&id=<?php echo $row['id'] ?>">EDIT <?php echo $row['first_name'].' '.$row['last_name'] ?></a>

相关问题