Kan iemand mij het misschien uitleggen? Want ik snap het echt niet.
Ik heb een formulier met een listbox en ik wil met item uit de listbox een insert in de database maken.

Maar wanneer mijn Listbox bijvoorbeeld 3 personen bevat wordt de laatste dubbel geplaatst. Dat geld ook als het er 4,5,6 en zelfs 1 zijn.

Eerst heb ik een paar formulier checks en dan kom ik hier:


<?php
// Voorkom SQL Injection
			$PostClannaam = mysqli_real_escape_string($conn, $_POST['clannaam']);
			$PostLand = mysqli_real_escape_string($conn, $_POST['land']);
			
			// Maak war aan in database
			$SQLInsertWar = "INSERT INTO war (naam, land, datum)
							 VALUES ('" . $PostClannaam . "', '" . $PostLand . "', '" . $newdate . "')";
								
			// Controleer of insert is gelukt
			if ($conn->query($SQLInsertWar) === FALSE) {
									
				echo "<div class='error'>MySQL Error!! GVD @#$!!!</div>"; 
									
			} else {
				
				// Plaats warid in variable
				$warid = $conn->insert_id;
				
				// Haal alle gekozen warleden op van formulier
				$list2 = $_POST['list2'];
				foreach($list2 as $gebruikersnaam)
				{

					// Plaats warleden in database
					$SQLInsertWarLeden = "INSERT INTO warstats (warid, gebruikersnaam)
										  VALUES ('" . $warid . "', '" . $gebruikersnaam . "')";
					$conn->query($SQLInsertWarLeden);
					
				}
				
				// Controleer of insert is gelukt
				if ($conn->query($SQLInsertWarLeden) === FALSE) {
											
					echo "<div class='error'>MySQL Error 2!! GVD @#$!!!</div>"; 
											
				} else {
					
					// Haal de aangemaakte warleden op
					$SQLSelectLeden = "SELECT warid, gebruikersnaam
								FROM warstats
								WHERE warid = '" . $warid . "'";
					$ResultWarLeden = $conn->query($SQLSelectLeden);
					
					// Laat de aangemaakte warleden zien
					while($row = $ResultWarLeden->fetch_assoc()) {
						echo "gebruikersnaam: " . $row["gebruikersnaam"]. "<br>";
					}
											
				}
				
			}
?>
Thomas van den Heuvel op 01/10/2015 17:24:00

Maar volgens mij heb ik nog geen oplossing gehoord om die dubbele insert te voorkomen?

Ben van Velzen noemde de oorzaak al: je voert op regel 33 nogmaals de query uit van de laatste iteratie van de foreach-lus van regel 22-30.

In het zelfde antwoord geeft hij tevens aan hoe je dit op moet lossen.

Ohja, daar heb ik denk ik overheen gelezen.
Via een break;


Het is gelukt!

<?php
// Haal alle gekozen warleden op van formulier
					$list2 = $_POST['list2'];
					foreach($list2 as $gebruikersnaam)
					{

						// Plaats warleden in database
						$SQLInsertWarLeden = "INSERT INTO warstats (warid, gebruikersnaam)
											  VALUES ('" . $_SESSION['warid'] . "', '" . $gebruikersnaam . "')";
						if ($conn->query($SQLInsertWarLeden) === FALSE) {
							
							echo "<div class='error'>MySQL Error 2!! GVD @#$!!!</div>"; 
							break;
							
						}
						
					}
?>

Reageren