Gegevens uit database vergelijken met array
Het algemene vrijdagmiddag probleem, ik kom er even niet uit.
Om maar meteen met de deur in huis te vallen;
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
public function getAdmin($klant){
$result = mysql_query("
SELECT
id,
name
FROM
tbl_administrations
WHERE
id IN ".implode(",",$klant));
while($admin = mysql_fetch_object($result)) {
echo "<option value=".$admin->id.">".$admin->name." </option>";
echo "<br>";
}
}
?>
public function getAdmin($klant){
$result = mysql_query("
SELECT
id,
name
FROM
tbl_administrations
WHERE
id IN ".implode(",",$klant));
while($admin = mysql_fetch_object($result)) {
echo "<option value=".$admin->id.">".$admin->name." </option>";
echo "<br>";
}
}
?>
In mijn class staat onder andere deze functie,
nu heb ik vanuit een vorige pagina een array klant[].
Hierin staan ID's die gekozen zijn uit een multiple select.
Aan de hand van deze ID's wil ik nu een naam en ID ophalen uit een andere tabel.
Ik krijg alleen op deze manier geen enkele output.
Wie weet er wat ik fout doe, of waar ik een rare hersenspinsel heb momenteel?
uit implode krijg je dit: 1,2,3,4,5,6,7,8,9,10
terwijl je dit wil hebben: (1,2,3,4,5,6,7,8,9,10)
wat is het verschil :-)
Even kijken, ik heb bijvoorbeeld 2 records, naam en ID,
en nu wil ik alle namen selecteren die een ID hebben die in de array staan.
De haakjes helpen niet? Heb je dan wel gecontroleerd wat er in die id array staat?
Geeft netjes als output:
Array ( [0] => 1 [1] => 2 )
SELECT id, name
FROM tbl_administrations
WHERE id IN ".implode(",",$klant));
Zou je dit moeten hebben:
SELECT id, name
FROM tbl_administrations
WHERE id IN (".implode(",",$klant)).")";
Let op de extra haakjes om de implode functie heen, die dus IN het SQL statement staan. Die heb je nodig anders gaat het niet werken.
Array ( [0] => 1 [1] => 2 )
Maar deze doet het nog niet (datgene wat ik dus wil hebben..)
Sorry voor de caps, maar ik zeg het vanaf de eerste post al, hopelijk is het nu duidelijk.....
Doe anders een echo op je SQL query nadat je de string hebt toegevoegd en kijk hoe het eruitziet. Misschien ook handig om de foutmelding van MySQL te controleren in je script, die zal het ook aangeven.
maar de output blijft gewoon hetzelfde,
Query nu uitgevoerd op de pagina zelf en niet in de class;
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource
En pas foutafhandeling toe.
De id's in de string bestaan wel in je database?
Er staat ook een sluithaakje te veel bij $klant. Zoals Erwin als voorstelde zet je query in een var en echo hem
en ik probeerde de query te echoën, maar toen was de output weer niets. Ik krijg niet mijn query te zien, dus ik maak waarschijnlijk een hele grote fout.
Dan even via een omweg. Maak de query eerst aan in een string variabele, echo die en plaats hem dan in de mysql functie om uit te voeren.
Omweg, zou niet nodig moeten zijn, maar kan je in elk geval zorgen dat de query goed is.
SELECT id, name FROM tbl_administrations WHERE id IN (1,2)
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$sql = "SELECT id, name FROM tbl_administrations
WHERE id IN (". implode(",",$klant)) .")";
//haal een haakje weg achter $klant
?>
$sql = "SELECT id, name FROM tbl_administrations
WHERE id IN (". implode(",",$klant)) .")";
//haal een haakje weg achter $klant
?>
Gewijzigd op 09/12/2011 15:18:28 door Ger van Steenderen
(domme vraag, maar tbl_administrations is wel echt de naam van de tabel mag ik aannemen, en niet een constante?)
Code (php)
1
2
3
2
3
<?php
$result = mysql_query("SELECT id,name FROM tbl_administrations WHERE id IN (".implode(",",$klant)).")" or die (mysql_error());")";
?>
$result = mysql_query("SELECT id,name FROM tbl_administrations WHERE id IN (".implode(",",$klant)).")" or die (mysql_error());")";
?>
Als ik dat haakje weghaal dan sluit hij de mysql_query niet af.
Toevoeging op 09/12/2011 15:19:55:
tbl_administrations is echt de naam ja :)
Toevoeging op 09/12/2011 15:23:26:
Hij doet het!
Ik had de query maar even op een andere schrijfwijze gedaan,
en nu werkt ie!
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$query = "SELECT id,name FROM tbl_administrations WHERE id IN (".implode(",",$klant).")";
$result = mysql_query($query) or die(mysql_error());
?>
$query = "SELECT id,name FROM tbl_administrations WHERE id IN (".implode(",",$klant).")";
$result = mysql_query($query) or die(mysql_error());
?>
Waarom doet hij het op de andere manier niet, terwijl dit normaal wel gewoon goed gaat?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$result = mysql_query("SELECT id,name FROM tbl_administrations WHERE id IN (".implode(",",$klant)).")" or die (mysql_error());")";
//moet zijn
$result = mysql_query("SELECT id,name FROM tbl_administrations WHERE id IN (".implode(",",$klant).")") or die (mysql_error();
?>
$result = mysql_query("SELECT id,name FROM tbl_administrations WHERE id IN (".implode(",",$klant)).")" or die (mysql_error());")";
//moet zijn
$result = mysql_query("SELECT id,name FROM tbl_administrations WHERE id IN (".implode(",",$klant).")") or die (mysql_error();
?>
Gewijzigd op 09/12/2011 15:30:05 door Ger van Steenderen
Marijke Hakvoort op 09/12/2011 15:19:17:
tbl_administrations is echt de naam ja :)
Ik had al zo'n idee, alleen ik gebruik de TBL prefix altijd voor mijn tabel constantes, vandaar. Zou voor mij niet de eerste keer zijn :-)
Maar waarom die andere schrijfwijze het niet deed.... geen idee. Misschien ergens een raar teken ertussen dat je niet ziet, maar wel de DB over zijn nek doet gaan.