PHP:希望在提交表单和重新加载自处理表单时保留一个持久变量

PHP:希望在提交表单和重新加载自处理表单时保留一个持久变量,php,mysql,forms,Php,Mysql,Forms,我正在使用PHP和MySQL创建一个训练记录器。按照我目前的设置方式,用户使用select来选择训练模板,该值将发布到表单页面。模板名称用于查询数据库中该模板中所有练习的名称以及每个练习的集数。名称和集合被放入并行数组中 调用一个函数来生成表单。一个元素用于模板名称(例如全身训练),一个元素用于运动名称(例如杠铃极限提升),另一个元素用于设置编号,带有一个标签/输入对,用于:重量、重复、休息和注释 exercise name变量的增量是$\u会话中的一个计数器,它在每次成功插入数据库后递增 我

我正在使用PHP和MySQL创建一个训练记录器。按照我目前的设置方式,用户使用select来选择训练模板,该值将发布到表单页面。模板名称用于查询数据库中该模板中所有练习的名称以及每个练习的集数。名称和集合被放入并行数组中

调用一个函数来生成表单。一个元素用于模板名称(例如全身训练),一个元素用于运动名称(例如杠铃极限提升),另一个元素用于设置编号,带有一个标签/输入对,用于:重量、重复、休息和注释

exercise name变量的增量是$\u会话中的一个计数器,它在每次成功插入数据库后递增

我的问题是关于逻辑方面的。如何在不将$\u会话变量重置回零的情况下增加它

 session_start();
//User
$user   = $_SESSION['email'];
$date   = date("Y-m-d");

//Get this script
$thisScript     = htmlentities($_SERVER['PHP_SELF']);

//This is the value I want to keep persistent
$_SESSION['nameCount'] = (int)0;
$nameCount = $_SESSION['nameCount'];

//Value from select
$template  = $_POST['mySelect'];
//Set log submit button
$logSubmit  = $_POST['logSubmit'];

