query con for

           for($i = 1;$i <= 8;$i++)

                 {

                 $prezzo  = $_POST['prezzo_'.$i];

                 $periodo = $_POST['periodo_'.$i];

                 if(!empty($prezzo)){ $prezzi['prezzo_'.$i] .= $prezzo; }

                 if(!empty($periodo)){ $periodi['periodo_'.$i] .= $periodo; }

                 }

con questo raccolgo i dati presi da 8 campi da una pagina questo mi crea 2 array che se il campo è vuoto viene saltato

Array

(

    [prezzo_1] => 66

    [prezzo_2] => 676

    [prezzo_3] => 66

    [prezzo_4] => 66

    [prezzo_5] => 66

    [prezzo_6] => 66

    [prezzo_7] => 66

)

Array

(

    [periodo_1] => 234

    [periodo_2] => 234

    [periodo_3] => 76366

    [periodo_4] => 3663463

    [periodo_5] => 36346

    [periodo_6] => 35636

)

in questo modo se compila 4 campi ne vengono passati 4

lasciamo perdere quest ora

devo creare la query :

INSERT INTO tabella ('prezzi_1','PREZZI_2','prezzi_3' ) e così via anche per i periodi solo che non so come fare a limitare la query ai soli campi completatati ... cioè se uno non compila il campo inserisce il record vuoto ... ma voglio fare se ha compilato 3 campi ne inserisce solo 3 ( prezi e periodo devono stare per forza accoppiati )  :P

inviato 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Per avere nell'array solo prezzi e periodi accopiati ti conviene fare in questo modo:

if(!empty($prezzo) && !empty($periodo))

{

   $prezzi['prezzi_'.$i] = $prezzo;

   $periodi['periodi_'.$i] = $periodo;

}

Poi devi estrarre dagli array chiavi e valori:

$chiavi = array_keys($prezzi);

$valori = array_values($prezzi);

poi con una implode crei la query:

$nome_campi = implode("','" , $chiavi);

$valori_campi = implode("','" , $valori);

$query = "INSERT INTO tabella ('$nome_campi') VALUES ('$valori_campi');

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
                 $prezzi = array();

                 $periodi = array();

             for($i = 1;$i <= 8;$i++)

                 {

                 $prezzo  = $_POST['prezzo_'.$i];

                 $periodo = $_POST['periodo_'.$i];

                

                 if(!empty($prezzo) && !empty($periodo))

               {

                  $prezzi['prezzo_'.$i] = $prezzo;

                  $periodi['periodo_'.$i] = $periodo;

               }

                 }

                $chiavi = array_keys($prezzi);

                $valori = array_values($prezzi);

            $nome_campi = implode("`,`" , $chiavi);

            $valori_campi = implode("','" , $valori);

            $query_bb = "INSERT INTO prezzi_bb (`$nome_campi`) VALUES ('$valori_campi')";

