Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\会话变量和AJAX表单-变量更新问题_Php_Ajax_Session_Session Variables - Fatal编程技术网

Php $\会话变量和AJAX表单-变量更新问题

Php $\会话变量和AJAX表单-变量更新问题,php,ajax,session,session-variables,Php,Ajax,Session,Session Variables,我四处搜索,找不到这个具体问题的答案。我有一个作为RSVP表单使用的联系人表单,我基于本教程: 该表单上的操作将转到一个PHP脚本,该脚本将数据写入数据库并发送一些电子邮件。这是通过AJAX实现的。数据库交互和电子邮件工作得很好 我正在使用$\u会话在数据发布后将变量带回表单,以便检查错误并使用条件。问题是,这个会话数据似乎只有在我第二次点击提交按钮时才可用 我会尽量简明扼要地解释这个问题: 我从下拉菜单中为rsvp选择一个值,然后按submit。当我测试它时,存储在$\u会话变量中的该选择中的

我四处搜索,找不到这个具体问题的答案。我有一个作为RSVP表单使用的联系人表单,我基于本教程:

该表单上的操作将转到一个PHP脚本,该脚本将数据写入数据库并发送一些电子邮件。这是通过AJAX实现的。数据库交互和电子邮件工作得很好

我正在使用$\u会话在数据发布后将变量带回表单,以便检查错误并使用条件。问题是,这个会话数据似乎只有在我第二次点击提交按钮时才可用

我会尽量简明扼要地解释这个问题:

我从下拉菜单中为rsvp选择一个值,然后按submit。当我测试它时,存储在$\u会话变量中的该选择中的值不会回显。 我从同一下拉菜单中选择不同的值,然后再次按submit。第一个值从$\u会话变量回显。 这是我的submit.php文件。我遗漏了很多,但我认为这是重要的东西:

