2017-08-23 4 views
1

When being saved to database, it iterates like this Le foreach ($ ac) continue d'itérer selon les cases cochées, quelqu'un peut-il m'aider s'il vous plaît c'est pour mon projet. Je pense qu'il y a quelque chose de mal avec ma logique sur le foreach mais je ne sais pas où c'est exacty. Veuillez déboguer ce quelqu'un. :))))))))))))))))))))))))))))))Le foreach continue à itérer en fonction du nombre de cases à cocher cliqué

<html> 

<body> 
    <div class="image"> 
      <img src="PLM1.png" alt="plmbackground" height="650" width="1351"/> 
      </div><br><br><br><br> 
    <form method = "post" class="content"> 
    <font size= '5px'>Student ID <input type="text" name = "student_id"> <br> 
     OR NO <input type = "text" name = "or_no"> <br> 
     </font> 
     <table align="center"> 
     <tr valign="middle" align="center"> 
      <td><font color="red"><b>REQUESTS</b></font> 
      <td><font color="red"><b>QUANTITY</b></font> 
     </tr> 
     <tr> 
      <td><input type = "checkbox"name = "ac_description[]" value = "Replacement_of_Registration"><b>Replacement of Registration</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
      <tr> 
      <td><input type = "checkbox"name = "ac_description[]" value = "Good Moral Certificate"><b>Good Moral Certificate</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     </tr> 
      <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "Honorable Dismissal "><b>Honorable Dismissal</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     </tr> 
      <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "Transcript of Record"><b>Transcript of Record</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "Diploma"><b>Diploma</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "CUE Request"><b>CUE Request</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "CMI Request"><b>CMI Request</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "Entrance Exam"><b>Entrance Exam</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "School fees-Medical/Dental Laboratory "><b>School fees-Medical/Dental Laboratory</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "School fees-Transcript/Honorable"><b>School fees-Transcript/Honorable</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "School fees-Library"><b>School fees-Library</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
     <tr> 
      <td><input type = "checkbox" name = "ac_description[]" value = "Affiliation Fees"><b>Affiliation Fees</b> 
      <td><center><input type="number" name="quantity[]" style="width:60px;"></center> 
     </tr> 
    </table> 
    <br> 

     <input type = "submit" name = "send" value = "Add" class="btn-5" > 
    </form> 


<?php 
//the database connection 
$db = mysqli_connect ("localhost", "root", "turtledove", "accounting"); 

     if (!$db) 
     { 
      die ("ERROR!!!!!!>>>"); 
     } 
     $student_id = $_POST["student_id"]; 
     $or_no = $_POST["or_no"]; 


     $status1="processing"; 
     $qty=1; 
     $col_credit = 80; 
     $dep_credit = 80; 
     $col_debit = 0; 
     $dep_debit = 0; 
     $quantity = $_POST["quantity"]; 
     $ac_description = $_POST["ac_description"]; 
     if (($quantity)&&($ac_description) ) 
     { 
       foreach ($quantity as $quantity) 
       { 
       foreach ($ac_description as $ac) 
       { 
       mysqli_query($db, "insert into or_header (or_no, ac_description, student_id, date1, status1, qty, 
       col_credit, col_debit, dep_credit, dep_debit) 
       values (".$or_no.",'".mysqli_real_escape_string($db,$ac)."', 
'".$student_id."',curdate(),'processing',".$quantity.",80,0,80,0)"); 
       } 
       } 


     } 

?> 
<form action="cashiermainpage.php"> 
      <input type="submit" method="POST" value="Mainpage" class="mainpage" alt="Submit"> 
      </form> 
</body> 
</html> 
+0

où est votre formulaire html? –

+1

À quel résultat vous attendez-vous? qu'est-ce que vous obtenez réellement? Que ressemblent réellement '$ _POST ['quantity']' et '$ _POST ['ac_description']' quand le problème survient. Il nous manque beaucoup pour vous aider – BeetleJuice

+0

Vous devez développer une déclaration de problème claire et l'inclure dans votre question. –

Répondre

1

Votre problème a été causé par vos foreach boucles imbriquées. Parce que quantity et ac_description sont deux tableaux, l'imbrication des boucles vous donne toutes les combinaisons, ce qui signifie que le même élément se produit plusieurs fois.

par exemple: si $a = [1,2] et $b = [3,4], des boucles de nidification vous donnera

foreach($a as $first){ 
    foreach($b as $second){ 
    echo "$first, $second"; // 1,3 1,4 2,3 2,4 
    } 
} 

Ce que vous devez faire est d'avoir la place d'une boucle qui capte le terme correspondant des deux tableaux

for($i=0, $limit=count($a); $i < $limit; $i++){ 
    echo $a[$i] . ', ' . $b[$i]; // 1,3 2,4 
} 

Donc Revenez à votre problème, vous pouvez le contourner avec quelque chose comme:

for($i=0, $limit=count($quantity); $i < $limit; $i++){ 
    $qty = $quantity[$i]; 
    $ac = $ac_description[$i]; 

    // now you can run your query with the $qty and its matching $ac 
} 

Remarque 1: Bien que cela fonctionne, notez que vous devez toujours éviter de faire des requêtes DB dans une boucle car elles ralentiront beaucoup votre script. Au lieu de cela, apprendre à faire multiple inserts in one query.

Note 2: Votre code est très vulnérable aux attaques par injection SQL, ce qui signifie qu'il serait facile pour quelqu'un de modifier, voler, supprimer etc ... votre base de données. En savoir plus sur prepared statements.

+0

ce code me donne une erreur Remarque: Offset non défini: 11, les valeurs de tableau qui est le $ i est indéfini –

+0

@JoanaClarizJacinto Cette erreur signifie que votre tableau de description est plus courte que votre tableau de quantité parce que «$ i» est basé sur le taille de '$ quantity'. Cela se produira si dans le HTML, il y a une entrée pour un champ de quantité, mais la case correspondante n'est pas cochée. Comment gérer cette situation dépend des exigences de votre application, donc je ne peux pas vous dire quoi faire à ce sujet. – BeetleJuice