Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 46
  1. #1
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106

    UPDATE anomalo - ok solo in locale

    Ho problema stranissimo.
    Estraggo dei dati da un DB e li utilizzo per redigere un form che invio alla pagina stessa per l'update.
    Questo è il codice che dal ciclo while sviluppo per il form:
    $rigaclassifica .= "<tr>
    <td width=\"250\">
    <input type=\"hidden\" name=\"id[$id]\" value=\"$riga[id]\">
    <input type=\"text\" name=\"interprete[$id]\" size=\"33\" value=\"$riga[interprete]\"></td>
    <td width=\"243\"><input type=\"text\" name=\"titolo[$id]\" size=\"32\" value=\"$riga[titolo]\"></td>
    <td width=\"61\"><input type=\"text\" name=\"pos_prec[$id]\" size=\"5\" value=\"$riga[pos_nuova]\"></td>
    <td width=\"66\"><input type=\"text\" name=\"pos_nuova[$id]\" size=\"5\" value=\"\"></td>
    <input type=\"hidden\" name=\"nome_destinazione\" value=\"$cod_class\">
    </tr>";

    fino a qui tutto ok, l'output html è corretto.

    Poi recupero i dati del form e li sviluppo per inviarli al DB per l'UPDATE.

    if(!empty($_POST))
    {
    if (!$_POST['fatto']) {
    echo ("<CENTER>


    [b]ATTENZIONE. Non selezionato la cella di controllo \"FATTO\");

    exit;
    }else{
    $cod_class = $_POST ['nome_destinazione'];
    foreach($_POST as $key => $value ) { $campo[] = $key;
    }
    foreach($_POST[$campo[0]] as $key0 => $val0 ) {
    $id[] = $val0;
    }
    foreach($_POST[$campo[1]] as $key1 => $val1 ) {
    $interprete[] = $val1;
    }
    foreach($_POST[$campo[2]] as $key2 => $val2 ) {
    $titolo[] = $val2;
    }
    foreach($_POST[$campo[3]] as $key3 => $val3 ) {
    $pos_prec[] = $val3;
    }
    foreach($_POST[$campo[4]] as $key4 => $val4 ) {
    $pos_nuova[] = $val4;
    }

    $lastupdate= date('d-m-Y');
    for($i = 0; $i < count($id); $i++) {
    $update = "UPDATE $nome_tabella SET
    interprete = '$interprete[$i]',
    titolo = '$titolo[$i]',
    pos_prec = '$pos_prec[$i]',
    pos_nuova = '$pos_nuova[$i]',
    lastupdate = '$lastupdate'
    where id = '$id[$i]'";
    $risultato = mysql_query ($update, $connessione)
    or die ("Impossibile inserire i dati nella tabella $nome_tabella");
    }
    }
    }else{
    $cod_class = $_GET['dest'];
    }

    FUNZIONA MERAVIGLIOSAMENTE IN LOCALE! Sul server mi succede questo:
    se i dati che vado ad estrarre sono i primi della tabella (id autoincrement e consecutivi dal numero 1) aggiorna bene, ma se li recupero a in base ad altre condizioni (ad esempio solo quelli "xyz") o non li aggiorna o me ne aggiorna solo alcuni.
    Ho cancellato le prime 2 righe della tabella (id 1 e 2) e poi sono andato a prelevare le righe dalla 13 alla 22. Invio il form per l'update e lui mi agiorna solo le righe dalla 13 alla 19 compresa... delle altre manco esistono....
    Cosa può essere? Sbaglio qualcosa nel ciclo foreach? qualche variabile che il server, un pò più inquadato del mio pc, non mi lascia passare?

    Vi prego, se potete datemi degli input... non so più cosa provare
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

  2. #2
    Messo giu cosi' lo script non si capisce niente. Mettilo almeno tra tag code...

    Hai un errore... all'inizio, non chiudi le virgolette dell'echo, ma potrebbe essere un semplice errore di copia incolla....

    codice:
    if(!empty($_POST)) 
    { 
    if (!$_POST['fatto']) { 
    echo ("<CENTER>
    
    
    [b]ATTENZIONE. Non selezionato la cella di controllo \"FATTO\"); 
    
    exit; 
    }else{ 
    ...
    Non usare le parentesi per echo... non e' una funzione.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Stampa l'array $_POST all'inizio pagina...

    echo "<pre>";
    print_r($_POST);

    e vedi cosa contiene ... altrimenti come si fa a darti una indicazione....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106
    grazie Piero ma sto in un'agitazione che mi sento un rimbabito...
    Per i tag, non riesco a scriverlo come vorresti... non ci ho capito niente... code... list quote... devo impaginarlo manualmente?

    Per le parentesi ok, hai ragione...
    per l'array l'ho fatto e mi da un bel niente... Mi scrive Array 3 volte, tante quante sono le righe che sto cercando di variare in locale (che qui funziona tra l'altro)

    A costo di riscriverlo da zero te lo formatto in modo che si possa comprendere.
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

  5. #5
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106
    ce l'ho fatta....:
    codice:
    if(!empty($_POST))
     {
                      if (!$_POST['fatto']) {
                      echo "<CENTER>
    
    
    [b]ATTENZIONE. Non selezionato la cella di controllo \"FATTO\".
    
                      I tuoi dati non sono andati persi!!! :)
    
                      Torna alla pagina precedente con il tasto INDIETRO del browser,
    
                      seleziona con il flag la casella di controllo e poi procedi con l'invio.
    
                      Fai ATTENZIONE a non lasciare celle vuote per non rischiare di sovrascrivere
    
                      con spazi vuoti eventuali dati già inseriti.";
    
                      exit;
                      }else{
                            $cod_class = $_POST ['nome_destinazione'];
                            foreach($_POST as $key => $value ) { $campo[] = $key;
                            }
                            foreach($_POST[$campo[0]] as $key0 => $val0 ) {
                            $id_salsa1[] = $val0;
                            }
                            foreach($_POST[$campo[1]] as $key1 => $val1 ) {
                            $interprete[] = $val1;
                            }
                            foreach($_POST[$campo[2]] as $key2 => $val2 ) {
                            $titolo[] = $val2;
                            }
                            foreach($_POST[$campo[3]] as $key3 => $val3 ) {
                            $pos_prec[] = $val3;
                            }
                            foreach($_POST[$campo[4]] as $key4 => $val4 ) {
                            $pos_nuova[] = $val4;
                            }
    
                            $lastupdate= date('d-m-Y');
                            for($i = 0; $i < count($id_salsa1); $i++) {
                            $update = "UPDATE $nome_tabella SET
                            interprete = '$interprete[$i]',
                            titolo = '$titolo[$i]',
                            pos_prec = '$pos_prec[$i]',
                            pos_nuova = '$pos_nuova[$i]',
                            lastupdate = '$lastupdate'
                            where id_salsa1 = '$id_salsa1[$i]'
                            ";
                            $risultato = mysql_query ($update, $connessione)
                            or die ("Impossibile inserire i dati nella tabella $nome_tabella");
                            echo "<pre>";
                            print($_POST);
                            }
                            }
    }else{
     $cod_class = $_GET['dest'];
    }
    //*************************************************************************************
    $sql2 = "SELECT * FROM $nome_tabella WHERE nome_tab_salsa = '$cod_class' ORDER by pos_nuova ASC";
    $result2 = mysql_query($sql2, $connessione);
    $res_count = mysql_num_rows($result2);
    
    while($riga = mysql_fetch_array($result2)) {
        $id_salsa1 = $riga['id_salsa1'];
                $rigaclassifica .= "<tr>
                        <td width=\"250\">
                        <input type=\"hidden\" name=\"id_salsa1[$id_salsa1]\" value=\"$riga[id_salsa1]\">
                        <input type=\"text\" name=\"interprete[$id_salsa1]\" size=\"33\" value=\"$riga[interprete]\"></td>
                        <td width=\"243\"><input type=\"text\" name=\"titolo[$id_salsa1]\" size=\"32\" value=\"$riga[titolo]\"></td>
                        <td width=\"61\"><input type=\"text\" name=\"pos_prec[$id_salsa1]\" size=\"5\" value=\"$riga[pos_nuova]\"></td>
                        <td width=\"66\"><input type=\"text\" name=\"pos_nuova[$id_salsa1]\" size=\"5\" value=\"\"></td>
                        <input type=\"hidden\" name=\"nome_destinazione\" value=\"$cod_class\">
                        </tr>";
    
                }
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

  6. #6
    La stampa dell'array POST mettila prima di processare il primo foreach.

    Se e' vuoto significa che passa un bel nulla.

    poi se hai copiato da qualcosa che avevo postato, sappi che non ho una biblioteca di casistiche a disposizione, ma sono cose che scrivo al volo e quindi a seconda del bisogno.

    Se funziona in locale l'aggiornamento su db, il problema puo' essere nei dati passati dalla select su db.

    metti la stampa di quello che estrai in ogni foreach... e ti renderai conto.

    In altre parole. Prima di tutto deve essere correttamente popolato il form e lo vedi analizzando il codice HTML prodotto.

    Deve essere correttamente impostato l'array POST e lo puoi vedere della stampa con print_r($_POST).

    Se l'errore persiste sarebbe errata la struttura dei foreach... e comunque non funzionerebbe in locale.

    Controlla anche le versioni di php e mysql tra il locale e l'host.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106
    Ho messo quella benedetta stampa dell'array POST in ogni buco che ho potuto, prima, durante e dopo. Sono consapevole di toppare pure in quello. Ovunque lo metta mi ritrovo una sfilza di "Array".

    Come sai ho preso parte di quello che hai visto da un tuo post per il quale era ultra chiaro che lo avevi scritto su dui piedi. Per questo ho constatato la tua dimestichezza e pensato potessi aiutarmi con maggiore naturalezza, nonostante i miei impedimenti.

    Così come lo leggi in locale mi passa le informazioni nel modo corretto nel DB. Nonostante questo il print del POST mi da la serie di scritte array (ed è per questo che ho dei dubbi di non saperlo infilare nel posto giusto).

    Per ogni foreach ho messo un Print così
    codice:
    foreach($_POST[$campo[2]] as $key2 => $val2 ) {
                            $titolo[] = $val2;
                            print($_POST);
                            }
    e mi esce sempre la scritta array. Ma ripeto... nel DB arriva tutto perfetto.

    Il form è perfettamente popolato. numeri id correttamente associati ad ogni campo.

    L'array POST non so se è correttamente impostato e vorrei saperlo + di chiunque altro... forse il problema è li. Con print stampo le info, ma con print_r invece non ho mai avuto modo di usarlo. Ho provato, ma nulla (errore sicuramente mio).

    Quello che andrò a fare appena postato è controllare le versioni del PHP e MYSQL tra locale e server... poi ti potrò dire, almeno per togliere il dubbio anche a te che hai cercato di aiutarmi.
    Grazie
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

  8. #8
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106
    Ho rilevato queste impostazioni:
    MYSQL in locale 4.1.9
    MYSQL su server 4.0.24

    PHP locale 4.3.10
    PHP server 4.3.11

    può essere che magari la versione di mysql che c'è sul server non mi consenta alcune cose che invece sono fattibili con quella del locale.
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

  9. #9
    codice:
             }else{
                  $cod_class = $_POST ['nome_destinazione'];
    
                  echo "<pre>";
                  print_r($_POST);
                  reset($_POST);
                  echo "</pre>";
    
                 foreach($_POST as $key => $value ) { 
                    $campo[] = $key;
                    }
    dovresti metterlo in questa posizione. Non mettere print_r da altre parti perche' lascia il puntatore dell'array al fondo.... va resettato dopo l'uso...

    posta quello che ti stampa.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it L'avatar di Airfry
    Registrato dal
    Jan 2003
    Messaggi
    106
    mi stampa questo:
    Array
    (
    [id_salsa1] => Array
    (
    [57] => 57
    [16] => 16
    [56] => 56
    )

    [interprete] => Array
    (
    [57] => primo_interpr
    [16] => secondo_interpr
    [56] => terzo_interpr
    )

    [titolo] => Array
    (
    [57] => titolo_primo
    [16] => titolo_secondo
    [56] => titolo_terzo
    )

    [pos_prec] => Array
    (
    [57] => 4
    [16] => 5
    [56] => 6
    )

    [pos_nuova] => Array
    (
    [57] => 1
    [16] => 2
    [56] => 3
    )

    [nome_destinazione] => S1118593394
    [fatto] => ON
    [submit] => Aggiorna la Classifica
    )

    ArrayArrayArrayArrayArrayArray
    Lo spartito della vita
    è un insieme di note.
    Ognuno è artefice della propria armonia.

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.