Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.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,通过多个表单提交保留变量_Php_Forms - Fatal编程技术网

php,通过多个表单提交保留变量

php,通过多个表单提交保留变量,php,forms,Php,Forms,我试图构建表单中提交的名称列表,但每次提交表单时,我的变量都会重置。我读了一些东西,让它看起来像隐藏变量会有所帮助,但它不起作用。欢迎任何意见。我希望用户一次输入一个名称。我想在每次提交表单时都显示它们。很抱歉包含这么多代码,欢迎发表评论 <?php // define variables and set to empty values $gname = ""; $counter = isset($_POST['counter']) ? $_POST['counter'] : 0; $g

我试图构建表单中提交的名称列表,但每次提交表单时,我的变量都会重置。我读了一些东西,让它看起来像隐藏变量会有所帮助,但它不起作用。欢迎任何意见。我希望用户一次输入一个名称。我想在每次提交表单时都显示它们。很抱歉包含这么多代码,欢迎发表评论

<?php
// define variables and set to empty values
$gname = "";

$counter = isset($_POST['counter']) ? $_POST['counter'] : 0;
$guestlist = isset($_POST['guestlist']) ? $_POST['guestlist'] : "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if(isset($_POST["submit"]))
    $counter++;
if( isset($_POST["paidflag"]) && !empty($_POST["paidflag"]) )
  $paidflag = test_input($_POST["paidflag"]);
else
  $paidflagErr = "Please select either Paid or Guest Pass";
if (empty($_POST["gname"])) {
  $gnameErr = "<b>Error: Enter a guest name before hitting 'Submit.'</b><br>";
}
else
 ....
}

<br><br>
 Enter guest name and click the button for Paid or Guest Pass.
<form id="form1" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<br>
<input type="radio" name="paidflag" value="Paid"> <b>Paid </b>
<input type="radio" name="paidflag" value="Guest Pass"> <b>Guest Pass</b>
<span class="error">* <?php echo $paidflagErr;?></span>
<br> <br>
 <b> Name:</b>  <input type="text" name="gname">
  <span class="error">* <?php echo $gnameErr;?></span>
<br>
  <input type="submit" name="submit" value="Submit">
  <input type = "hidden" name = "counter" value = "<?php print $counter; ?>"; />
  <input type = "hidden" name = "guestlist" value = "<?php echo htmlspecialchars($guestlist); ?>"; />
</form>


<?php

if( (!$gnameErr) && ( $paidflag == "Paid" || $paidflag == "Guest Pass")) {

 $vc++;
 if($counter>0) {

 $gl2 = $gname . ", " . $paidflag . "<br>";
 $guestlist .= $gl2;

 echo "<br>Guest checked in today: <br>" .  $guestlist;
我定义了一个隐藏的计数器变量来查看表单完成了多少次。如果$counter为0,我想清除数组。这似乎很有效

我在使用建议的阵列方法时遇到问题。 这些行产生了以下错误: $guests\u list[]=$new\u guest; $\u会话['guests\u list']=$guests\u list

PHP致命错误:无法使用[]在中读取

但是这不是一个大问题,b/c我不介意使用字符串并在php中构建html数组。我这样做是因为: $new_guest='
  • '$","啃",$佩德弗拉格。”'; $guest\u list.=$new\u guest

    我还有一个关于流程和处理的基本问题。当我设置一个要由php处理的表单时,看起来每次提交表单时整个php代码都会运行。有没有办法设置一些只在第一次设置页面时运行的初始化部分


    再次感谢您的帮助。

    您可以使用会话来存储变量,如果您想在其中存储多个名称,请使用数组而不是字符串

    以下是我将如何组织代码:

    <?php
    // 1 - Init session: needs to be first thing in your code
    session_start();
    
    // Init variable from session or null if doesn't exist
    $guests_list = (!empty($_SESSION['guest_list']))? $_SESSION['guest_list'] : array();
    $counter = (!empty($_POST['counter']))? (int)$_POST['counter'] : 0;
    
    // 2 - When you handle your form (if it is posted) : add entry to variable, then update it in session
    if (!empty($_POST['submit']))   {
        // 2.1 - do needed traitments relative to form
        if(!empty($_POST['paidflag'])) {
            $paidflag = tes_input($_POST['paidflag']);  
        }
        else {
            $paidflagErr = "Pleas select either Paid or Guest Pass";
        }
    
        if(!empty($_POST['gname'])) {
            $gname = filter_var($_POST['gname'], FILTER_SANITAZE_STRING)
        }
        else {
             $gnameErr = "<b>Error: Enter a guest name before hitting 'Submit.'</b><br>";
        }
        //...
        // Don't forget to set $new_guest var
        $new_guest = $gname . ', ' . $paidflag;
    
        // 2.2 - Update $guests_list and session.
        $guests_list[] = $new_guest;
        $_SESSION['guests_list'] = $guests_list;
    }
    ?>
    
    
    
    要在$gname变量中显示所有现有值,只需在其上循环即可 例如:

    <p>Existing names:</p>
    <ul>
    <?php
    for($guests_list as $entity) {
        echo '<li>' . $entity . '</li>';
    }
    ?>
    </ul>
    
    现有名称:

    改进代码的一些技巧:

    服务器将: 1-执行PHP代码 2-然后生成并返回HTML

    因此,将所有PHP代码放在同一个位置(例如,在编写html代码之前),而不是混合使用(当然,打印/回送部分除外)

    默认情况下,在显示的url上有一个空操作帖子的表单,因此不需要在此处使用$\u SERVER['PHP\u SELF']


    如果var不存在,php empty()函数已经返回true,因此您无需在$\u POST上检查
    isset()&&&&!empty()

    创建会话或创建隐藏输入值保留该值并将其分配给下一页表单中的隐藏值“谢谢。我不太明白。我想这就是我在做的:你能发布完整代码的实际状态吗?谢谢。我想我会的,但是我对php还不够了解,所以我不知道如何在我的表单中添加内容。好吧,我没有意识到我不能在这个框中输入return。我是否将表单输入字段更改为$new_guest?如:Name:这看起来像是在保存$gname,(这里:$\u SESSION['gname']=$gname;),但是我们如何将数据获取到“new\u guest”中,以及如何在表单提交之间保存guest\u list[]呢?很抱歉,我第一次想到您使用$gname来存储来宾列表,然后意识到我的错误。我在发布之前更新了我的信息,但显然我把它弄糟了。我将编辑我的回复,使其更易于理解。好的,这非常有用。多谢。我没法跟踪每件事,但我有事情要做。下面我将进一步解释,并提出另一个问题。
    <p>Existing names:</p>
    <ul>
    <?php
    for($guests_list as $entity) {
        echo '<li>' . $entity . '</li>';
    }
    ?>
    </ul>