//Check if user is signed in    
if ($user) {
   if ($template)  {
    require_once("include/connect2db.inc.php");
    require_once("include/htmlHead.inc");

    //Return query
    $result     = getResult($template); //Returns result of template
    $numRows    = getExerciseNum($result);
    $exerciseArray  = exerciseList($result, $numRows); //Returns set of exercises in template

    //For some reason, $result and $numRows is empty after being passed into $exerciseArray
    //Reinitialize  
    $result     = getResult($template);     //Returns result of template
    $numRows    = getExerciseNum($result);  //numRows
    $setsArray  = getSets($result, $numRows);   //Gets number of sets as array 

    //Reinitialize  
    $result     = getResult($template); //Returns result of template
    $numRows    = getExerciseNum($result);
    $exerciseIDArray = exerciseIDList($result, $numRows);

    //Build form
    buildLog($thisScript, $template, $exerciseArray, $setsArray, $numRows, $date, $nameCount, $exerciseIDArray);

    //Require Footer
    require_once("include/htmlFoot.inc");
    mysql_close();
   } else if (empty($template)){
    //Do something if template is empty    
    require_once("include/connect2db.inc.php");
    require_once("include/htmlHead.inc");

    echo "<p>Seems the template is empty</p>\n";
    echo "<p>Template = $template</p>\n";

    //Require Footer
    require_once("include/htmlFoot.inc");
    mysql_close();
   } //End if ($template)
} else if (!isset($user)) {
    //If user not logged in
    require("include/redirect.php");
}
session_start();
//使用者
$user=$\会话['email'];
$date=日期(“Y-m-d”);
//获取此脚本
$thisScript=htmlentities($_SERVER['PHP_SELF']);
//这是我想要保持持久性的值
$\会话['nameCount']=(int)0;
$nameCount=$\会话['nameCount'];
//选择值
$template=$_POST['mySelect'];
//设置日志提交按钮
$logSubmit=$_POST['logSubmit'];
//检查用户是否已登录
如果($user){
如果($模板){
需要一次(“include/connect2db.inc.php”);
要求一次(“包括/htmlHead.inc”);
//返回查询
$result=getResult($template);//返回模板的结果
$numRows=getExerciseNum($result);
$exerciseArray=exerciseList($result,$numRows);//返回模板中的练习集
//由于某些原因,$result和$numRows在传递到$exerciseArray后为空
//重新初始化
$result=getResult($template);//返回模板的结果
$numRows=getExerciseNum($result);//numRows
$setsArray=getSets($result,$numRows);//获取作为数组的集合数
//重新初始化
$result=getResult($template);//返回模板的结果
$numRows=getExerciseNum($result);
$exercisedArray=exercisedList($result,$numRows);
//构建形式
buildLog($thisScript、$template、$exerciseArray、$setsArray、$numRows、$date、$nameCount、$exercisedarray);
//需要页脚
要求一次(“包括/htmlFoot.inc”);
mysql_close();
}else if(空($template)){
//如果模板为空,请执行某些操作
需要一次(“include/connect2db.inc.php”);
要求一次(“包括/htmlHead.inc”);
echo“似乎模板是空的

\n”; echo“Template=$Template

\n”; //需要页脚 要求一次(“包括/htmlFoot.inc”); mysql_close(); }//如果($template)结束 }如果(!isset($user)){ //如果用户未登录 要求(“include/redirect.php”); }
以下是相关函数:Build log构建表单,并随附insert

//Build log form using query result and exercise name increment ($x)
function buildLog($thisScript, $template, $exerciseArray, $setsArray, $numRows, $date, $nameCount, $exerciseIDArray) {

$logSubmit  = $_POST['logSubmit'];

if (!isset($logSubmit)) {
    echo "<form action='$thisScript' method='POST' name='log' id='log'>\n";
    echo "<fieldset>\n";
    echo "<legend>$template</legend>\n";

    echo "<h2>$exerciseArray[$nameCount]</h2>\n";
    echo "<input type='hidden' name='exerciseArray[]' value='$exerciseArray[$nameCount]'/>\n";
    $j = 1;
    //Generate exercise form with loop
    for ($i=0; $i < $setsArray[$i]; $i++) {

        echo "<fieldset>";
        echo "<legend>Set $j</legend>\n";
//Use $template in a hidden value to work around issue of value being lost after submitting form
echo <<<BODYDOC
    <label>Weight</label>
    <input type="text" name="weight[]" required /> \n

    <label>Reps</label>
    <input type="number" name="reps[]" required /> \n

    <label>Rest Time</label>
    <input type="number" name="rest[]" required /> \n

    <label>Notes</label>
    <textarea name="notes[]"></textarea>
    <input type="hidden" name="set[]" value='$j' /> 
    <input type="hidden" name='mySelect' value='$template' />

</fieldset>
BODYDOC;
    $j++;
    } //End form for loop
echo "<br /><button type='submit' name='logSubmit'>Submit</button>\n";
echo "</fieldset>\n";
echo "</form>\n";
echo "<p><a href='newday.php'>Back</a></p>\n";

//Increment exerciseNameArray counter so next form dispays next exercise name
} //End if empty submit
if (isset($logSubmit)) {
    //POSTed
    $template   = $_POST['mySelect'];
    $set        = $_POST['set'];
    $weight     = $_POST['weight'];
    $reps       = $_POST['reps'];
    $rest       = $_POST['rest'];
    $notes      = $_POST['notes'];
    $user       = $_SESSION['email'];
    //Increment exercise name counter
    $nameCount++;
    //Update Log
    updateLog($user, $template, $exerciseArray, $set, $weight, $reps, $rest, $notes, $date, $nameCount, $exerciseIDArray);

} //End else if
} //End buildLog($template, $x) function

function updateLog($user, $template, $exerciseArray, $set, $weight, $reps, $rest, $notes, $date, $nameCount, $exerciseIDArray) {

    //Insert data with query
    $numRows = count($exerciseArray);

    //Insert user,exercise name, and date 
        $insert = "INSERT INTO stats_resistance
                   (user, exerciseName, date)
                   VALUES
                   ('$user','$exerciseArray[$nameCount]', '$date')" 
                   or
                   die(mysql_error());

        $result = mysql_query($insert)
        or
        die("<b>Query Failed</b><br>$insert<br>" . mysql_error());

    //Query for stat_ID
        $query = "SELECT statsID
              FROM stats_resistance
              WHERE user = '$user'
              AND exerciseName = '$exerciseArray[$nameCount]'
              AND date = '$date'";

        //Get result
        $result = mysql_query($query)
        or
        die("<b>Query Failed</b><br>$query<br>" . mysql_error());

        $statsID = mysql_fetch_object($result);
        $statsID = $statsID->statsID;
        //echo "statsID = " . $statsID;

    //Insert into resistanceSets with statsID as foreignKey
    //Can insert multiple value sets by including comma after set parentheses
            $insert =   "INSERT INTO resistanceSets
                     (statsID, exerciseID, setID, exerciseName, weight, numReps, rest, notes)
                     VALUES
                     ('$statsID', '$exerciseIDArray[$nameCount]', '$set[0]', '$exerciseArray[$nameCount]', '$weight[0]', '$reps[0]', '$rest[0]', '$notes[0]'),
                     ('$statsID', '$exerciseIDArray[$nameCount]', '$set[1]', '$exerciseArray[$nameCount]', '$weight[1]', '$reps[1]', '$rest[1]', '$notes[1]'),
                     ('$statsID', '$exerciseIDArray[$nameCount]', '$set[2]', '$exerciseArray[$nameCount]', '$weight[2]', '$reps[2]', '$rest[2]', '$notes[2]')";

            $result = mysql_query($insert)
            or
            die("<b>Query Failed</b><br>$insert<br>" . mysql_error());

//buildLog($thisScript, $template, $exerciseArray, $setsArray, $numRows, $date, $nameCount, $exerciseIDArray); 
} //End updateLog()
//使用查询结果和练习名增量($x)构建日志表单
函数构建日志($thisScript、$template、$exerciseArray、$setArray、$numRows、$date、$nameCount、$exercisedArray){
$logSubmit=$_POST['logSubmit'];
如果(!isset($logSubmit)){
回音“\n”;
回音“\n”;
回显“$template\n”;
回显“$exerciseArray[$nameCount]\n”;
回音“\n”;
$j=1;
//使用循环生成练习表
对于($i=0;$i<$setsArray[$i];$i++){
回声“;
回显“设置$j\n”;
//在隐藏值中使用$template可以解决提交表单后值丢失的问题
回波信号;
//echo“statsID=”.$statsID;
//将statsID作为外键插入电阻集
//可以通过在集合括号后加逗号插入多个值集合
$insert=“插入阻力集
(statsID、exerciseID、setID、exerciseName、重量、numReps、rest、notes)
价值观
(“$statsID”、“$exercisedArray[$nameCount]”、“$set[0]”、“$exerciseArray[$nameCount]”、“$weight[0]”、“$reps[0]”、“$rest[0]”、“$notes[0]”等),
(“$statsID”、“$exercisedArray[$nameCount]”、“$set[1]”、“$exerciseArray[$nameCount]”、“$weight[1]”、“$reps[1]”、“$rest[1]”、“$notes[1]”等),
(“$statsID”、“$exercisedArray[$nameCount]”、“$set[2]”、“$exerciseArray[$nameCount]”、“$weight[2]”、“$reps[2]”、“$rest[2]”、“$notes[2]”);
$result=mysql\u查询($insert)
或
die(“查询失败,$insert
”.mysql_error()); //buildLog($thisScript、$template、$exerciseArray、$setsArray、$numRows、$date、$nameCount、$exercisedarray); }//End updateLog()
只要确保变量已设置,然后像其他变量一样递增即可

if(isset($_SESSION['nameCount'])) {
    $_SESSION['nameCount']++;
}
或者,如果您已将会话变量的值设置为局部变量,则可以递增该局部变量并将该值重新分配给会话变量

$nameCount++;
$_SESSION['nameCount'] = $nameCount;

两者都将有相同的结果。

Test
isset($\u SESSION['namecont'])
,如果为true,则递增,如果为false,则初始化。警告:如果您只是在学习PHP,请不要使用该接口。它非常可怕和危险,在PHP 7中被删除。类似的替换和类似的指南解释了最佳实践。您的用户数据不存在,并且可以被利用。好的,它递增了,但在插入,它显示一个空白页。我如何返回表单页,meta=“refresh”或header(),而不必编辑我的包含文件?谢谢tadman。这是一个学校项目,在一个老式apache服务器上,我不打算使用它(至少这个版本)。阻止注入目前不是问题,但我确实计划在服务器升级后使用MySQLi或PDO。好的,进行一个小的后续操作。插入完成后,它将显示一个空白页,因为未设置任何显示