【问题标题】:Using session to return message only returns one message使用会话返回消息只返回一条消息
【发布时间】:2014-08-17 16:59:46
【问题描述】:

所以我有一个注册表单。一个是register.php,它是实际的形式。另一个是r.php,它处理它。所以我使用会话然后我将错误消息从r.php 发送到register.php。问题是由于某种原因我只能弄清楚如何显示 one

if($name === ''){
    $_SESSION['name_req'] = 'Make sure to enter a name';
    header('Location: register.php');
    exit();
}
elseif($name > 255){
    $_SESSION['name_len'] = 'Enter a shorter name';
    header('Location: register.php');
    exit()
}

这段代码基本上将消息发送到register.php 然后我用

显示错误
<?php echo isset($_SESSION['name_req']) ? $_SESSION['name_req'] : '';?>

问题是,如果我一次只显示一个错误,而我想一次显示所有错误。有任何想法吗?

【问题讨论】:

  • exit()之后的所有代码都不执行!
  • 那么如果我摆脱它,应该会好吗? @贝拉什
  • 如果没有手动编辑,只要浏览器窗口打开,会话变量就会持续存在。请务必在代码中的某处取消设置会话,否则如果没有错误,甚至可能会显示消息。
  • 可能是错字,但您的 $name 长度检查中缺少 strlen()
  • 我知道我正在使用&lt;?php unset($_SESSION['message']);?&gt; 取消设置@MarkNijboer

标签: php html mysql forms validation


【解决方案1】:
$sessionValue   = array();
$redirectTo     = "register.php";
if($name === '')
{
    $sessionValue[]       = 'Make sure to enter a name';
}
if($name > 255)
{
    $sessionValue[]       = 'Enter a shorter name';
}
$impSessionVal            = implode("|",$sessionValue);
if($impSessionVal!="")
{
    $_SESSION["errormsg"] = $impSessionVal;
    header("Location: $redirectTo");
    exit();
}

在显示错误时,使用 | 展开会话消息并获取个人消息。

【讨论】:

    【解决方案2】:

    仅使用您提供的代码,如果只发现一个错误,页面会重定向,请尝试以下操作:

    if(isset($_POST['submitbuttonname']) && $_POST['submitbuttonname'] == "submitbuttonvalue") {
        if($name === ''){
            $_SESSION['name_req'] = 'Make sure to enter a name';
        }
        if($name > 255){
            $_SESSION['name_len'] = 'Enter a shorter name';
        }
    
        header('Location: register.php');
        exit();
    }
    

    但如果您使用 javascript 提交表单,提交按钮将不起作用,您可以使用隐藏的输入,输入您想要的任何名称和值。

    【讨论】:

    • 您建议我如何检查表单是否已提交?
    • 如果提交按钮有名称,只需根据表单的方法检查 $_POST['name'] 或 $_GET['name']。我会更新答案。
    • 或者他可以使用if(!empty($_POST)) { 这意味着任何表单都已提交。注意:不适合多表单页面...
    • 这样的? if(isset($_POST['name']))
    • 那行得通,还要确保表单设置为发布而不是获取。您可以使用 $_request 来获取它,但最好使用 post 或 get 至少进行初始检查。
    猜你喜欢
    • 2016-09-24
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    相关资源
    最近更新 更多