如何使用cookie在php中进行q& a验证

时间:2012-12-27 18:49:24

标签: php html

我想创建一个有点像登录的脚本。在进入某个页面之前,他们必须正确回答问题。如果他们做对了,那么他们就会进入页面。例如“你妈妈叫什么名字?”如果妈妈的名字是Laurie,那么他们必须将其输入文本框并正确地继续进行。

更新
 我使用了oliver moran给我的脚本来完成这个。我添加了更多问题,因此每页目前有一个问题。在最后一个问题得到解答之后,我将页面定位到他们登录的地方,因为我无法根据问题的答案弄清楚如何做到这一点。我可以将用户登录为单独的功能。我已经获得了让他们登录的表单,并且不允许未登录的用户访问这些页面。只要他们保持浏览器窗口打开,脚本就会起作用。

我使用了Oliver Moran使用会话的链接,你可以在我的代码中看到我使用会话。但这并没有解决让他们登录的问题。

我现在想知道如何在用户登录后设置cookie,这样他们就可以离开浏览器窗口并返回并仍然登录。我搜索了这个网站的答案,但是找不到一个有道理的。这是我的登录代码

<?php

session_start();

$username=$_POST['username'];
$password=$_POST['password'];

if ($username&&$password) {
$connect = mysql_connect("127.0.0.1","root","") or die('Couldn\'t Connect to Database');
mysql_select_db ("login") or die('Couldn\'t find database');
$query = mysql_query("SELECT * FROM members WHERE username='$username'");
$numrows = mysql_num_rows($query);
if ($numrows !=0) {
    while($rows = mysql_fetch_assoc($query)){
        $dbusername = $rows['username'];
        $dbpassword = $rows['password'];
    }
    if ($username==$dbusername&&$password==$dbpassword) {
        echo "Login Successful. <a href='home.php'>Click here for the members area</a>";
        $_SESSION['username'] = $dbusername;
    }
    else{
        echo "Incorrect Password";
    }
}
else{
    die("Incorrect Username and Password");
}
}
else{
die("Please enter something in the boxes");
}
?>

2 个答案:

答案 0 :(得分:3)

通常,服务器端语言用于此类事情。这是因为,如果您在JavaScript中进行密码检查,任何人都可以看到正确的密码(因为通过查看页面的源代码可以获得所有代码)。

为了安全地执行此操作,您需要将答案提交给服务器并使用服务器端语言来检查答案。然后,服务器端脚本决定将哪些响应返回给用户。

PHP是一种非常流行的服务器端脚本语言。这是基础知识:

首先我们需要一个包含HTML表单的登录页面(login.html),如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
    <title>Login</title>
</head>

<body>

    <form action="script.php" method="post">
        <label>Enter your mom's name: <input type="text" name="mom" /></label>
        <input type="submit" value="Submit" />
    </form>

</body>

</html>

这里的重要部分是形式。提交表单后,数据将发送到名为script.php的PHP脚本。

该脚本如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
    <title>Check login</title>
</head>

<body>

    <?php

    $mom = $_REQUEST['mom'];
    $correct_answer = "Barbie";

    if (!isset($mom) || $mom != $correct_answer) {
        // nothing was submited or the name was incorrect
        echo '<p>That\'s the wrong answer. <a href="login.html">Try again.</a></p>';
    } else {
        echo '<p>Welcome! That\'s the right answer.</p>';
    }

    ?>

</body>

</html>

这是一个相当简单的脚本。它检查提交给'妈妈'的内容。如果没有提交任何内容或者答案错误,则会显示“再试一次”消息。否则,会显示“欢迎”消息。

PHP逻辑(以及正确的答案)在Web浏览器中不可见。只会从服务器发送“再试一次”或“欢迎”消息。

这是在服务器端使用HTML表单的基础知识。我建议你阅读使用PHP的内容。这是一种简单有趣的语言(如果不优雅,在我看来)。您可以在这里学习基础知识:

要测试代码,您需要一台Web服务器。您可以从这里下载并安装带有PHP和MySQL(数据库)的完整Web服务器:

通过它,您可以在自己的计算机上开发测试服务器端代码。要测试上面的示例,请将上面的代码复制到两个名为login.htmlscript.php的文件中,并将它们放入WAMP的www目录中。

祝你好运!

答案 1 :(得分:0)

这是我设法提出的。在页面顶部,在<!DOCTYPE html>

之前插入此代码
<?php
//Check for existance of cookie from right answer
  if(isset($_COOKIE['parents'])){
    header("Location:q1.html");//Move on to next question
  }
//Checks answer
  if(array_key_exists("dad", $_POST) && array_key_exists('mom', $_POST)){
    $dad = $_POST["dad"];
    $mom = $_POST["mom"];
    $dcorrect = array("Dad", "dad");
    $mcorrect = array("Mom", "mom");
    if(in_array($dad, $dcorrect) && in_array($mom, $mcorrect)){
        setcookie('parents', '1' ,time()+60*60*24);
        header("Location: index.html");
    }else{
        $wrong="<div class='error'>Wrong answer</div>";
    }
}
?>

使用此HTML

<form action="index.html" method="post">
  <label>Enter your father's name:</label>
  <input required autocomplete="off" type="text" name="dad" placeholder="Bill">
  <label>Enter your mother's name:</label>
  <input required autocomplete="off" type="text" name="mom" placeholder="Billette">
  <input type="submit" value="Press me when you think you are right" />
  <?php echo $wrong; ?>

</form>