Ik wil het vorige oefen script waarbij er 5 tabellen werden aangemaakt uitbreiden een aanpassen.

Ik wil nu 2 x 5 is 10 variabelen invoeren in de database.
Deze zitten in 2 rijen/reeksen en ze moeten tegelijk in de database.

Dit moet het utieindelijke resultaat worden

---------(tabel R1) ------ (Tabel R2)
record1 ------A----------------F
record2 ------B----------------G
record3 ------C----------------H
record4 ------D----------------I
record5 ------E----------------J



            $name_A = $_POST['name_A'];
			$name_B = $_POST['name_B'];
			
			
			$newvar2 = implode (", " , $name_A);
			$newvar3 = implode (", " , $name_B);
			
			
			foreach ($name_A as $newvar2) {
			
					
						
				$sql = "INSERT INTO table_name (name_A, name_B) VALUES ('$newvar2' , '$newvar3') ";
				
				if ($conn->query($sql) === TRUE) 
								{  // to be continued


Het probleem is dat foreach wel de eerste tabel goed en netje onder elkaar in MYSQl zet, maar de 2e als een gehel reeks invoert.

Is er een manier om meerdere variabelen te verwerken met foreach?

bijv.


foreach ( ($name_A as $newvar2) && ($name_B as $newvar3) )


werkt overigens niet maar zoiets mbv andere instructies.
met foreach dus waarbij je $key => $value gebruikt.

Wat lukt er niet?
Je kunt van de links een associatieve array maken, met $linkoms als de sleutel en $linkadd als de bijbehorende waarde.

<?php
$links = array(
    'wine'       => 'www.wine.com',
    'white wine' => 'www.whitewine.com',
    'red wine'   => 'www.redwine.com',
    'blue wine'  => 'www.bluewine.com',
    'beer wine'  => 'www.beerwine.com',
);

$sql = 'INSERT INTO tabelnaam (linkoms, linkadd) VALUES ';
foreach ($links as $linkoms => $linkadd) {
    $values[] = "('{$linkoms}', '{$linkadd}')";
}
$sql .= implode(',', $values);
?>

Daarmee krijg je (uitgeschreven) deze query:

INSERT INTO
  tabelnaam (linkoms, linkadd)
VALUES
  ('wine', 'www.wine.com'),
  ('white wine', 'www.whitewine.com'),
  ('red wine', 'www.redwine.com'),
  ('blue wine', 'www.bluewine.com'),
  ('beer wine', 'www.beerwine.com')

In de foreach moet je de waarden nog escapen met een functie of methode van de connectie (PDO, MySQLi of iets anders).
Wat is $value dan?

Als ik de database kolom primary key heb gemaakt is dit dan uniek voor de tabel of voor de gehele database?



<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>invoeren tekst</title>
        <link rel="prefetch" href="http://">
        <link rel=" stylesheet" type="text/css" href="stijlblad1.css" media="screen" />
    </head>	
	<body>
 <form action="BestandsNaam.php" method="post" accept-charset="UTF-8"><?php
for ($i=0; $i < 5; $i++) {
    ?><p>
        
		<label for="linkoms_<?php echo $i ?>">
		Link Naam <?php echo ($i + 1) ?>
		</label>
		<br>
        <input type="text" name="linkoms[]" 
		id="linkoms_<?php echo $i ?>" 
		value="" /> <br> 
		
		
		<label for="linkadd_<?php echo $i ?>">
		Link Adres <?php echo ($i + 1) ?>
		</label><br>
		 <input type="text" name="linkadd[]" 
		id="linkadd_<?php echo $i ?>" 
		value="" />
    
	</p><?php
}
?><p>
    <button type="submit">Opslaan</button>
</p>
</form>
</body>
</html>

<?php

	
$servername = "localhost";
$username = "jouwnaam";
$password = "jouwpasswoord";
$dbname = "jouwdatabase";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
	If (isset($_POST['linkoms']) && (is_array($_POST['linkoms'])) && ($linkoms = " ") && ($newvar2 = " ") && isset($_POST['linkadd']) 
			&& (is_array($_POST['linkadd'])) && ($linkadd = " ") && ($newvar3 = " ") && ($two_arrays = " ") && ($var_com = " ") && ($linknummer = ' ' )) {
			
			$linkoms = $_POST['linkoms'];
			$linkadd = $_POST['linkadd'];
			$newvar2 = implode (", " , $linkoms);
			$newvar3 = implode (", " , $linkadd);
			
			
$sql = "SELECT linknummer FROM tabel_name";

$result = $conn->query($sql);

 if ($result->num_rows > 0) { // 
     // output gegevens van iedere rij haalt de column linknummer uit de tabel 
     
	 while($rij = $result->fetch_assoc()) {
         
		 echo "linknummer :" . $rij["linknummer"] . "<br>";
		
		 foreach ($linknummer as $key => $newvar2){	
				$sql2 = "INSERT INTO tabel_name (linkoms) VALUES ('$newvar2') "; //
				
				if ($conn->query($sql2) === TRUE) 
								{ echo  $newvar2 ; 
									
							} else { 
			echo "Fout: " . " <br>" . $conn->error;
			}
			echo "<br>" . " zijn toegevoegd aan de database";
			} 
			$conn->close();  
			}
			
			
			// hier kan de 2e INSERT query voor linkadd / $newvar3
			
			
			
			}

 
 $conn->close();
			
			
			
		}
	else { echo "fout: de omschrijving 'linkoms' niet aanwezig of is geen array"; }
		
	
	
}

?>


Bovenstaand script loopt nu weer vast. De array die ik met implode in afzonderlijke elementen heb verdeeld kan op de 1 of andere manier niet gelezen worden.

ik mis geloof ik compleet waarom er nu data uit een tabel gevist wordt om invoer uit een form te inserten...

Ivo P op 17/06/2015 16:07:22

ik mis geloof ik compleet waarom er nu data uit een tabel gevist wordt om invoer uit een form te inserten...




Het lukt me niet om de linkoms en linkadd in 2 database kolommen op gelijke rijen te krijgen, mogelijk als het wel lukt met een primary key dan kun je deze gebruiken. Vandaar deze uit de tabel vissen.

Niet doen?

Wat is dan een optie?
Johan West op 17/06/2015 17:40:57

Het lukt me niet om de linkoms en linkadd in 2 database kolommen op gelijke rijen te krijgen,

Kan de insert niet in 1 query?
wat ik al eerder aangaf:

<?php

// zelf controle op bestaan van $_POST['linkoms'] em $_POST['linkadd'] doen

foreach($_POST['linkoms'] as $key => $dummy) {

$sql = "INSERT INTO tabel_naam (linkoms, linkadd) VALUES (
'". $conn->real_escape_string($_POST['linkoms'][$key]) ."',
'". $conn->real_escape_string($_POST['linkadd'][$key]) ."'
)";
if ($conn->query($sql) === TRUE)
{ echo $sql .'<br>';

} else {
echo "Fout: " . " <br>" . $conn->error;
}
echo "<br>" . " zijn toegevoegd aan de database";
}

}
?>

NB:
niet in je foreach-lus de verbinding sluiten

NB: misschien is een prepared statement ook wel handig hier.

Ik heb de code zojuist getest en het werkte. Ik heb nog regel 57 tot 61 verwijderd en de laatste accolade. :)

Toevoeging op 18/06/2015 09:17:46:

Ik zou graag nog wat uitleg ontvangen.

Er zitten instructies in die ik niet geheel begrijp.


$sql = "INSERT INTO tabel_naam (linkoms, linkadd) VALUES (
  '". $conn->real_escape_string($_POST['linkoms'][$key]) ."', 


hoe moet ik zoiets als -> zien? Betekent dat 'worden'?

Bij het wegschrijven van gegevens wordt regelmatig gebruik gemaakt van

$conn->query(sql) of $conn->close of $conn->connect_error

Maar php gebruikt soms ook bijv. $result->fetch_assoc.

Wat doet een programmeertaal op zo'n moment?

Reageren