Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

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



?>    
share|improve this question
add comment

1 Answer

up vote 0 down vote accepted

The correct syntax is:

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

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

echo "value={$_POST['options'][$counter]}";
share|improve this answer
    
thanks Jeroen - but how would I incorporate the post result... I'm thinking something like this but can't quite get it: value= ".$_POST['options[$counter]']." –  Lenny Apr 29 at 19:45
    
echo "value={$_POST[$options[$counter]]}"; ~ Untested but looks solid to me. –  Jeroen Bollen Apr 29 at 19:47
    
value='{$_POST[$options[$counter]]}' did not work :( –  Lenny Apr 29 at 19:54
    
@Lenny Is options a variable or string? If it's not a variable but a string try: echo "value={$_POST[options[$counter]]}"; –  Jeroen Bollen Apr 29 at 19:58
1  
this is what is not passing syntax, I can give you the full code but I'm not sure how to send it to you: echo "<td class='mainlist'><input value='{$_POST[options[$counter]]}' type=text name=options[$counter] autocomplete=off onclick='this.select()' class='txt'></td>"; –  Lenny Apr 29 at 20:05
show 11 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.