Oramai mi ha incuriosito questa storia, appena ho un pò di tempo ricreo la stessa tabella e faccio le prove
Oramai mi ha incuriosito questa storia, appena ho un pò di tempo ricreo la stessa tabella e faccio le prove
Ok, allora ti preparo il codice per ricrearle e te lo posto.
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Ecco il codice per creare le tabelle
In categoria ci va l'id della categoria di cui fa parte il prodottocodice:CREATE TABLE catalogo_prodotti ( id int (10) NOT NULL auto_increment, nome varchar (255), categoria int (10), PRIMARY KEY (id) );
Per inserire le categorie devi usare il metodo ricorsivo. Per es se io ho i seguenti pathcodice:CREATE TABLE catalogo_categorie ( id int (10) NOT NULL auto_increment, nome varchar (255), padre int (10), PRIMARY KEY (id) );
webmaster/php/guide
webmaster/php/tutorials
webmaster/asp/guide
webmaster/asp/tutorials
programmazione/C/guide
programmazione/C/tutorials
programmazione/pascal/guide
programmazione/pascal/tutorials
il databse sarà organizzato così
Spero di essere stato chiaro! Se ci sono problemi fammi sapere.codice:+------+----------------+-------+ | id | NOME | PADRE | +------+----------------+-------+ | 1 | Webmaster | 0 | +------+----------------+-------+ | 2 | Programmazione | 0 | +------+----------------+-------+ | 3 | PHP | 1 | +------+----------------+-------+ | 4 | Guide | 3 | +------+----------------+-------+ | 5 | Tutorials | 3 | +------+----------------+-------+ | 6 | ASP | 1 | +------+----------------+-------+ | 7 | Guide | 6 | +------+----------------+-------+ | 8 | Tutorials | 6 | +------+----------------+-------+ | 9 | C | 2 | +------+----------------+-------+ | 10 | Guide | 9 | +------+----------------+-------+ | 11 | Tutorials | 9 | +------+----------------+-------+ | 12 | Pascal | 2 | +------+----------------+-------+ | 13 | Guide | 12 | +------+----------------+-------+ | 14 | Tutorials | 12 | +------+----------------+-------+
La funzione penso sia abbastanza chiaro che fa! Grazie per l'aiuto!
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
![]()
![]()
![]()
Corretto e funzionante, restutuisce true se il valore passato esiste altrimenti restituisce false. Usavi la funzione ricorsiva, quindi bisogna controllare anche quando la seconda chiamata restituisce true e fermare il codice. Se ci sono problemi fammi sapere. tempo impiegato 7 minuti troppi no?Codice PHP:function isproductincat($id){
global $db;
$query = "SELECT id,nome,categoria FROM catalogo_prodotti WHERE categoria = '$id'";
$result = mysql_query($query,$db);
if (mysql_num_rows($result) > 0){
return true;
}
else{
$query = "SELECT id,nome,padre FROM catalogo_categorie WHERE padre = '$id'";
$result = mysql_query($query,$db);
while ($row = mysql_fetch_array($result)){
if(isproductincat($row['id'])){
return true;
}
}
}
}
Ma scusa, quando fa la ricorsione non incontra di nuovo il blocco con il true? E non dovrebbe pensare a quello? Cmq grazie per l'aiuto! Credo che non ci sarei mai arrivato!
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Si ma restituisce true solo al ciclo while che continua fino a che non si è finito di processare i record, quindi restituisce true ma non viene catturato dall'if esterno alla funzione. Terminato il ciclo while termina anche la funzione e non restituisce nulla, l'if esterno lo prende come false. Invece in quel modo viene restituito true anche dentro al ciclo che lo blocca
![]()
Ho capito. Grazie!
eCommerceRS.NET - Commerciante, vendi on-line!
Il mio nick è mircov e non mirco!!!
Ma non ritorna mai false !!!Originariamente inviato da jeck
Si ma restituisce true solo al ciclo while che continua fino a che non si è finito di processare i record, quindi restituisce true ma non viene catturato dall'if esterno alla funzione. Terminato il ciclo while termina anche la funzione e non restituisce nulla, l'if esterno lo prende come false. Invece in quel modo viene restituito true anche dentro al ciclo che lo blocca
![]()
Infatti, ho scritto che non rstituisce nella, ma è l'if che richiama la funzione che lo interpreta come false