【问题标题】:How do I pass a session variable correctly?如何正确传递会话变量?
【发布时间】:2014-06-03 02:38:40
【问题描述】:

我真的是 PHP 新手,我正在尝试使用这个问题中提到的简单验证码 Numeric Captcha for PHP

我要做的是将$_SESSION['captcha'] 传递到我的当前页面,以便它可以与我刚刚输入的应该通过“表单”传递的输入进行比较。

这是我的代码:

<?php 
    if(isset($_POST['captcha'] ,$_SESSION['captcha'])) {
        if ($_POST['captcha'] == $_SESSION['captcha'])
            echo 'YES, YOU DID IT';
    }
?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>captcha test</title>
</head>

<body>

<form name="input" action="index.php" method="POST">
<img src="captcha.php">
Enter the code above: <input type="text" name="captcha">
<input type="submit" value="Submit">
</form>


</body>
</html>

这样做的正确方法是什么?如何在当前代码中实现验证码?

【问题讨论】:

  • 那你为什么不复制完整的例子呢?
  • @mario:我复制的,第一部分代码在captcha.php中

标签: php variables session


【解决方案1】:

这里修复了一些问题:

  • 首先,您没有使用session_start() 来实际检索$_SESSION 值。在此处添加。
  • 接下来,您应该使用!empty()isset() 来检查值是否不为空。也在这里添加。
  • 最后,我建议您使用=== 比较运算符而不是==== 将检查值是否相同,=== 将检查它们是否相同且数据类型相同。

这是清理后的代码:

<?php 

    session_start();
    if (isset($_POST['captcha'], $_SESSION['captcha']) &&
        !empty($_POST['captcha']) && !empty($_SESSION['captcha'])) {
            if ($_POST['captcha'] === $_SESSION['captcha']) {
              echo 'YES, YOU DID IT';
            }
    }
?>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>captcha test</title>
</head>

<body>

<form name="input" action="index.php" method="POST">
<img src="captcha.php">
Enter the code above: <input type="text" name="captcha">
<input type="submit" value="Submit">
</form>


</body>
</html>

如果这仍然对您不起作用,您可以像这样转储 $_POST$_SESSION 的值,看看您得到了什么:

echo '<pre>';
print_r($_POST);
echo '</pre>';

echo '<pre>';
print_r($_SESSION);
echo '</pre>';

【讨论】:

  • isset() 检查是多余的。 !empty($var) 类似于 isset($var) &amp;&amp; $var — 你不需要两者。
  • 感谢您的修复,但我仍然无法在屏幕上打印“你做到了”的消息。奇怪
  • @AmalMurali 足够公平,但由于原始海报已经到位,所以会保留它。
  • @JakeGould:我想我找到了问题,$_SESSION 数组每次输入新值时都不会改变,如何刷新它的值以使其与验证码值相同由 captcha.php 生成。
  • @JakeGould:我不小心删除了captcha.php开头的“start_session()”,导致$_SESSION的问题没有刷新,还有一个问题是我无法获取msg是因为我使用的字体与原作者使用的字体不同,导致数字图像中的一个数字被剪掉了。这就是为什么我无法获得正确的验证码值(总是短 1 位)。感谢您的帮助。
【解决方案2】:

您没有在第一行添加session_start(),因此$_SESSION 为空。

旁注:

  • 您混淆了 XHTML 和 HTML。 HTML 不需要xmlns
  • DOCTYPE 丢失

【讨论】:

    【解决方案3】:

    你需要开始你的会话

    session_start();
    

    作为脚本有任何输出之前的第一次调用。

    查看文档:http://php.net/manual/en/function.session-start.php

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-09
      • 2011-06-12
      • 2013-08-11
      相关资源
      最近更新 更多