0

I have the following form:

    <form action="done.php" method="POST">
<!-- This hidden check box is used to check if submit is clicked.-->
 <input type="hidden" name="check_submit" value="1" />
 <!--All the applications are added to an array which we can then use in done.php-->
<applications><h2>Applications</h2><br><table border="0" cellspacing="10" cellpadding="10">
<tr>
    <td><b>Application</b></td>
    <td><b>UK</b></td>
    <td><b>Spain</b></td>
    <td><b>France</b></td>
    <td><b>Benelux</b></td>
    <td><b>Germany</b></td>
    <td><b>Sweeden</b></td>
</tr>
<tr>
    <td>hey</td>
    <td><center><input type = "checkbox" name="hey[]" value ="heyuk"/></center></td>
        <td><center><input type = "checkbox" name="hey[]" value ="heyspain"/></center></td>
            <td><center><input type = "checkbox" name="hey[]" value ="heyfrance"/></center></td>
                <td><center><input type = "checkbox" name="hey[]" value ="heybenelux"/></center></td>
                    <td><center><input type = "checkbox" name="hey[]" value ="heygermany"/></center></td>
                        <td><center><input type = "checkbox" name="hey[]" value ="heysweeden"/></center></td>
</tr>

<input type="submit" value="Update">

</submitb>

</form>

Then my done.php receives the data when it is posted.

   <?php

 // First we execute our common code to connection to the database and start the session 
    require("common.php"); 


 //Check whether the form has been submitted
if (array_key_exists('check_submit', $_POST)) {
   //Converts the new line characters (\n) in the text area into HTML line breaks (the <br /> tag)
   if ( isset($_POST['hey']) ) { 
     $print = implode(', ', $_POST['hey']); //Converts an array into a single string
   echo $print;
    echo('<br>');
   }

So this all works perfectly up to now. However, I have a database called hey which looks as follows: So this all works perfectly up to now. However, I have a database called hey which looks as follows:

What I want to happen next is that if a country is selected for that application, it adds a 1 to the database in the relevant field.

I am unsure how to proceed with this as I can't guarantee currently what position in the array each element is in. Please could you advise me on this? Thank you.

Programatt
  • 786
  • 4
  • 11
  • 23

2 Answers2

2

I had the same problem while a go and I solve it as follows, I use PDO to Insert to database...

<td><center><input type = "checkbox" name="hey[0][UK]" value ="UK"/></center></td>
<td><center><input type = "checkbox" name="hey[0][SPAIN]" value ="SPAIN"/></center></td>
<td><center><input type = "checkbox" name="hey[0][FRANCE]" value ="FRANCE"/></center></td>
<td><center><input type = "checkbox" name="hey[0][BENELUX]" value ="BENELUX"/></center></td>
<td><center><input type = "checkbox" name="hey[0][GERMANY]" value ="GERMANY"/></center></td>
<td><center><input type = "checkbox" name="hey[0][SWEEDEN]" value ="SWEEDEN"/></center></td>

Then do the following on your query...

 $arr = $_POST["hey"];
        try {

            // depend on your server setting, you might need this to put it on.
           // $glb_connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

            //Loop through all row-value from the forms 
            foreach($arr as $key=>$value){

               if(count(array_filter($value)) >0){

               $data = array( 'UK' => $value['UK'], 'SPAIN' => $value['SPAIN'], 'FRANCE' => $value['FRANCE'], 'BENELUX' => $value['BENELUX'], 'GERMANY' => $value['GERMANY'], 'SWEEDEN' => $value['SWEEDEN'] );  
              $query = $glb_conn->prepare("INSERT INTO HEY (UK, SPAIN, FRANCE, BENELUX, GERMANY, SWEEDEN) VALUES (:UK, :SPAIN, :FRANCE, :BENELUX, :GERMANY, :SWEEDEN)");                           

               $query->bindValue(':UK', $value['UK']);
               $query->bindValue(':SPAIN', $value['SPAIN']);
               $query->bindValue(':FRANCE', $value['FRANCE']);  
               $query->bindValue(':BENELUX', $value['BENELUX']);                                      
               $query->bindValue(':GERMANY', $value['GERMANY']);                        
               $query->bindValue(':SWEEDEN', $value['SWEEDEN']);                        
               $query->execute($data); 
                }
            }

        } //end try
        catch(PDOException $e) {
            echo $e->getMessage();
        }

This should work like a charm, I have already test it.

MR.Internet
  • 547
  • 4
  • 19
0

Just assign country names as values of your checkboxes. When you post such form, as values you will get array of only selected countries(checkboxes), so later on you will have to only update apropriate columns. So your form checkobxes input should be declared like

<td><center><input type = "checkbox" name="hey[]" value ="SPAIN"/></center></td>

for spain etc.

$updateClause = ""; // this is the part betwean `SET` and `WHERE` ofc.
foreach($country as $hey){ // hey would be an array of selected country names.
    $updateClause.="$country = $country+1" // dont forget to add `,` or you will get SQL syntax error.
}

should be easy enought.

Antoniossss
  • 31,590
  • 6
  • 57
  • 99