[PHP] arrays in SQL querys

Pagina: 1
Acties:
  • 88 views sinds 30-01-2008

  • SOCO_cola
  • Registratie: Januari 2005
  • Laatst online: 28-02-2024
Ik heb een array die er het volgende gegevens


Array ( [winkelmandje] => Array ( [0] => 17 [1] => 2 [2] => 2 [3] => 3 )


Dit zijn id's van producten

nu wil ik met de volgende query de producten tonen op de website

"SELECT * FROM producten WHERE product_id=????";


Hoe krijg ik nu uit die array al die id's een voor een in die query..

Nintendo SWITCH! FTW


  • toost
  • Registratie: Januari 2002
  • Laatst online: 30-01 03:23
dat is toch niet zo moeilijk ??

code:
1
2
3
4
5
foreach($array['winkelmandje'] as $key => $value) {

$query = "SELECT * FROM producten WHERE product_id=" . $value;

}

[ Voor 28% gewijzigd door toost op 04-06-2007 17:00 ]

This space for rent. Serious inquiries only please.


  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
Gebruik de MySQL functie IN en de php functie implode

  • Yemoke
  • Registratie: Mei 2003
  • Laatst online: 27-10-2024
code:
1
2
3
4
5
$index = 0
while($index < sizeof($array)){
       mysql_query("SELECT * FROM producten WHERE product_id=$array[$index]");
       index = index + 1;
}


offtopic:
traag moest ff syntax checken :+
wackmaniac schreef op maandag 04 juni 2007 @ 16:58:
Luister naar Y0ur1

PHP:
1
$query = 'SELECT * FROM `producten` WHERE `product_id` IN ' . implode( $winkelmandje , ',' );
oowja wf...:X

[ Voor 49% gewijzigd door Yemoke op 04-06-2007 17:04 ]


  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
toost schreef op maandag 04 juni 2007 @ 16:55:
dat is toch niet zo moeilijk ??

code:
1
2
3
4
5
foreach($array as $key => $value) {

$query = SELECT * FROM producten WHERE product_id=" . $value;

}
Waarom in 3 losse queries als het in 1 kan?

  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 17:16
Luister naar Y0ur1

PHP:
1
$query = 'SELECT * FROM `producten` WHERE `product_id` IN ' . implode( $winkelmandje , ',' );

[ Voor 76% gewijzigd door wackmaniac op 04-06-2007 17:00 ]

Read the code, write the code, be the code!


  • toost
  • Registratie: Januari 2002
  • Laatst online: 30-01 03:23
Y0ur1 schreef op maandag 04 juni 2007 @ 16:57:
[...]

Waarom in 3 losse queries als het in 1 kan?
mja hij zei niet wat hij wilde, je kan inderdaad ze aan elkaar plakken. Maar alstie ze los wil hebben dan is het wel goed

edit: niet goed gelezen, je hebt gelijk :)

[ Voor 8% gewijzigd door toost op 04-06-2007 17:01 ]

This space for rent. Serious inquiries only please.


  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
toost schreef op maandag 04 juni 2007 @ 16:59:
[...]


mja hij zei niet wat hij wilde, je kan inderdaad ze aan elkaar plakken. Maar alstie ze los wil hebben dan is het wel goed
Ik zou geen logische reden kunnen verzinnen waarom je zoiets in 3 aparte statements gaat doen als je ze met 1 query in 1 resultset terug wil krijgen dus je zou het kunnen impliceren dat ie dat bedoeld. Anyway, dit wel heel erg basic.

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
wackmaniac schreef op maandag 04 juni 2007 @ 16:58:
Luister naar Y0ur1

PHP:
1
$query = 'SELECT * FROM `producten` WHERE `product_id` IN ' . implode( $winkelmandje , ',' );
PHP:
1
$query = 'SELECT * FROM `producten` WHERE `product_id` IN ' . implode( ',', $winkelmandje );


;)

