Array uitlezen
Ik heb de volgende gegevens op de volgende manier in een database staan:
$string = "bananen, appels, peren, aardbeien';
Hoe kan ik nu checken of bijvoorbeeld 'bananen' voorkomt in de $string?
Een if in array krijg ik niet aan de praat....
$string = "bananen, appels, peren, aardbeien';
Hoe kan ik nu checken of bijvoorbeeld 'bananen' voorkomt in de $string?
Een if in array krijg ik niet aan de praat....
Het is ook geen array. Het is een nietszeggende string voor een database. Ga normaliseren, dus de waarden als aparte records in een nieuwe tabel. Dan kun je gewoon joinen.
De manier waarop je het in je database hebt staan lijkt niet te kloppen, maar hier lees je hoe je in een string kunt zoeken (voorbeeld 1):
http://php.net/manual/en/function.strpos.php
http://php.net/manual/en/function.strpos.php
In MySQL zelf (in een query) zou je dit met de MySQL functie LOCATE() kunnen bereiken denk ik, maar ja, je tabel een betere structuur geven is wellicht een beter idee (al kan het serialiseren van data soms ook wel een goed idee zijn, maar hier wellicht niet).
Het enige geval dat ik zo snel kan bedenken waar serialiseren handig kan zijn is wanneer je 100% zeker weet dat je niet in de data hoeft te zoeken. Maar dan zou ik niet gaan scheiden met komma's, maar een json string in de database zetten, of serialize() gebruiken. Echter, dit zijn gegevens waar je waarschijnlijk in wilt zoeken, bijvoorbeeld "welke mensen hebben o.a. voor banaan gekozen?" Dat is alleen fatsoenlijk op te lossen door goed te normaliseren.
Ik snap het :)
Dan moet ik alleen een array zien te maken vanuit een formulier:
De aangevinkte microfoons moeten in een array worden opgeslagen in een database. Hoe krijg ik dat voor elkaar?
Dan moet ik alleen een array zien te maken vanuit een formulier:
Code (php)
1
2
3
4
2
3
4
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"Z1\">Microfoon - zender 1<br>";
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"Z2\">Microfoon - zender 2<br>";
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"Z3\">Microfoon - zender 3<br>";
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"Z4\">Microfoon - zender 4<br><br>";
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"Z2\">Microfoon - zender 2<br>";
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"Z3\">Microfoon - zender 3<br>";
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"Z4\">Microfoon - zender 4<br><br>";
De aangevinkte microfoons moeten in een array worden opgeslagen in een database. Hoe krijg ik dat voor elkaar?
Een tip als eerste: Met een single-quoted echo hoef je niet je double-quotes te escapen met een \.
Na het versturen van je formulier heb je al je data in een array staan in $_POST['audio']. Deze kan je met foreach() uitlezen en gebruiken in een INSERT-querie.
Na het versturen van je formulier heb je al je data in een array staan in $_POST['audio']. Deze kan je met foreach() uitlezen en gebruiken in een INSERT-querie.
Gewijzigd op 06/12/2015 12:47:47 door - Ariën -
Hoe ziet die foreach() er bij mij uit dan?
foreach($_POST['audio'] as $item) {
// hier je query met $item als value.
}
// hier je query met $item als value.
}
Een hele domme vraag, maar ik snap niet wat dan in de query moet staan...
Op deze manier gaat het fout:
Dan komt alleen de laatst aangevinkte microfoon in de database te staan.
Op deze manier gaat het fout:
Code (php)
1
2
3
2
3
foreach($_POST['audio'] as $audio) {
$update_item = mysql_query("UPDATE items SET audio = '".$audio."' WHERE itemID ='".$itemID."'");
}
$update_item = mysql_query("UPDATE items SET audio = '".$audio."' WHERE itemID ='".$itemID."'");
}
Dan komt alleen de laatst aangevinkte microfoon in de database te staan.
Je wilt toch iets TOEVOEGEN?
dan moet je een INSERT INTO query gebruiken.
dan moet je een INSERT INTO query gebruiken.
Dan ben ik onduidelijk geweest....
De hele rits audio moet in de kolom audio komen bij een bepaald ID.
En dan dus op de volgende manier: "Z1", "Z3", "Z4"
Hoe doe ik dat dan?
De hele rits audio moet in de kolom audio komen bij een bepaald ID.
En dan dus op de volgende manier: "Z1", "Z3", "Z4"
Hoe doe ik dat dan?
De hele rits? Dat wil je niet, dan kun je er niks meer mee. Nogmaals, ga normaliseren. http://www.phphulp.nl/php/tutorial/overig/normaliseren/150/ is een goed begin.
De basis is dat je een aparte tabel gebruikt om de "audio" in op te slaan, met een verwijzing naar het ID dat je al hebt.
De basis is dat je een aparte tabel gebruikt om de "audio" in op te slaan, met een verwijzing naar het ID dat je al hebt.
Maar is het niet mogelijk om de opties van de aangevinkte checkboxen in een array te krijgen?
Desnoods met cijfers, ipv tekst....
Desnoods met cijfers, ipv tekst....
Wat geeft print_r($_POST['audio']); nu dan na het versturen van je formulier?
Gewijzigd op 11/12/2015 09:48:51 door - Ariën -
Code (php)
1
2
3
4
5
2
3
4
5
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"VID-C\">VIDEO COMPLEET<br>";
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"VID-M\">VIDEO MEELEES<br>";
echo "<input type=\"checkbox\" name=\"audio[]\" value=\"UNDERSCORE\">UNDERSCORE<br><br>";
Als ik de eerste twee checkboxen aanvink krijg ik dit terug:
Array ( [0] => VID-C [1] => VID-M )
foreach($_POST['audio'] as $key => $value) {
En in die twee variabelen staan de key en de value
En in die twee variabelen staan de key en de value
Ik snap wat je doet, maar ik snap het volgende niet:
Hoe krijg ik daar zo'n mooie lijst van, zoals:
"VID-C", "VID-M"
Want die regel moet m'n database in....
Hoe krijg ik daar zo'n mooie lijst van, zoals:
"VID-C", "VID-M"
Want die regel moet m'n database in....
In $value staat de waarde uit de huidige iteratie die de foreach doorloopt.
En dan steeds een INSERT INTO uitvoeren in de loop.
Het lijkt mij niet logisch om alle waardes in één record te plaatsen.
En dan steeds een INSERT INTO uitvoeren in de loop.
Het lijkt mij niet logisch om alle waardes in één record te plaatsen.
Gewijzigd op 11/12/2015 11:04:22 door - Ariën -
Maar het moet in één veld in de database komen...
Dus ik moet er van tevoren al zo'n regel als: "VID-C", "VID-M" van hebben....
Hoe krijg ik die met zo'n foreach loop?
Dus ik moet er van tevoren al zo'n regel als: "VID-C", "VID-M" van hebben....
Hoe krijg ik die met zo'n foreach loop?
Maar waarom wil je dat? Het druist behoorlijk in tegen database-normalisatie.
Zo wordt het later lastig om te tellen wanneer of door wie er het product/voorwerp/item VID-C of VID-M is gebruikt.
Zo een opsomming is leuk om te tonen, maar waardeloos voor databases.
Zo wordt het later lastig om te tellen wanneer of door wie er het product/voorwerp/item VID-C of VID-M is gebruikt.
Zo een opsomming is leuk om te tonen, maar waardeloos voor databases.
Gewijzigd op 11/12/2015 11:17:27 door - Ariën -




