Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    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.
    Le istruzioni sono grosso modo queste:
    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
    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 nomi dei campi della tabella sono rispettati...

    La pagina web segnala soltanto il messaggio del die senza alcun dettaglio sull'errore.

  2. #2
    Togli la virgola prima di where

  3. #3
    Giusta osservazione ma il problema persiste identico.

  4. #4
    Fatti stampare $sql e postalo che lo si controlla

  5. #5
    Probabilmente $tabella non va tra apici

  6. #6
    La stampa di $sql è esattamente la stringa $sql con i valori delle variabili anziché i loro nomi.
    Nella discussione ho tralasciato delle variabili passate per non appesantire il codice, questo è l'UPDATE completo che voglio eseguire e di seguito come lo stampa echo, la modifica è stata fatta sulla variabile Autori, correttamente caricata in memoria ma che non arriva nel db ($link è vuota nel record in questione):
    Codice PHP:
    $sql "UPDATE '$tabella' SET Autori='$autori', Protagonista='$protagonista', Titolo='$titolo', Versione='$v', Ristampa='$r', Pagine='$pagine', Link='$link', Trama='$trama', Recensore='$recensore' WHERE id='$id'";

    UPDATE 'schede' SET Autori='Alberico Motta, Pierluigi Sangalli'Protagonista='Braccio di Ferro'Titolo='L'isola del gigante', Versione='1', Ristampa='0', Pagine='24', Link='', Trama='Grissino tenta di scambiare uno scoglio con un vestito e una barca della sua misura.', Recensore='Gaspare Pero' WHERE id='1

  7. #7
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    La stampa di $sql è esattamente la stringa $sql con i valori delle variabili anziché i loro nomi.[/PHP]
    ma è essenziale per capire gli errori, come vedrai

    1. il nome della tabella NON va tra apici
    2. il titolo contiene un apice, sostituiscilo con 2 (fallo per tutti i campi stringa, non si sa mai)
    3. accertati che tutti i campi numerici (per esempio Id) non siano tra apici

    se ci fossimo fidati dell'istruzione, non avremmo capito

  8. #8
    1. Tolti gli apici al nome tabella
    2. I doppi apici sono già predisposti nell'acquisizione dei parametri via POST (str_replace()), col risultato di mostrare due apostrofi dove ce n'è uno
      Codice PHP:
      $titolo=$_POST['titolo']; $titolo==str_replace("'","''",$titolo); 
    3. Tolti nel comando UPDATE tutti gli apici ai valori numerici.


    Non si è risolto nulla.
    UPDATE schede SET Autori='Alberico Motta, Pierluigi Sangalli', Protagonista='Braccio di Ferro', Titolo='L''isola del gigante', Versione=1, Ristampa=0, Pagine=24, Link='', Trama='Grissino tenta di scambiare uno scoglio con un vestito e una barca della sua misura.', Recensore='Gaspare Pero' WHERE id=1
    Errore nel database:
    In merito al togliere gli apici, va detto che una delle tabelle ha il campo Ristampa necessariamente varchar, ma la pagina modifica.php gestisce tutti gli update al db... Per questo credevo che facendo una sorta di casting a varchar potessi uniformare, tanto più che quei valori non sono mai utilizzati per dei conteggi.

  9. #9
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Non si è risolto nulla.
    che errore ricevi?

  10. #10
    Nessuno, semplicemente mi entra in questo if e lo esegue
    Codice PHP:
    if (!$result) {
        die(
    'Errore nel database: ' mysqli_error());

    Mostrasse un codice di errore canonico, potrei indagare, ma anche inserendo un argomento in mysqli_error(), non stampa nulla.
    E ovviamente il db non si aggiorna.

    A sensazione c'è un problema nella gestione degli apici: se faccio str_replace() da uno a due, me ne stampa due su browser (L''isola), quando a me serve che quell'apostrofo giunga nel db.

    ---

    Come non detto: anche intervenendo su un record del tutto privo di apostrofi, analogo risultato!
    Ultima modifica di Gas75; 11-05-2020 a 17:03

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 © 2024 vBulletin Solutions, Inc. All rights reserved.