Question

I have a php array that includes inputs for posting. It uses a counter for each array record, and this counter is applied to the name of the input to be used in performing some actions with the post - this is working great.

The issue is that I would like to keep the users' existing inputs and re-populate the input fields in the array if their post doesn't pass validation.

I have done this before with static fields, simply storing the post variable and echoing it in the "value" --- but I can't figure out how to do this when working with an array. Anyone have any ideas?

$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>";

Full code per request:

<?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>";



?>    
Was it helpful?

Solution

The correct syntax is:

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

So for example echo('value=' . $_POST['options'][$counter]); becomes:

echo "value={$_POST['options'][$counter]}";
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top