<?php session_start(); ?>
<?php require_once("includes/connection.php"); ?>
<?php require_once("includes/functions.php"); ?>
<?php
if(isset($_POST)) {
    //form validation vars
    $formok = true;
    $errors = array();  
    //sumbission data
    $ipaddress = $_SERVER['REMOTE_ADDR'];
    $date = date('Y-m-d');
    $time = date('H:i:s');
    $timestamp = $date . " " . $time;   
    //form data
    $firstname = mysql_prep($_POST['firstname']);
    $lastname = mysql_prep($_POST['lastname']);
    $dinner = mysql_prep($_POST['dinner']);
    $reqsong = mysql_prep($_POST['reqsong']);
    $email = mysql_prep($_POST['email']);
    $rsvp = mysql_prep($_POST['rsvp']);
    $message = mysql_prep($_POST['message']);
    //what we need to return back to our form
    $returndata = array(
        'posted_form_data' => array(
            'firstname' => $firstname,
            'lastname' => $lastname,
            'dinner' => $dinner,
            'reqsong' => $reqsong,
            'email' => $email,
            'rsvp' => $rsvp,
            'message' => $message
        ),
        'form_ok' => $formok,
        'errors' => $errors
     );  
下面是我的rsvp.php表单:

<?php session_start(); ?>
<div id="contact-form" class="clearfix">            
            <?php
                //init variables
                $cf = array();
                $sr = false;            
                if(isset($_SESSION['cf_returndata'])){
                    $cf = $_SESSION['cf_returndata'];
                    $sr = true;
                }
            ?>
        <ul id="errors" class="<?php echo ($sr && !$cf['form_ok']) ? 'visible' : ''; ?>">
            <li id="info">There were some problems with your form submission:</li>
            <?php 
            if(isset($cf['errors']) && count($cf['errors']) > 0) :
                foreach($cf['errors'] as $error) :
            ?>
            <li><?php echo $error ?></li>
            <?php
                endforeach;
            endif;
            ?>
        </ul>
   <?php if($cf['posted_form_data']['rsvp'] == "Will Attend"): ?>
            <p id="success" class="<?php echo ($sr && $cf['form_ok']) ? 'visible' : ''; ?>">Thank you for your RSVP! <br> You will receive an email with additional information soon. <br><br> If your invitation was addressed to more than one person, please enter their information and submit again. <br><br> We look forward to seeing you soon!</p>
        <?php endif; ?>
        <?php if($cf['posted_form_data']['rsvp'] == "Will Not Attend"): ?>
            <p id="success" class="<?php echo ($sr && $cf['form_ok']) ? 'visible' : ''; ?>">Too bad you can't make it.</p>
        <?php endif; ?>
        <form method="post" action="submit.php">
            <input type="text" id="firstname" name="firstname" value="<?php echo ($sr && !$cf['form_ok']) ? $cf['firstname'] : '' ?>" placeholder="First Name" required autofocus />
            <input type="text" id="lastname" name="lastname" value="<?php echo ($sr && !$cf['form_ok']) ? $cf['lastname'] : '' ?>" placeholder="Last Name" required autofocus />
            <input type="email" id="email" name="email" value="<?php echo ($sr && !$cf['form_ok']) ? $cf['email'] : '' ?>" placeholder="Email Address" required />          
            <select id="rsvp" name="rsvp">
                <option value="Will Attend">Will Attend</option>
                <option value="Will Not Attend">Will Not Attend</option>
            </select>
            <select id="dinner" name="dinner">
                <option value="select">Dinner Selection</option>
                <option value="Chicken" <?php echo ($sr && !$cf['form_ok'] && $cf['posted_form_data']['dinner'] == 'Chicken') ? "selected='selected'" : '' ?>>Chicken</option>
                <option value="Pork" <?php echo ($sr && !$cf['form_ok'] && $cf['posted_form_data']['dinner'] == 'Pork Fillet') ? "selected='selected'" : '' ?>>Pork</option>
            </select>                
            <input type="reqsong" id="reqsong" name="reqsong" value="<?php echo ($sr && !$cf['form_ok']) ? $cf['posted_form_data']['reqsong'] : '' ?>" placeholder="Request a Song to be Played!"/>
            <textarea id="message" name="message" placeholder="Leave us a message if you like! If you have any allergies or dietary needs, please indicate them here."><?php echo ($sr && !$cf['form_ok']) ? $cf['posted_form_data']['message'] : '' ?></textarea>                
            <span id="loading"></span>
            <input type="submit" value="Submit" id="submit-button" />
        </form>
        <?php unset($_SESSION['cf_returndata']); ?>
    </div>

很抱歉这里的代码太多。如果您有任何想法,我们将不胜感激。谢谢

您假设总是得到一个发布的值,但情况并非总是如此

确保检查实际发布的内容:

$firstname = isset($_POST['firstname']) ? $_POST['firstname'] : false;
$lastname = isset($_POST['lastname']) ? $_POST['lastname'] : false;
// And so on.
现在,您可以这样做:

$noLastname = "Last name not found.";
if(!($name)){ $_SESSION['errorMessage'] .= $noLastname; }else{ $_SESSION['lastname'] = $lastname; }
因此,我认为通过构造数组,您的代码过于复杂,只需处理单个会话,您可能会在其中存储一些空值,这是毫无意义的

您可以如何使用它的示例:

<input type="text" id="firstname" name="firstname" value="<?php if(isset($_SESSION['firstname'])){echo $_SESSION['firstname'];}else{echo '';}?>" placeholder="First Name" required autofocus />

终止数组,确保您实际使用的是现有的数据,等等。你会看到光明的。

谢谢你的建议。我实现了它们,但问题仍然存在。这个特定的问题更像是会话数据何时可用的问题。例如,当我做一个测试用例并简单地尝试回显会话变量中存储的值时,直到我刷新页面,我才能看到回显的值。在我提交表格后,是否有其他途径可以立即访问它?提醒-它使用AJAX提交。