PDA

View Full Version : [PHP] update multipli


anonimizzato
06-08-2006, 19: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, 20: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, 11: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, 11:25
Se hai modo allega le due pagine, oppure mandale per mail a [email protected] e te le modifico, spiegarlo a parole mi riesce un po' difficile...
Ciao
Alex

anonimizzato
07-08-2006, 11: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, 11: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, 12: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

Hardware Upgrade Forum Database Error
Database Error Database error
The Hardware Upgrade Forum database has encountered a problem.

Please try the following:
  • Load the page again by clicking the Refresh button in your web browser.
  • Open the www.hwupgrade.it home page, then try to open another page.
  • Click the Back button to try another link.
The www.hwupgrade.it forum technical staff have been notified of the error, though you may contact them if the problem persists.
 
We apologise for any inconvenience.