Visualizzazione risultati 1 fino 5 di 5
Like Tree1Likes
  • 1 Post By mzanella

Discussione: UPDATE più array di una tabella

  1. #1
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito UPDATE più array di una tabella

    Ciao a tutti, chiedo scusa per la domanda sciocca.
    Dopo aver inserito diversi parametri, mi accorgo di aver sbagliato qualcosa.
    Vado dunque sulla modifica dellapagina:

    pagina cambio_dati.php

    Codice PHP:
    <?php
    $iva
    = mysqli_query("SELECT * FROM iva WHERE id_fascicolo=". $_REQUEST['id_fascicolo'] ."", 'result');
    $i=1;
    while(
    $row=mysqli_query($iva, 'fetch')) {
    //in caso di modifica estraggo solo i risultati del fascicolo
    ?>
    <td>
    Cliente:
    <?php
    echo "<input style='width: 150px;' name='nome$i' value='".$row["nome"]."'>";
    ?>
    Commento:
    <?php
    echo "<input style='width: 350px;' name='commento$i' value='".$row["commento"]."'>";
    ?>
    Iva %:
    <?php
    echo "<select style='width: 50px;' name=iva$i>";
    for (
    $j = -10; $j <= 20; $j++) {
    echo
    '<option value=\''.($j/2).'\'';
    if ((
    $row['iva']==($j/2)) || ((''.$row['nome']=='') && ($j == 0))) {
    echo
    ' SELECTED';
    }
    echo
    '>'.($j/2).'</option>';
    }
    echo
    '</select>';
    ?>
    <br>
    </td>
    <?php
    $i
    = $i+1; }//chiusura while
    echo '</tr>';
    Fin qui, nulla di sbagliato. Mi seleziona tutti.
    Il problema nasce nella pagina edit.php, la pagina che si occupa di modificare:

    Codice PHP:
    for ($i = 1; $i <= 20; $i++) {
    if ((
    $_POST["nome$i"] != '') && ($_POST["iva$i"] != 0)) {

    $edit_iva = mysqli_query("UPDATE iva SET nome = '". $_POST["nome$i"] ."', commento = '". $_POST["commento$i"] ."', iva = '". $_POST["iva$i"] ."' WHERE id_fascicolo = ". $_POST['id_fascicolo']."");
    }
    //fine if
    }//fine for
    In questo caso sì che mi cambia i parametri dei dati relativi a id_fascicolo, ma me li cambia tutti con l'ultimo dato inserito nell'input della pagina modifica.php (quindi se ho 3 risultati e cambio solo il primo, come risultato avrò che il primo e il secondo vengono cambiati con i dati del terzo).

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Nella query di aggiornamento hai
    Codice:
    UPDATE via ... WHERE id_fascicolo = " . $_POST['id_fascicolo']
    la condizione non dipende da $i, quindi è normale che tutte le righe corrispondenti allo stesso fascicolo vengano modificate con gli stessi valori. Questo succede tante volte quante sono le iterazioni del ciclo for e, naturalmente, l'unica a permanere è quindi l'ultima.

    Dovresti usare un attributo che permetta di identificare univocamente le diverse righe che condividono l'id del fascicolo. Se non ce l'hai, devi rivedere lo schema del database.
    personalthings likes this.

    I suggerimenti che do più spesso:


  3. #3
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Nella query di aggiornamento hai
    Codice:
    UPDATE via ... WHERE id_fascicolo = " . $_POST['id_fascicolo']
    la condizione non dipende da $i, quindi è normale che tutte le righe corrispondenti allo stesso fascicolo vengano modificate con gli stessi valori. Questo succede tante volte quante sono le iterazioni del ciclo for e, naturalmente, l'unica a permanere è quindi l'ultima.

    Dovresti usare un attributo che permetta di identificare univocamente le diverse righe che condividono l'id del fascicolo. Se non ce l'hai, devi rivedere lo schema del database.
    Il dato univoco che ho nella tabella "iva" è ID.
    Dovrei estrarre quello per identificare univocamente le diverse righe?
    Se sì, come faccio a estrarlo e associarlo?

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Codice PHP:
    mysqli_query ( mysqli $link , string $query [, int $resultmode = MYSQLI_STORE_RESULT ] ) : mixed
    https://www.php.net/manual/en/mysqli.query.php
    Il primo parametro è la referenza della connessione, il secondo la query e il terzo se usare la memoria php o mysql con le costanti PHP.
    Secondo la mia comprensione il codice può
    solo essere usato come illustrato nella pseudo sintassi, sicuramente dovrai migliorare il tuo porting da mysql a mysqli.
    Ovviamente stai lavorando con variabili esterne (cioè create al di fuori della tua programmazione) dovresti validare/sanificare i valori con i Prepared Statement i sta per intero, d per numero in virgola mobile e s per stringa.
    cambio_dati.php devi anche inviare con il metodo POST (puoi anche farlo con un input type hidden) poi in edit.php lo recuperi con $_POST['id_fascicolo'] e controlla se esistono le variabili esterne
    Codice PHP:
    if(isset($_POST["name$i"], $_POST["iva$i"]) && $_POST["iva$i"]) {
    //qui con isset sto controllando solo due variabili ma dovrei controllarle tutte poiché sono variabili esterne.
    //prepared Statement e query per esistenza dato
    //Nel frattempo recupera anche ID il dato univoco della tabella iva in relazione per quei dati.
    }
    Dovrai anche effettuare un'ulteriore query se è realmente presente nel tuo database altrimenti non prosegui con il codice (è la pagina edit solo dati esistenti nel database, nello specifico si utilizza UPDATE per aggiornare dati già esistenti).
    Ultima modifica di darbula : 08-10-2020 alle ore 15.54.48

  5. #5
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Citazione Originalmente inviato da personalthings Visualizza messaggio
    Il dato univoco che ho nella tabella "iva" è ID.
    Dovrei estrarre quello per identificare univocamente le diverse righe?
    Se sì, come faccio a estrarlo e associarlo?
    Sì, quello andrà benissimo. Lo stai già leggendo tramite la SELECT, devi solo passarlo assieme agli altri parametri. Potresti usare un <input> di tipo hidden:
    Codice PHP:
    <?php
    echo "<input type='hidden' name='id$i' value='" . $row["id"] . "'>";
    ?>
    Cliente:
    ecc. ecc.
    quindi l'update diventa:
    Codice:
    UPDATE via ... WHERE id_fascicolo = " . $_POST['id$i']

    I suggerimenti che do più spesso:


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •