我正在尝试构建一个表单中提交的名称列表,但每次提交表单时都会重置我的变量。我读了一些看起来像隐藏变量会有所帮助的东西,但它不起作用。欢迎任何想法。我希望用户一次输入一个名字。我希望每次提交表单时都显示它们。很抱歉包含这么多代码,欢迎任何评论。
<?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;
好的,在看了昨天的帮助后,我正在增加更多内容。谢谢Dexter0015! 我最终使用Session工作。我仍然不明白为什么它不能用隐藏变量,但我确定我错过了一些简单的东西。
会话的一个问题是我保留的数据比我想要的更长。我需要为给定用户构建一个数组,一旦他们关闭窗口,我希望清除该数组。以下是我提出的工作:
$counter = (!empty($_POST['counter'])) ? $_POST['counter'] : 0;
//purge list the first time through
$guest_list = ($counter==0) ? "" : $_SESSION['guest_list'];
我定义了一个隐藏的计数器变量,以查看表单完成的次数。如果$ counter为0,我想清除数组。这似乎工作正常。
我在使用建议的方法时遇到了问题。 这些行产生以下错误: $ guests_list [] = $ new_guest; $ _SESSION ['guests_list'] = $ guests_list;
PHP致命错误:无法使用[]进行阅读...
但这不是一个大问题,b / c我不介意使用字符串并在php中构建html数组。我做到了: $ new_guest ='
我还有一个关于流程和处理的基本问题。当我设置一个要由php处理的表单时,看起来每次提交表单时都会运行整个php代码。有没有办法设置一些只在第一次设置页面时运行的初始化部分?
再次感谢您的帮助。
答案 0 :(得分:0)
您可以使用session来存储变量,并且如果要在其中存储多个名称,请使用数组而不是字符串。
以下是我如何组织代码:
<?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代码之前)而不是混合它(当然除了打印/回声部分)。
默认情况下,在显示的完全相同的网址上有一个空动作帖子的表单,所以不需要在这里使用$ _SERVER [&#39; PHP_SELF&#39;]。
如果var不存在,那么 php empty()函数已经返回true,所以你不需要检查isset() && !empty()