【问题标题】:session not being passed to process.php会话未传递给 process.php
【发布时间】:2015-09-13 08:49:18
【问题描述】:

我看过类似的问题,但似乎没有一个回答我正在寻找的东西。 验证脚本无法识别输入字段 - 会话未通过。

代码如下:

var data = {};
$(document).ready(function() {
$('input[type="submit"]').on('click', function() {
    resetErrors();
    var url = 'process.php';
    $.each($('form input, form select'), function(i, v) {
        if (v.type !== 'submit') {
            data[v.name] = v.value;
        }
    }); //end each
    $.ajax({
        dataType: 'json',
        type: 'POST',
        url: url,
        data: data,
        success: function(resp) {
            if (resp === true) {
                    //successful validation
                    $('form').submit();
                    return false;
            } else { 
                $.each(resp, function(i, v) {
            console.log(i + " => " + v); // view in console for error messages 
                    var msg = '<label class="error" for="'+i+'">'+v+'</label>';
                    $('input[name="' + i + '"], select[name="' + i + '"]').addClass('inputTxtError').after(msg);
                });
                var keys = Object.keys(resp);
                $('input[name="'+keys[0]+'"]').focus();
            }
            return false;
        },
        error: function() {
            console.log('there was a problem checking the fields');
        }
    });
    return false;
});
});
function resetErrors() {
$('form input, form select').removeClass('inputTxtError');
$('label.error').remove();
}

html表单:

<form  action="process.php" method="post" >
<label>First Name</label> 
<input name="first_name" type="text"  />
<label>Email</label> 
<input name="email" type="text"  />
<input type="submit" value="Submit" />

</form>
session_start() at top of page.

Process.php 代码:

session_start();
if(isset($_POST)){
if (empty($_POST['first_name'])) {
    $_SESSION['errors']['first_name'] = 'name is missing'; 
        }
if (empty($_POST['email'])) {
    $_SESSION['errors']['email'] = 'mail is missing'; 
        }

    if(count($_SESSION['errors']) > 0){
    //This is for ajax requests:
        if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&  strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
            echo json_encode($_SESSION['errors']);
            exit;
         }
    //This is when Javascript is turned off:
       echo '<ul>'; 
       foreach($_SESSION['errors'] as $key => $value){
      echo '<li>' . $value . '</li>';
       }
       echo '</ul>';exit;
}else{
//form validation successful - process data here!!!!
  }
}

我是 AJAX 新手(如您所见),因此非常感谢任何帮助。

【问题讨论】:

    标签: javascript php validation session-variables


    【解决方案1】:

    你必须为会话设置数组,

    if(isset($_POST)){
      $_SESSION['errors'] = array();
        if(empty($post['first_name']))
        {
            $_SESSION['errors'][] = "First name cannot be blank.";
        }
          ....
     }
    

    问候 /SAQ

    【讨论】:

      【解决方案2】:

      您需要在调用session_start(); 之后将以下代码添加到Process.php 的顶部,以便清除$_SESSION['errors'] 数组中的先前值:

      $_SESSION['errors']=Array();

      【讨论】:

        【解决方案3】:

        使用了以下方法:

        function validate()
        {
        
        var error="";
        var name = document.getElementById( "first-name" );
        if( name.value == "" )
        {
        error = " Please enter your first name. ";
        document.getElementById( "error_para" ).innerHTML = error;
        return false;
        }
        var name = document.getElementById( "surname" );
        if( name.value == "" )
        {
        error = " Please enter your surname. ";
        document.getElementById( "error_para" ).innerHTML = error;
        return false;
        }
        var name = document.getElementById( "address1" );
        if( name.value == "" )
        {
        error = " Please enter your address. ";
        document.getElementById( "error_para" ).innerHTML = error;
        return false;
        }
        var name = document.getElementById( "city" );
        if( name.value == "" )
        {
        error = " We require your city too. ";
        document.getElementById( "error_para" ).innerHTML = error;
        return false;
        }
        var name = document.getElementById( "postcode" );
        if( name.value == "" )
        {
        error = "Please enter your postcode ";
        document.getElementById( "error_para" ).innerHTML = error;
        return false;
        }
        var name = document.getElementById( "phone" );
        if( name.value == "" )
        {
        error = " Please enter your contact phone number. ";
        document.getElementById( "error_para" ).innerHTML = error;
        return false;
        }
        
        
        else
        {
        return true;
        }
        
        }
        

        【讨论】:

        • 这话真奇怪。由于我自己找到了答案,礼貌的做法是感谢人们的意见并发布我的解决方案。
        • 抱歉,我的评价很差。已删除评论。
        • 非常感谢
        猜你喜欢
        • 2017-10-26
        • 2018-05-09
        • 2020-07-19
        • 2011-07-24
        • 2012-06-02
        • 2023-04-03
        • 2018-07-11
        • 2023-03-29
        • 1970-01-01
        相关资源
        最近更新 更多