Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    query con array e foreach

    Salve a tutti......
    sono nuovamente in cerca di un piccolo aiutino
    Probabilmente il titolo del post non è corretto, ma nn so come chiamarlo

    Allora cercherò di essere più precisa possibile!

    Ho un db, che purtroppo non posso toccare nella struttura, da dove prendo dei dati (ovviamente )

    3 tabelle:
    _categoria [id, nome_cat]
    _sottocategoria [id, id_cat, nome_subcat]
    _prodotti [id, id_subcat, prodotto, ecc......] => notare bene che registra solo l'id della sottocategoria

    nella pagina php estrapolo perfettamente la sottocategoria così:


    codice:
    $menu = $_GET['idmn']; $query_cat = mysql_query("SELECT categories.description_en AS cat_desc_eng, categories.*, subcategories.* FROM categories INNER JOIN subcategories ON categories.ID = subcategories.category_id WHERE subcategories.category_id=$menu ORDER BY subcategories.id ASC", $db) or die(mysql_error()); $totalRow_cat = mysql_num_rows($query_cat);
    if (!empty($totalRow_cat))
    	{
    		$i = 0;
    		while ($row_cat = mysql_fetch_assoc($query_cat))
    		
    			{
    				if ($i==0) {
    					echo '<div id="col_left_int" style="background-image: url(../img/categorie/'.$row_cat['left_picture'].');">
    					<h1>'.$row_cat['cat_desc_eng'].'</h1>
    					<ul>
    					';
    					$i++;
    					echo '[*]'.$row_cat['description_en'].'
    					';
    				}
    				else {
    					$i++;
    					echo '[*]'.$row_cat['description_en'].'
    					';
    				}
    			}
    			echo '[/list]
    			';
    		}
    	else {
    		echo '<h1>Al momento non ci sono dati presenti sul database!</h1>';
    	}
    il problema è nell'estrapolazione dei prodotti... proprio per il fatto che nn viene registrato l'id della categoria ma solo della sottocategoria.

    In pratica devo fare una query dove il valore del WHERE deve essere dato da $row_cat['id']

    tipo
    codice:
    SELECT * FROM products WHERE id=1 ORDER BY id ASC
    SELECT * FROM products WHERE id=3 ORDER BY id ASC
    SELECT * FROM products WHERE id=8 ORDER BY id ASC
    SELECT * FROM products WHERE id=10 ORDER BY id ASC
    fondamentale: non devo fare un altro passaggio, ma il tutto si deve caricare insieme al menu delle sottocategorie.
    Avevo provato con un foreach ma se non è all'interno del ciclo delle sottocategorie perdo i dati.... come posso fare?!

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Non so se ho capito, ma non puoi salvarti l'id della sottocategoria in un array e poi fare la query su prodotti?

    Codice PHP:
    $id_sottocategorie = array();
    while (
    $row_cat mysql_fetch_assoc($query_cat)){
        
    $id_sottocategorie[] = $row_cat['id']; // l'id della sottocategoria
        
    ...
    }

    $prodotti_categoria 'SELECT * FROM prodotti WHERE id_subcat IN ('.implode(','$id_sottocategorie).')'

  3. #3
    Cioè che ti serve è chiaro, ma non è chiaro il risultato che vuoi ottenere.
    L'elenco delle sottocategorie viene popolato correttamente, e va bene. A cosa ti servono i prodotti? Devi fare un elenco dei prodotti sotto ogni categoria? Tipo

    cat 1: prodotto1, prodotto2, prodotto3
    cat 2: prodotto23, prodotto24,prodotto25

    ? O che altro?

  4. #4
    Originariamente inviato da boots
    Non so se ho capito, ma non puoi salvarti l'id della sottocategoria in un array e poi fare la query su prodotti?

    Codice PHP:
    $id_sottocategorie = array();
    while (
    $row_cat mysql_fetch_assoc($query_cat)){
        
    $id_sottocategorie[] = $row_cat['id']; // l'id della sottocategoria
        
    ...
    }

    $prodotti_categoria 'SELECT * FROM prodotti WHERE id_subcat IN ('.implode(','$id_sottocategorie).')'
    Ciao e grazie... ho provato e funziona benissimo

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Anche l'sql injection funzionerebbe benissimo col codice che hai postato

    Mi auguro non sia per un sito "serio"...

  6. #6
    Originariamente inviato da luca200
    Mi auguro non sia per un sito "serio"...
    in che senso scusa!?!??

  7. #7
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Credo voglia dire che
    Codice PHP:
    $menu $_GET['idmn']; 
    $query_cat mysql_query("SELECT categories.description_en AS cat_desc_eng, categories.*, subcategories.* FROM categories INNER JOIN subcategories ON categories.ID = subcategories.category_id WHERE subcategories.category_id=$menu ORDER BY subcategories.id ASC"$db) or die(mysql_error()); 
    E' il classico esempio di codice vulnerabile ad sql injection. Se stai facendo questo sito per studio può anche andar bene, ma se è un sito che deve andare online, dovresti rivedere la ricurezza.
    Già facendo
    Codice PHP:
    $menu = (int)$_GET['idmn']; 
    Dovrebbe andare bene

  8. #8
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    .

    scusate errore mio.
    Che mestiere difficile.....essere da soli ancora di più

  9. #9
    ah ecco....
    grazie per la dritta, molto utile

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.