PDA

View Full Version : [PHP] update multipli


anonimizzato
06-08-2006, 18:04
Ciao a tutti,

ho un problema concettuale sugli update multipli.

Mettiamo che io abbia una tabella ("prodotti") a DB con tot campi, per il momento solo 3:

prodotto_id
prodotto_nome
prodotto_visibile.

il primo è ovviamente l'ID del prodotto il secondo il nome mentre il terzo è un FLAG (1/0) sulla visibilità o meno sul sito ("fittizio") del prodotto stesso che gestisco con un checkbox spuntato o meno.

Ho imparato come gestire gli update multipli creando i "name" dei vari campi come se fossero degli indici di un array.

Quando visualizzo i campi metto infatti.

<input type="text" name="prodotto_nome[<?php echo prodotto_id]" ?> value="" />

e

<input type="checkbox" name="prodotto_visibile[<?php echo prodotto_id]" ?> value="1" />

questo mi permette ovviamente di effettuare per ogni array, cioè per ogni tipologia di campo un ciclo che mi modifica i dati dopo un submit.

IL PUNTO:
Ogni array è però separato in un ciclo "foreach", è un metodo corretto oppure esiste una soluzione più elegante e più pratica che consenta di eseguire un unico grande ciclo?

Spero di essermi spiegato.

Di seguito riporto il codice PHP per gli update implementato sin ora.

if(isset($_POST["modifica"])){


// UPDATE VISIBILITA'
$sql = "update prodotti set prodotto_visibile = 0";
mysql_query($sql);

if(is_array($prodotto_visibile)){

foreach($prodotto_visibile as $key => $visibile){

$sql = "update prodotti set prodotto_visibile = 1 where prodotto_id = '".$key."'";
mysql_query($sql);

}

}


// UPDATE NOME
foreach($prodotto_nome as $key => $nome){

if($nome != ""){
$sql = "update prodotti set prodotto_nome = '".$nome."' where prodotto_id = '".$key."'";
mysql_query($sql);
}

}

}

Xalexalex
06-08-2006, 19:44
Non so se si possa, ma prova a mettere ogni campo come [nome_prodotto][id]...[prodotto_visibile][id] etc..
E poi indenti i due cicli foreach.
Ciaozz

anonimizzato
07-08-2006, 10:17
Oddio non ho capito benissimo, potresti mettere due righe di esempio?

Ciò vorrebbe comunque dire eseguire sempre delle query di update distinte giusto?

Non è possibile fare una query unica che setti subito i valori dei vari array in un unico ciclo?

Grazie per la risposta.

Xalexalex
07-08-2006, 10:25
Se hai modo allega le due pagine, oppure mandale per mail a alessandro.xalexalex@gmail.com e te le modifico, spiegarlo a parole mi riesce un po' difficile...
Ciao
Alex

anonimizzato
07-08-2006, 10:46
Guarda avevo postato la stessa richiesta su html.it e mi hanno risposto con una soluzione adatta.

Praticamente faccio un matrice per i valori dei campi così recupero tutto in un unico ciclo foreach e stampo i valori leggendoli dagli ulteriori array annidati 'prodotto_nome' e 'prodotto_visibile'.



<input type="text" name="array[<?php echo prodotto_id?>]['prodotto_nome']" value="" />
<input type="text" name="array[<?php echo prodotto_id?>]['prodotto_visibile']" value="" />



Credo fosse la stessa cosa che mi avevi suggerito, comunque grazie.

Cmq tenetevi pronti perchè prima o poi torno. :D

anonimizzato
07-08-2006, 10:48
il PHP è questo:


if(isset($_POST["modifica"])){


foreach($prodotto as $key => $valore){

$sql = "update prodotti set prodotto_nome = '".$valore['prodotto_nome']."', prodotto_visibile = '".$valore['prodotto_visibile']."' where prodotto_id = '".$key."'";
mysql_query($sql);

}


}

Xalexalex
07-08-2006, 11:05
Guarda avevo postato la stessa richiesta su html.it e mi hanno risposto con una soluzione adatta.

Praticamente faccio un matrice per i valori dei campi così recupero tutto in un unico ciclo foreach e stampo i valori leggendoli dagli ulteriori array annidati 'prodotto_nome' e 'prodotto_visibile'.



<input type="text" name="array[<?php echo prodotto_id?>]['prodotto_nome']" value="" />
<input type="text" name="array[<?php echo prodotto_id?>]['prodotto_visibile']" value="" />



Credo fosse la stessa cosa che mi avevi suggerito, comunque grazie.

Cmq tenetevi pronti perchè prima o poi torno. :D
Come hai osaatoooo!!!! Si cmq era +o- quello che dicevo io.
Ciaozz