我有一个简单的脚本放在一起,应该查看数据库并查找名称。如果它找到该名称,它应该输出一条消息,表明有人已登录。是的,我确实知道此时代码中我实际上并未登录某人。必须调用和创建 session 等。我还没有准备好应对所有这些。
这就是我所拥有的。
PHP:
<?php
try{
$pdo = new PDO('mysql:host=localhost;dbname=interactive', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMEs "utf8"');
} catch (Exception $ex) {
$error = 'Failed to connect to the database <p>' . $ex->getMessage() . '</p>';
include '/includes/error.html.php';
exit();
}
$sql = 'SELECT name FROM members';
$result = $pdo->query($sql);
foreach($result as $row)
{
$user[] = array(
'user' => $row['name']
);
}
if (!isset($_POST['username']))
{
$true = TRUE;
}
if (isset($_POST['username']))
{
$username = $_POST['username'];
}
if (in_array($username, $user)){
$username .= ' You are logged in!!';
}
include 'form.php';
。 。 。 这是 html: 。 。 .
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf8">
<title>InteractiveForm</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="username">
<input type="submit" value="Login">
</form>
<?php if (isset($_POST['username'])): ?>
<?php echo $username; ?>
<?php endif; ?>
</body>
</html>
我尝试在 $user 上执行 print _r ,它将数据库中的所有名称显示为关联数组,所以我认为这很好,但是当我检查我输入的名称是否输入存在,由于某种原因 in_array 找不到它。如果我很具体,并输入 $user[0] 它会找到我的名字,但否则它不会。
我做错了什么?
非常感谢任何帮助,尤其是深入的描述!
最佳答案
尝试使用 prepare
->fetch
->execute
以及下面列出的其他操作:
$sql = 'SELECT name FROM members';
// Try prepare
$result = $pdo->prepare($sql);
// Try execute
$result->execute();
// Loop with while and fetch
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
// no key, just values
$user[] = $row['name'];
}
if(isset($_POST['username'])) {
$username = $_POST['username'];
// Put this inside or else you will throw error on $username
// if $_POST['username'] is not set
if (in_array($username, $user)){
echo strip_tags($username).' You are logged in!!';
}
}
else
// Don't need to do another if, just use else here
$true = true;
此外,正如 Joe Love 所指出的,您应该在 sql 中使用 WHERE
子句,而不是创建一个巨大的数组来 checkin 。需要考虑一下!
编辑:上面的场景看起来像:
$sql = "SELECT name FROM members where name = :username";
// Try prepare
$result = $pdo->prepare($sql);
// Try execute with a bound parameter to guard against
// SQL injection
$result->execute(array(":username"=>$_POST['username']));
// Presumably, you should only get one hit, so you shouldn't need loop
$row = $result->fetch(PDO::FETCH_ASSOC);
if(isset($row['name'])) {
echo strip_tags($row['name']).' You are logged in!!';
}
else
// Don't need to do another if, just use else here
$true = true;
关于php - 我需要帮助找出为什么这段代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27577252/