Select randuri in functie de mai multe ID-uri din GET

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
trif
Mesaje: 500

Select randuri in functie de mai multe ID-uri din GET

Buna ziua,
As vrea sa fac un select ca atunci cand in bara am get[id1]&get[id5]&get[id10]
sa imi afiseze randurile id1, id5 si id10.
Am facut asa:

Cod: Selectaţi tot

$sqlst = 'SELECT * FROM product_lang
INNER JOIN product
ON product_lang.id_product=product.id_product 
WHERE reference="'.$_GET['comanda'].'" AND id_lang=1'; 
$rezultatst = $db2->query($sqlst);
if ($rezultatst->num_rows > 0) {
$randst= $rezultatst->fetch_assoc();
echo '<br>
<b>Nume:</b> '.$randst['name'].' <br>
<br>';
}
else { echo '
<br>nici un rezultat.<br> ';}
 
imi arata doar o inregistrare dar as vrea sa pun mai multe get-uri si sa imi apara mai multe rezultate.

Sper ca s-a inteles.
Multumesc anticipat.
Astept raspuns.
Cu stima Trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
Salut
Poti sa faci adresa URL de accesare in felul acesta (cu mai multe valori la acelasi GET, separate prin virgula; fara spatiu):
pagina.php?comanda=o_valoare&id=1,5,10
$_GET['id'] va contine sirul: '1,5,10'. Apoi Select-ul asa:

Cod: Selectaţi tot

$id_lang = preg_replace('/[^0-9,]+/i', '', $_GET['id']);      // pastreaza doar numere si virgula
$sqlst = 'SELECT * FROM product_lang
INNER JOIN product
ON product_lang.id_product=product.id_product 
WHERE reference="'. $_GET['comanda'] .'" AND id_lang IN ('. $id_lang .')';
 
- Daca id-urile nu sunt la "id_lang", modifica cu coloana unde sunt id-urile.

trif Mesaje: 500
Buna ziua,
Am modificat

Cod: Selectaţi tot

$id_lang = preg_replace('/[^0-9,]+/i', '', $_GET['comanda']);      // pastreaza doar numere si virgula
$sqlst = 'SELECT * FROM product_lang
INNER JOIN product
ON product_lang.id_product=product.id_product 
WHERE reference IN ('. $id_lang .') AND id_lang =1';
si cand ii comanda=prod1,prod5,prod10&id=1 id_lang--> este limba si "1" este romana.
si sa imi apara:

Cod: Selectaţi tot

Nume: denumire1...
Nume: denumire5...
Nume: denumire10...
Am mai facut asa

Cod: Selectaţi tot

$sqlst = 'SELECT * FROM product_lang
INNER JOIN product
ON product_lang.id_product=product.id_product 
WHERE reference="'.$_GET['comanda'].'" AND id_lang=1 OR reference="'.$_GET['comanda1'].'" AND id_lang=1 OR reference="'.$_GET['comanda2'].'" AND id_lang=1'; 
si imi merge la ceea ce vreau doar ca nu stiu cum sa il fac sa imi ia cu virgule. ce este dupa virgula sa imi puna ca alegere.
sau alta metoda.

Astept raspuns.
Multumesc aticipat.
Cu stima Trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
Nu am inteles ce sa ia cu virgule, la care virgule te referi in ce ai facut si unde /ce sa puna ca alegere.

trif Mesaje: 500
Buna ziua,

Cod: Selectaţi tot

reference="'.$_GET['comanda'].'" AND id_lang=1 OR reference="'.$_GET['comanda1'].'" AND id_lang=1 OR reference="'.$_GET['comanda2'].'" AND id_lang=1'; 
acest select face

Cod: Selectaţi tot

comanda=id_p1&comanda1=id_p5&comanda2=id_p10
dar sa nu fie tot comanda=id_p1, comanda1=id_p5, comanda2=id_p10 etc. ci sa fie id_p1, id_p5, id_p10 etc. Si sa imi apara rezultate indiferent cate pun. Sper sa se inteleaga.

Astept raspuns.
Multumesc anticipat.

Cu stima Trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
Pai exact varianta data la inceput, doar ca puteai face putine modificari ca valorile din GET sa fie puse fiecare intre ghilimele, pentru IN() din SQL, daca in baza de date acele valori sunt de tip sir.

pagina.php?comanda=id_p1,id_p5,id_p10
Apoi Select-ul asa:

Cod: Selectaţi tot

// pastreaza doar litere, numere, virgula, liniute; pune fiecare valore intre ghilimele dube, pentru IN() din SQL
$reference = preg_replace('/[^a-z0-9,_\-]+/i', '', $_GET['comanda']);
$reference = '"'. str_replace(',', '","', $reference) .'"';
$sqlst = 'SELECT * FROM product_lang
INNER JOIN product
ON product_lang.id_product=product.id_product 
WHERE reference IN ('. $reference .') AND id_lang=1';
 

trif Mesaje: 500
Buna ziua,
Merge selectul. DAR la codul AB-CD nu imi mai apare inregistrarea. cum sa fac ca sa imi ia si "-".

de unde pot sa fac rost de sabloane gen

Cod: Selectaţi tot

/[^\/]+[\.][a-z0-9]+$/i
pentru diverse probleme.

Astept raspuns. Multumesc anticipat.
Cu stima Trif
M-am hotarat!
De ce sa fiu trist?
Oricum nu intereseaza pe nimeni...!
Mai bine sunt fericit si ii enervez pe toti cu fericirea mea!
http://www.cantaricrestine.ro
---> cu stima Trif

MarPlo Mesaje: 4343
Nu stiu de ce nu ia si liniuta. Sablonul din preg_replace() e facut sa pastreze si liniute. Nu stiu cum e adresa URL cu acele valori, sau ce alte instructiuni din script le afecteaza.
Incearca sa inlocuiesti:

Cod: Selectaţi tot

$reference = preg_replace('/[^a-z0-9,_\-]+/i', '', $_GET['comanda']);
Cu acesta (e doar pentru filtrarea datelor din adresa URL, sa elimine caracterele ce nu trebuiesc in acel GET):

Cod: Selectaţi tot

$reference = str_replace(array('<', '>', '.', '&', '?', '=', '"', "'", '$', '#', '*', '/'), '', $_GET['comanda']);
 
- Sabloanele regexp sunt personalizate /create de fiecare la necesitatea codului unde trebuie aplicate, dupa cerintele acelui cod. Sunt cateva tipare standard, pentru adrese de e-mail, adresa URL, IP; dar in general se invata logica lor si se creaza in functie de ce caractere si cum trebuie sau nu in cod.
Vezi ce gasesti la cautare pe intenet: " regex pattern examples "

Subiecte similare