保持输入字段中的值 - php数组

时间:2014-04-29 19:30:52

标签: php arrays validation input

我有一个包含发布输入的php数组。它为每个数组记录使用一个计数器,这个计数器应用于用于对帖子执行某些操作的输入名称 - 这很有用。

问题在于,如果用户的帖子未通过验证,我希望保留用户现有的输入并重新填充数组中的输入字段。

我之前使用静态字段完成了这个操作,只需存储post变量并在“value”中回显它 - 但我在使用数组时无法弄清楚如何执行此操作。有人有什么想法吗?

$counter = 0;
echo "<form method='post'>";
echo "<table class='mainlist' width='680'>";
while ($row = mysqli_fetch_array($result)) {
    echo "<tr height='60'>";
    echo "<td class='mainlist'><input type=text name=options[$counter] autocomplete=off onclick='this.select()' class='txt'></td>";
    echo "</tr>";
    $counter = $counter + 1;
}
echo "</table>";

每个请求的完整代码:

<?php

if($_SERVER["REQUEST_METHOD"] == "POST")
{


$userid = $_SESSION['login_user'];
$companyid = $_POST['companyid'];
$options = $_POST['options'];
$counter = $_POST['hiddencounter'];
$runningtotal=0;

$totaloptions = array_sum($options);
$result = mysqli_query($connection, "SELECT options_balance FROM user_options_balance WHERE user_id = '".$userid."'");


    for ($i=0; $i<$counter; $i++)
    {

    if(empty($options[$i]))
    { /* IF NO INPUT ON OPTIONS */
    /* DO NOTHING */
    }
    else 
    {

        $checknewcompanies = mysqli_query($connection, "SELECT company_id FROM user_company_total_invested WHERE user_id = '".$userid."' and company_id = '" .$companyid[$i]."'");

        if($checknewcompanies->num_rows == 1)
        { // do nothing
        }
        else
        {
        $runningtotal = $runningtotal + 1;
        }


    } /* END OF ELSE IF NOT EMPTY OPTIONS */

    } /* END OF FOR LOOP */

    $checkcurrentcompanies = mysqli_query($connection, "SELECT company_id FROM user_company_total_invested WHERE user_id = '".$userid."'");
    $countcompanies = $checkcurrentcompanies->num_rows;


    $countcheck = $runningtotal + $countcompanies;

    if($countcheck <= 4)
    {
        while($row = mysqli_fetch_array($result))
        {
        $balance = $row['options_balance'];
        }

        if ($totaloptions>$balance) 
        {
        $notenoughoptions= "<div style='background-color:#FF0000; border-radius: 15px; padding: 10px; color: #FFFFFF; font-size: 12px;'>Oops! You don't have enough options!  Try investing less!</div>";
        }
        else
        {

            // loop through array

            for ($i=0; $i<$counter; $i++)
            {

                if(empty($options[$i])){ /* IF NO INPUT ON OPTIONS */
                /* DO NOTHING */
                }

                else {


                    if(!ctype_digit($options[$i]) or !is_numeric($options[$i])){
                    $charactercheck= "<div style='background-color:#FF0000; border-radius: 15px; padding: 10px; color: #FFFFFF; font-size: 12px;'>Oops! Please enter only positive numbers to invest!</div>";
                    }

                    else {


                    $checkcompanies = mysqli_query($connection, "SELECT company_id FROM company_main WHERE company_id = '".$companyid[$i]."'");

                        if($checkcompanies->num_rows != 1)
                        {
                        $companynotexist= "<div style='background-color:#FF0000; border-radius: 15px; padding: 10px; color: #FFFFFF; font-size: 12px;'>Oops!  That company doesn't exist!</div>";
                        }
                        else
                        {

                            // loop through array

                            for ($i=0; $i<$counter; $i++)
                            {

                                if(empty($options[$i]))
                                { /* IF NO INPUT ON OPTIONS */
                                /* DO NOTHING */
                                }
                                else 
                                {

                                $query = "INSERT INTO user_company_invested(user_id, company_id, user_company_options_invested)
                                VALUES($userid,$companyid[$i],$options[$i])";

                                mysqli_query($connection, $query);


                                } /* END OF ELSE IF NOT EMPTY OPTIONS */

                            } /* END OF FOR LOOP */

                        $balancecheck = mysqli_query($connection, "SELECT options_balance FROM user_options_balance WHERE user_id = '".$userid."'");
                        while($row = mysqli_fetch_array($balancecheck))
                        {
                        $balance2 = $row['options_balance'];
                        }

                        if($balance2 > 0)
                        {
                        header('Location: user_invest.php');
                        }
                        else
                        {
                        header('Location: user_market.php');
                        }



                        } // end company check
                    } //end character check
                } //end empty option check
            } //end loop
        } /* END OF NOT ENOUGH OPTIONS CHECK */
    }
    else
    {
    $toomanycompanies = "<div style='background-color:#FF0000; border-radius: 15px; padding: 10px; color: #FFFFFF; font-size: 12px;'>Oops!  You can invest in a maximum of 4 companies per week.  Please choose fewer companies, or invest more in some of your existing companies!</div>";
/*  echo "Maximum number of companies you can invest in is 4";
    echo "<br />";
    echo "Companies you already are invested in: ".$countcompanies;
    echo "<br />";
    echo "New companies you are trying to invest in: ".$runningtotal;
    echo "<br />";
    echo "Total: ".$countcheck;*/
    }

} /* END OF ISSET CHECK */
else 
{
}
?>