così mette solo i prezzi e dimentica i periodi :(

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

provato in questo modo

                 $prezzi = array();
                 $periodi = array();

             for($i = 1;$i <= 8;$i++)
                 {
                 $prezzo  = $_POST['prezzo_'.$i];
                 $periodo = $_POST['periodo_'.$i];
                
                 if(!empty($prezzo) && !empty($periodo))
               {
                  $prezzi['prezzo_'.$i]   = $prezzo;
                  $periodi['periodo_'.$i] = $periodo;
               }
                 }

                $chiavi = array_keys($prezzi);
                $valori = array_values($prezzi);
                $chiavi_2 = array_keys($periodi);
                $valori_2 = array_values($periodi);

            $nome_campi   = implode("`,`" , $chiavi);
            $valori_campi = implode("','" , $valori);
            $nome_campi   .= implode("`,`" , $chiavi_2);
            $valori_campi .= implode("','" , $valori_2);
            
            $query_bb = "INSERT INTO prezzi_bb (`$nome_campi`) VALUES ('$valori_campi')";
            
            echo '<p>'.$query_bb.'</p>';

 ma in questo modo produce :

INSERT INTO prezzi_bb (`prezzo_1`,`prezzo_2`,`prezzo_3`,`prezzo_4`,`prezzo_5periodo_1`,`periodo_2`,`periodo_3`,`periodo_4`,`periodo_5`) VALUES ('34534534535','345','35','345','345asd4','asd','ad','asd','asd')

gia è meglio ma come separo prezzo 5 e periodo 1

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Il problema non è nel codice che elabora il form ma è nel form stesso. Secondo me il nome di qualche campo diventa "prezzo_5periodo_1". Visualizza l'HTML del form e verifica i nomi dei campi.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

 [nome] =>

    [desc] =>

    [loc] => 1

    [posti] => 1

    [servizi] =>

    [periodo_1] => 1

    [prezzo_1] => 2

    [periodo_2] => 3

    [prezzo_2] => 4

    [periodo_3] => 5

    [prezzo_3] => 6

    [periodo_4] => 7

    [prezzo_4] => 8

    [periodo_5] =>

    [prezzo_5] =>

    [periodo_6] =>

    [prezzo_6] =>

    [periodo_7] =>

    [prezzo_7] =>

    [periodo_8] =>

    [prezzo_8] =>

l'errore si trova nel codice che elabora i dati :( ma nn riesco a risolverlo ...

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
modificato 10 anni fa
X 0 X

Hai ragione, sorry.

Prova così:

$prezzi = array();

$periodi = array();

for($i = 1;$i <= 8;$i++)

{

   $prezzo  = $_POST['prezzo_'.$i];

   $periodo = $_POST['periodo_'.$i];

   if(!empty($prezzo) && !empty($periodo))

   {

      $prezzi['prezzo_'.$i]   = $prezzo;

      $periodi['periodo_'.$i] = $periodo;

   }

}

$chiavi = array_keys($prezzi) + array_keys($periodi);

$valori = array_values($prezzi) + array_values($periodi);

$nome_campi   = implode("`,`" , $chiavi);

$valori_campi = implode("','" , $valori);

$query_bb = "INSERT INTO prezzi_bb (`$nome_campi`) VALUES ('$valori_campi')";

echo '<p>'.$query_bb.'</p>';
risposto 10 anni fa
Gianni Tomasicchio
X 0 X

oddio :| INSERT INTO prezzi_bb (`prezzo_1`,`prezzo_2`,`prezzo_3`,`prezzo_4`) VALUES ('234','234','4234','asdrf')

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

A-ri-sorry:

$chiavi = array_merge(array_keys($prezzi) , array_keys($periodi));

$valori = array_merge(array_values($prezzi) , array_values($periodi));

[OT] Si vede che sono a pezzi? [/OT]

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

si ho notato :D nessun problema Gianni non ti preoccupare ... vai a dormire va che ti riposi un po!

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Gianni che tu sappia con MYSQL query browser posso vedere le query quando le eseguo come gli update e gli insert ? che mi annoio a riscrivere i campo della tabella per ogni query :)

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Adesso funziona il codice?

Con MYSQL query browser puoi solo scrivere "manualmente" delle query e farle eseguire.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

si il codice funziona alla grande :D

ah lol io le query le scrivo già  a mano :D solo che è alquanto noioso riscrivere i nomi dei campi :(

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

aaaaah mi viene da piangere gianni  devo fare la stessa cosa ma per un update

come metto le coppie chiave=valore  con il metodo di prima?

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Prova con qualcosa del genere:

$dati = array();

foreach ($prezzi as $key => $value)

   $dati[] = "`$key` = '$value'";

   

foreach ($periodi as $key => $value)

   $dati[] = "`$key` = '$value'";

   

$dati = implode(", " , $dati);

$query_bb = "UPDATE prezzi_bb SET $dati WHERE ???";

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ancora grazie.. ascolta al phpday mi porto 50 così ti pago ?? :D

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

 :2funny:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

il colmo:

query esatta... non produceva nessun mysql_error ... 45 minuti per capire che nn andava ... dopo 50 minuti mi scappa l'occhio e vedo che al mysql_query c'era $query al posto di $query2 che era il nome della seconda query

 :2funny:

sono gli errori bastardi che ti fanno uscire di testa questi!!! >:D

risposto 10 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda