会话未传递给process.php

时间:2015-06-26 11:51:23

标签: javascript php validation session-variables

我看过类似的问题,但似乎没有人回答我正在寻找的问题。 验证脚本无法识别输入字段 - 因此会话未被传递。

代码如下:

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的新手(如你所见),所以非常感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

您必须为会话设置数组

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

问候/ SAQ

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

使用了下面的处理方法:

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;
}

}