<?php

 $result = mysqli_query($connection,"SELECT * from company_main");

 $counter=0;

 echo "<form method='post'>";

 echo "<table class='mainlist' width='680'>";

 while($row = mysqli_fetch_array($result))
   {
   echo "<tr height='60'>";
   echo "<td class='mainlist' width=140 align='center'>" . "<img src='".$row['company_logo']."' width='40'/>" . "</td>";
   echo "<td class='mainlist' align='left' width=390 style='font-size: 15px;'>" . $row['company_name'] . "</td>";
   echo "<input type=hidden name=companyid[$counter] value=" . $row['company_id'] . " />";
   echo "<td class='mainlist'><input value='{$_POST['options[$counter]']}' type=text name=options[$counter] autocomplete=off onclick='this.select()' class='txt' style='    background-color: #FCFCFC; 
    border: solid 1px #CCCCCC; 
    font-size: 12px; 
    padding: 5px; 
    height: 20px;
    text-align: right;'></td>";
   echo "</tr>";
   $counter=$counter+1;  
   }
   echo "</table>";


echo "<input type='hidden' name='hiddencounter' value='$counter'>"; 
echo "
<table>
<tr>
<td width='630' height='50'></td>
<td align='right' width='60' style='color: #848580; font-size: 20px;'>Total: </td>
<td align='right' width='40' style='color: #94D90B; font-size: 20px; font-weight: bold; padding-right:20px;'><span id='sum'>0</span></td><td width='10'></td>
</tr><tr height='20px'></tr><tr>
<td width='570' align='center' style='color: #94D90B; font-size: 12px;'>";?>
<?php echo $notenoughoptions; ?>
<?php echo $charactercheck; ?>
<?php echo $toomanycompanies; ?>
<?php echo "
</td>
<td colspan='2' width='100' align='right'><input name='userinvestoptionsdynamic' type='submit' value='Invest!'></td><td width='10'></td>
</tr>
<tr height='20px'></tr>
</table>";
echo "</form>";



?>    

1 个答案:

答案 0 :(得分:0)

正确的语法是:

echo "{$arrayname($keyname)}";

因此,例如echo('value=' . $_POST['options'][$counter]);变为:

echo "value={$_POST['options'][$counter]}";