Visualizzazione risultati 1 fino 7 di 7

Discussione: UPDATE restituisce errore

  1. #1
    L'avatar di dampyr
    dampyr non è connesso Utente
    Data registrazione
    07-02-2011
    Residenza
    Corpo a Taranto, cuore a Bari
    Messaggi
    110

    Predefinito UPDATE restituisce errore

    Salve, non riesco a individuare l'errore di esecuzione di un UPDATE su database SQL.
    Prelevo i dati con un SELECT opportuno e li organizzo nei value di una serie di caselle <input> o <textarea> a seconda della lunghezza. Intervengo dove occorre e clicco sul pulsante di invio invocando l'action, cioè la pagina PHP dove c'è l'istruzione di UPDATE, ma ricevo sempre un errore nel senso che viene eseguito l'if di verifica sulla query e il browser stampa il messaggio del die, senza altre informazioni (mysqli_error() vuoto).
    Le istruzioni sono grosso modo queste (copio soltanto alcune delle variabili):
    Codice PHP:
    $id=$riga['id'];
    $autori=htmlspecialchars($riga['Autori'],ENT_QUOTES); // per problemi con gli apici/apostrofi
    $protagonista=htmlspecialchars($riga['Protagonista'],ENT_QUOTES); // idem
    $titolo=htmlspecialchars($riga['Titolo'],ENT_QUOTES); // idem
    echo "<form action='modifica.php' method='post' name='modifica' target='_blank'>\n";
    echo
    "<input type='hidden' name='tabella' value='$tabella'>\n<input type='hidden' name='id' value='$id'>\n";
    echo
    "<input type='text' name='autori' size='12' value='$autori'>\n";
    echo
    "<input type='text' name='protagonista' size='12' value='$protagonista'>\n<input type='text' name='titolo' size='12' value='$titolo'>\n";
    echo
    "<input type='submit' value='OK'>\n";
    echo
    "</form>";
    In modifica.php poi ho:
    Codice PHP:
    $tabella=$_POST['tabella'];
    $id=$_POST['id'];
    $autori=$_POST['autori'];
    $autori=str_replace("'","''",$autori);
    $protagonista=$_POST['protagonista'];
    $protagonista=str_replace("'","''",$protagonista);
    $titolo=$_POST['titolo'];
    $titolo==str_replace("'","''",$titolo);

    $sql = "UPDATE $tabella SET Autori='$autori', Protagonista='$protagonista', Titolo='$titolo' WHERE id=$id";
    $result = mysqli_query($link, $sql);
    if (!
    $result) { die('Errore nel database: ' . mysqli_error()); }
    Ovviamente i campi oggetto del SET sono correttamente trascritti nella query.
    Credevo ci fosse un problema con gli apostrofi/apici, ma ho il problema anche agendo su record con testi del tutto privi di apostrofi!
    Ho tentato a indicare $tabella e $id anche con gli apostrofi, niente!
    Anche facendo str_replace sull'apostrofo con \', l'echo di $sql stampa \' ma non invia al database!

    Nono so più dove sbattere la testa! Tutta la parte del sito dove effettuo dei SELECT funziona, ma nell'invio delle modifiche si blocca e non so come ottenere dettagli sull'errore dato che mysqli_error() è come se non ci fosse nell'istruzione dell'if!

    Aggiungo che l'echo di $sql stampa esattamente la query string di UPDATE coi valori al posto delle variabili.
    Ultima modifica di dampyr : 11-05-2020 alle ore 19.15.59

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,148

    Predefinito

    Hai fatto la connessione al database? "$link" ha un valore diverso da FALSE?

    Aggiungo che l'echo di $sql stampa esattamente la query string di UPDATE coi valori al posto delle variabili.
    Hai provato ad eseguirla su phpMyAdmin?

    Ciao!

  3. #3
    L'avatar di dampyr
    dampyr non è connesso Utente
    Data registrazione
    07-02-2011
    Residenza
    Corpo a Taranto, cuore a Bari
    Messaggi
    110

    Predefinito

    La connessione al database c'è attraverso un require che invoca il file conn.php:
    Codice PHP:
    <?
    $db_username
    = 'pugniespinaci';
    $db_password = '***';
    $db_host = 'localhost';
    $db_name = 'my_pugniespinaci';

    $link = mysqli_connect("$db_host", "$db_username", "$db_password", "$db_name") or die("Errore connessione");

    if (
    mysqli_connect_errno()) {
    echo
    "Errore apertura database";
    }
    mysqli_set_charset($link,"utf8");
    ?>
    Non saprei come fare a eseguire comandi dal pannello di phpMyAdmin: so creare tabelle, formattarle, importare file csv e poco altro.

    ---

    Credo di essere riuscito a inviare il comando da phpMyAdmin.
    Nel caso di record con apostrofi mi dice "ERROR virgolette non chiuse @ 291" e poi mi riporta il comando immesso.
    Nel caso di record senza apostrofi fa l'UPDATE, mentre da pagina php va in errore in entrambi i casi.
    Ultima modifica di dampyr : 11-05-2020 alle ore 22.59.03

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

    Predefinito

    Mi sembra che il parametro $link sia obbligatorio per mysqli_error, probabilmente è per questo che non ti viene mostrato alcun messaggio d'errore:
    Codice PHP:
    if (!$result) { die('Errore nel database: ' . mysqli_error($link)); }
    Nulla esclude che ci siano altri errori in altri punti della pagina che impediscono l'esecuzione della query. Aggiungi un
    Codice PHP:
    error_reporting(E_ALL);
    all'inizio dello script.

    I suggerimenti che do più spesso:


  5. #5
    L'avatar di dampyr
    dampyr non è connesso Utente
    Data registrazione
    07-02-2011
    Residenza
    Corpo a Taranto, cuore a Bari
    Messaggi
    110

    Predefinito

    mysqli_error(), con o senza argomenti, non stampa nulla, in sostanza è come se non lo mettessi nel die.

    Esito di error_reporting(E_ALL):
    Warning: mysqli_query() expects parameter 1 to be mysqli, string given in /membri/pugniespinaci/modifica.php on line 44

    Warning: mysqli_error() expects parameter 1 to be mysqli, string given in /membri/pugniespinaci/modifica.php on line 47
    In riga 44 c'è:
    Codice PHP:
    $result = mysqli_query($link, $sql);
    In riga 47 c'è l'operazione per if(!result):
    Codice PHP:
    die('Errore nel database: ' . mysqli_error($link));

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

    Predefinito

    Ecco perché: la query non viene nemmeno eseguita.
    Da qualche parte nel codice qualcosa sta modificando $link rendendolo una stringa anziché una connessione al database. Per semplificare l'effetto è analogo a:
    Codice PHP:
    $link = mysqli_connect(...);
    $link = 'stringa';
    $result = mysqli_query($link, "..."); // Errore
    Dai brani di codice che hai mostrato non si vede dov'è la sovrascrittura a $link, dev'essere altrove, tra il require che esegue la connessione e l'istruzione della query.

    Generalmente lavorare in questo modo, ovvero con uno stato globale inizializzato in un file che viene incluso poi da un'altra parte, non è una buona idea. C'è il rischio, come in questo caso, che un pezzo di codice da qualche parte vada a sovrascrivere accidentalmente una variabile globale. Piuttosto si può fattorizzare in una funzione da chiamare al bisogno.

    I suggerimenti che do più spesso:


  7. #7
    L'avatar di dampyr
    dampyr non è connesso Utente
    Data registrazione
    07-02-2011
    Residenza
    Corpo a Taranto, cuore a Bari
    Messaggi
    110

    Predefinito

    Trovato!
    Tra i campi della tabella ce n'è uno che si chiama "Link" (L maiuscola) ma per comodità uso variabili tutte in minuscolo, da cui l'omonimia dato che scrivevo:
    Codice PHP:
    $link = $_POST['link'];
    Rinominando in $linkv e sistemando ovviamente anche l'UPDATE, l'aggiornamento va in porto.

    Una stupidaggine che mi ha bloccato per giorni!.

    Grazie di avermi guidato in questa ricerca!

Tags for this Thread

Regole di scrittura

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