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.
<?php
foreach ($name_A as $key => $dummy) {

echo $name_A[$key] . ' x '. $name_B[$key];

}

?>
Ivo P op 09/06/2015 14:57:23

<?php
foreach ($name_A as $key => $dummy) {

echo $name_A[$key] . ' x '. $name_B[$key];

}

?>


hoe moet ik dit zien? Ik probeer te begrijpen hoe foreach deze array verwerkt.

is het als volgt:

als $name_A het sleutelnummer 0 is dan wordt $dummy uitgelezen

Is dat de juiste interpretatie?




nee,

$a[0] = 10;
$a[1] = 20;
$a[4] = 'aa';

foreach($a as $key => $value)

De eerste ronde zal $key de waarde 0 hebben en $value 10
daarna wordt $key 1 en $value 20.

bij de derde ronde heb ik $key = 4 en $value = 'aa'

merk op dat in dit geval de waarde 3 voor $key niet optreedt.

---
in jouw geval zal $key gewoon oplopen van 0 tot iets.

De waarde doe ik niets mee, vandaar dat ik $dummy gebruikt heb.
Je kunt ook doen:

<?php
foreach ($name_A as $key => $value) {

echo $value . ' x '. $name_B[$key];

}

?>

maar dan is minder duidelijk dat $key te gebruiken is om een element in beide array's aan te wijzen






$newvar2 = implode (", " , $name_A);
$newvar3 = implode (", " , $name_B);
            
            
foreach ($name_A as $newvar2) {


Vermoed dat het probleem zit in het feit dat je in je foreach $newvar2 overschrijft
Jacco Engel op 10/06/2015 11:28:10


$newvar2 = implode (", " , $name_A);
$newvar3 = implode (", " , $name_B);
            
            
foreach ($name_A as $newvar2) {


Vermoed dat het probleem zit in het feit dat je in je foreach $newvar2 overschrijft




De console output ziet er als volgt uit op dit moment:



mysql>
mysql>
mysql>
mysql>
mysql> SELECT * FROM wine;
+------------+----------------------------------------------------------------------------------+
| linkoms | linkadd |
+------------+----------------------------------------------------------------------------------+
| wine | www.wine.com, www.whitewine.com, www.redwine.com, www.bluewine.com, www.beerwine |
| white wine | www.wine.com, www.whitewine.com, www.redwine.com, www.bluewine.com, www.beerwine |
| red wine | www.wine.com, www.whitewine.com, www.redwine.com, www.bluewine.com, www.beerwine |
| blue wine | www.wine.com, www.whitewine.com, www.redwine.com, www.bluewine.com, www.beerwine |
| beerwine | www.wine.com, www.whitewine.com, www.redwine.com, www.bluewine.com, www.beerwine |
+------------+----------------------------------------------------------------------------------+
5 rows in set (0.00 sec)

mysql>
mysql>



Ik wil dat de kolom linkadd het bijbehorende adres heeft.

Kan je foreach en implode tegelijk gebruiken? Als je zegt dat het op deze wijze wordt overschreven dan zoek ik een methode om de losse variabelen afzonderlijk in te lezen.

Als ik foreach niet zou gebruiken hoe moet ik dan de string aflopen?
Johan West op 09/06/2015 14:26:24

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


Waar komt de info A t/m J vandaan? Formulier?
Je hebt her over vorige oefenscript met 5 tabellen. Ik zie er nu 2.
Wat is de reden om het over 2 tabellen te verdelen?
Is er een bepaalde relatie tussen A/F, B/G, etc? Hoe borg je dat dan tussen beide tabellen?

Johan West op 10/06/2015 14:49:21

De console output ziet er als volgt uit op dit moment:
mysql> SELECT * FROM wine;

In je openingspost heb je het over toevoegen. De query is een select (=opvragen). Wat is nu de bedoeling? Daarnaast heb je het in je openingspost over twee tabellen (R1 en R2) terwijl je maar 1 tabel hebt bij de select-query.
Ik zie dat ik een foutje maak in mijn uitleg.

tabellen moet hier kolommen zijn.



---------(kolom R1) ------ (kolom R2)----id
record1 ------A----------------F---------------1
record2 ------B----------------G---------------2
record3 ------C----------------H --------------3
record4 ------D----------------I---------------4
record5 ------E----------------J---------------5




Inmiddels heb ik er een autoincrement primary key kolom bij aangemaakt. Ik vermoed dat dit voordelen kan opleveren op termijn.

Het script is bedoeld om via de browser een input formulier in te vullen (toevoegen); dus daar komen de gegevens vandaan.

Via de console doe ik checks wat het resultaat is. Bijv met SELECT * FROM , de output is ter info van mezelf tijdens het programmeren.
<?php
foreach ($name_A as $key => $dummy) {

echo $name_A[$key] . ' x '. $name_B[$key];
$sql = "INSERT INTO tabel
(koloma, kolomB)
values
('". mysqli_real_escape_string($conn, $$name_A[$key]) ."',
'". mysqli_real_escape_string($conn, $$name_B[$key]) ."')";


}

?>
Wil je toevallig de rijen afdrukken als kolommen? De vraagstelling is mij compleet onduidelijk.

Als je nu eens concreet omschrijft wat je uiteindelijk wilt, op grond van wat je hebt?

Wil je uiteindelijk je data zo afdrukken?
| wine              | white wine        | etc.
+-------------------+-------------------+-----
| www.wine.com      | www.wine.com      | etc.
| www.whitewine.com | www.whitewine.com | etc.
| www.redwine.com   | www.redwine.com   | etc.
| www.bluewine.com  | www.bluewine.com  | etc.
| www.beerwine.com  | www.beerwine.com  | etc.

?
I wil het volgende als output.


linkoms ----------------linkadd ----------------------- link_id_nr--
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
wine ------------------www.wine.com -----------------------1----------
white wine ------------www.whitewine.com --------------2----------
red wine --------------www.redwine.com-------------------3----------
blue wine -------------www.bluewine.com----------------4----------
beer wine -------------www.beerwine.com----------------5----------



Omdat de eerste array wel goed wordt weggeschreven in de database en de tweede niet, moet de foreach loop worden uitgebreid want ik weet niet hoe beide arrays tegelijk naast elkaar moeten komen te staan.

Ik heb een primary key autoincrement kolom gemaakt, mogelijk weten mensen hier hoe mbv deze primary key en foreach de beide varaibelen $linkoms, $linkadd in de kolom kunnen worden weggeschreven?

Reageren