March of the Eagles


  • SOCO_cola
  • Registratie: Januari 2005
  • Laatst online: 28-02-2024
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$query = "SELECT * FROM product WHERE product_id IN ' . implode( $_POST[winkelmandje] , ',' )"; 
                
                $result = mysql_query($query);
                
                print $query;
                
                while ($output = mysql_fetch_array($result)){
                
                
                echo "
                <tr>
                    <td>$output[merk]</td>
                    <td>$output[naam]</td>
                    <td>$output[prijs]</td>
                </tr>
                
                
                ";



Heb nu deze code in mijn source staan.

maar dit geeft de volgende query;


SELECT * FROM product WHERE product_id IN ' . implode( Array , ',' )

[ Voor 4% gewijzigd door SOCO_cola op 04-06-2007 17:23 ]

Nintendo SWITCH! FTW


  • Japidoff
  • Registratie: November 2001
  • Laatst online: 18-11 18:58
let op je quotes!!

beetje basic

ff tussendoor:

controleer je de waardes in $_POST[] wel?!?!?
anders ben je namelijk zéér onveilig bezig! (zoek maar eens op "sql injection")

[ Voor 24% gewijzigd door Japidoff op 04-06-2007 17:38 ]

gang is alles


  • Y0ur1
  • Registratie: Oktober 2000
  • Niet online
SOCO_cola schreef op maandag 04 juni 2007 @ 17:21:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$query = "SELECT * FROM product WHERE product_id IN ' . implode( $_POST[winkelmandje] , ',' )"; 
                
                $result = mysql_query($query);
                
                print $query;
                
                while ($output = mysql_fetch_array($result)){
                
                
                echo "
                <tr>
                    <td>$output[merk]</td>
                    <td>$output[naam]</td>
                    <td>$output[prijs]</td>
                </tr>
                
                
                ";



Heb nu deze code in mijn source staan.

maar dit geeft de volgende query;


SELECT * FROM product WHERE product_id IN ' . implode( Array , ',' )
come on, we zijn geen helpdesk, debuggen moet je zelf doen.

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
Het is dan ook verkeerd, zie mijn post:

PHP:
1
implode ( ',', $_POST['winkelmandje'] );


In plaats van

PHP:
1
implode ( $_POST[winkelmandje], ',' );


Dus ;)

[ Voor 25% gewijzigd door XWB op 04-06-2007 17:40 ]

March of the Eagles


  • SOCO_cola
  • Registratie: Januari 2005
  • Laatst online: 28-02-2024
$query = 'SELECT * FROM product WHERE product_id IN ' . implode ( ',', $_POST['winkelmandje'])';


Heb nu deze query staan en doet het toch echt niet :D

Nintendo SWITCH! FTW


  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-09 20:59
SOCO_cola schreef op maandag 04 juni 2007 @ 17:47:
$query = 'SELECT * FROM product WHERE product_id IN ' . implode ( ',', $_POST['winkelmandje'])';


Heb nu deze query staan en doet het toch echt niet :D
Tsja, misschien eens de mysql manual erbij pakken? Beetje zelf wat uitzoeken kan nooit kwaad..

If I can't fix it, it ain't broken.


Verwijderd

Of

code:
1
2
$where = 'product_id='.implode(' OR product_id=', $_POST['winkelmandje']);
'SELECT FROM producten '.$where;


Dit werkt bij mij altijd prima :)

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
implode() en explode() zijn functies die je gewoon moet kennen. PHP heeft een aantal niet boeiende functies, maar deze 2 functies behoren wel tot de belangrijkste. Als je op een functie gewezen wordt die je niet kent, zou je eerst zelf die functie in de manual op moeten zoeken. Anders moeten wij hier de hele tijd de hele manual meekopieren. :P
SOCO_cola schreef op maandag 04 juni 2007 @ 17:47:
$query = 'SELECT * FROM product WHERE product_id IN ' . implode ( ',', $_POST['winkelmandje'])';


Heb nu deze query staan en doet het toch echt niet :D
Nee, je krijgt nu een duidelijke syntax error, dat ligt niet aan de query, maar aan je syntax. ;) Gebruik een editor met syntax highlighting als je dat nog niet deed.

Syntax error opgelost, maar geen gewenst resultaat? Echo $query eens om de letterlijke query te zien, lees de mysql manual, gebruik mysql_error(), doe zelf wat moeite en stel dan pas je vraag.

{signature}


  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
SOCO_cola schreef op maandag 04 juni 2007 @ 17:47:
$query = 'SELECT * FROM product WHERE product_id IN ' . implode ( ',', $_POST['winkelmandje'])';


Heb nu deze query staan en doet het toch echt niet :D
Ga eens debuggen ;) Print de query eens (echo $query).

March of the Eagles


  • GlowMouse
  • Registratie: November 2002
  • Niet online
Hacku schreef op maandag 04 juni 2007 @ 17:39:
Het is dan ook verkeerd, zie mijn post:

PHP:
1
implode ( ',', $_POST['winkelmandje'] );


In plaats van

PHP:
1
implode ( $_POST[winkelmandje], ',' );


Dus ;)
De volgorde van de argumenten maakt niet uit bij implode ;)

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
GlowMouse schreef op maandag 04 juni 2007 @ 18:06:
[...]

De volgorde van de argumenten maakt niet uit bij implode ;)
string implode ( string $glue, array $pieces ) :?

/edit
Opmerking: implode() kan, om historische redenen, haar parameters in willekeurige volgorde accepteren. Om consequent te zijn met explode(), is het echter minder verwarrend als je de gedocumenteerde volgorde van de argumenten vasthoudt.
Weer zo'n onlogisch iets van php 8)7

March of the Eagles


  • wackmaniac
  • Registratie: Februari 2004
  • Laatst online: 17:16
@Hacku: Sorry, was even uit de losse pols :) Maar je hebt helemaal gelijk

Read the code, write the code, be the code!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Hacku schreef op maandag 04 juni 2007 @ 18:03:
[...]


Ga eens debuggen ;) Print de query eens (echo $query).
Wat hacku zegt dus. Het is hier geen helpdesk. De syntax van PHP staat prima uitgelegd evenals de syntax van SQL. Als je IN niet kent dan betekent dat alleen maar dat je de basis van SQL nog niet kent en dat je daarnaast de moeite niet hebt genomen je zelf dit eigen te maken. Dat eerste is niet zo erg, dat tweede wel.

Neem eens wat PHP en MySQL tutorials door, dan wordt het 1 en ander een stuk duidelijker :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1

Dit topic is gesloten.