Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Update

  1. #1

    Update

    Ho da poco cominciato a studiare un po' il php grazie alle guide del sito.

    Il servizio hosting utilizza la versione 5.2.6-3 di php

    nella progettazione delle mie pagine web mi sono arenato sulla modifica dei record.
    Dopo aver modificato i dei dati da questa pagina:
    http://www.scuotivento.it/edit_libro.php?id=3

    un metodo post invia i dati per la modifica a questa:

    file save_edit_libro.php
    Codice PHP:
    <?
    include ("config.inc.php");
    include (
    "top_foot.inc.php");
    include (
    "menu.inc.php");

    //intestazione
    top();
    menu();

    if (
    $_POST['pass'] != $password){
        echo 
    "<h1>Password errata</h1>";
    }else {
        
    $ciclo $_REQUEST['ciclo'];
        
    $genere $_REQUEST['genere'];
        
    $titolo $_REQUEST['titolo'];
        
    $titolooriginale $_REQUEST['titolooriginale'];
        
    $autore $_REQUEST['autore'];
        
    $annopubblicazione $_REQUEST['annopubblicazione'];
        
    $traduttore $_REQUEST['traduttore'];
        
    $annotraduzione $_REQUEST['annotraduzione'];
        
    $trama $_REQUEST['trama'];
        
    $notetrama $_REQUEST['notetrama'];
        
    $citazione1 $_REQUEST['citazione1'];
        
    $fonte1 $_REQUEST['fonte1'];
        
    $citazione2 $_REQUEST['citazione2'];
        
    $fonte2 $_REQUEST['fonte2'];
        
    $citazione3 $_REQUEST['citazione3'];
        
    $fonte3 $_REQUEST['fonte3'];
    }

    if (
    trim($_POST[titolo]) == ""):
        echo 
    "<h1>Il campo Titolo deve essere riempito!</h1>";
    else :
        
    $genereaddslashes(stripslashes($genere));
        
    $titolo addslashes(stripslashes($titolo));
        
    $titolooriginaleaddslashes(stripslashes($titolooriginale));
        
    $tramaaddslashes(stripslashes($trama));
        
    $notetramaaddslashes(stripslashes($notetrama));
        
    $citazione1addslashes(stripslashes($citazione1));
        
    $fonte1addslashes(stripslashes($fonte1));
        
    $citazione2addslashes(stripslashes($citazione2));
        
    $fonte2addslashes(stripslashes($fonte2));
        
    $citazione3addslashes(stripslashes($citazione3));
        
    $fonte3addslashes(stripslashes($fonte3));

        
    //connessione al database
        
    $db mysql_connect($db_host$db_user$db_password);
        if (
    $db == FALSE)
            die (
    "<h1>Errore nella connessione. Verificare i parametri nel file config.inc.php</h1>");

        
    mysql_select_db($db_name$db)
            or die (
    "<h1>Errore nella selezione del database. Verificare i parametri nel file config.inc.php</h1>");

        
    $query "UPDATE libri SET ciclo='$ciclo', genere='$genere', titolo='$titolo', titolooriginale='$titolooriginale', autore='$autore', annopubblicazione='$annopubblicazione', traduttore='$traduttore', annotraduzione='$annotraduzione', trama='$trama', notetrama='$notetrama', citazione1='$citazione1', fonte1='$fonte1', citazione2='$citazione2', fonte2='$fonte2', citazione3='$citazione3', fonte3='$fonte3' WHERE id='&id'";

        if (
    mysql_query($query$db))
            echo 
    "<h1>L'articolo è stato modificato correttamente</h1>";
        else
            echo 
    "<h1>Errore durante la modifica</h1>";


        
    endif; 
    // chiude la verifica della presenza dei dati
    mysql_close($db);
    foot();
    ?>
    I dati non vengono modificati, ma il controllo che faccio sulla query mi dice che:
    L'articolo è stato modificato correttamente
    percui:
    if (mysql_query($query, $db)) è vero.

    Dov'è che sbaglio?

    Grazie
    Scuotivento.it - Il sito dedicato al magico Mondo Disco

  2. #2
    mysql_query non ritorna un bool, utilizzabile nella verifica dell'esecuzione della query, ma ritorna un resource
    Quindi per monitorare la query puoi fare :
    Codice PHP:
    $risultato mysql_query($query$db)
        or die(
    "Query non valida: " mysql_error()); 
    cosa aggiuntiva che puoi fare è un controllo sul numero di righe affette dalla query con mysql_affected_rows
    se update, delete o insert; mentre nel caso di select lo puoi fare con mysql_num_rows

    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  3. #3
    Scusa ma non ho capito cosa devo modificare per far funzionare la modifica

    Questa istruzione ad esempio:
    Codice PHP:
    $query "UPDATE libri SET ciclo='$ciclo', genere='$genere', titolo='$titolo', titolooriginale='$titolooriginale', autore='$autore', annopubblicazione='$annopubblicazione', traduttore='$traduttore', annotraduzione='$annotraduzione', trama='$trama', notetrama='$notetrama', citazione1='$citazione1', fonte1='$fonte1', citazione2='$citazione2', fonte2='$fonte2', citazione3='$citazione3', fonte3='$fonte3' WHERE id='&id'"
    è corretta?
    Scuotivento.it - Il sito dedicato al magico Mondo Disco

  4. #4
    confronta quello che ho scritto io con quello che hai scritto tu, il pezzo della query e poi leggi quello che ho scritto. Al massimo fai un salto sulla pagina linkata che è il manuale ufficiale di php
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  5. #5
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    Ciao,

    al posto di
    Codice PHP:
    if (mysql_query($query$db)) 
            echo 
    "<h1>L'articolo è stato modificato correttamente</h1>"
        else 
            echo 
    "<h1>Errore durante la modifica</h1>"
    prova a scrivere:

    Codice PHP:
    $sql =@mysql_query($query);
     
    if (
    mysql_num_rows($sql)==0)
    {
       
    // nessun riscontro
       
    echo "<h1>Errore durante la modifica</h1>";
    }
    else
    {
       
    // riscontro ok
       
    echo "<h1>L'articolo è stato modificato correttamente</h1>"



    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

  6. #6
    Originariamente inviato da echoweb
    prova a scrivere:

    Codice PHP:
    $sql =@mysql_query($query);
     
    if (
    mysql_num_rows($sql)==0)
    {
       
    // nessun riscontro
       
    echo "<h1>Errore durante la modifica</h1>";
    }
    else
    {
       
    // riscontro ok
       
    echo "<h1>L'articolo è stato modificato correttamente</h1>"

    Grazie ora il controllo funziona

    la tabella non viene aggiornata e giustamente visualizzo: "Errore durante la modifica"

    L'update continua a non funzionare ho provato a sostituirlo con:

    Codice PHP:
        $id=$_GET['id'];
    $query "UPDATE libri SET ciclo='$ciclo', genere='$genere', titolo='$titolo', titolooriginale='$titolooriginale', autore='$autore', annopubblicazione='$annopubblicazione', traduttore='$traduttore', annotraduzione='$annotraduzione', trama='$trama', notetrama='$notetrama', citazione1='$citazione1', fonte1='$fonte1', citazione2='$citazione2', fonte2='$fonte2', citazione3='$citazione3', fonte3='$fonte3' WHERE id='$id'"
    ma niente..
    Scuotivento.it - Il sito dedicato al magico Mondo Disco

  7. #7
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    1)
    Codice PHP:
    $sql =@mysql_query($query); 
    Questo è un ABOMINIO da evitare come la peste.
    Codice PHP:
    $sql =mysql_query($query) or die(mysql_error()); 
    2) NON E' VERO che mysql_query non restituisce un booleano. In caso di istruzione di aggiornamento restituisce proprio un booleano, invece
    For SELECT, SHOW, DESCRIBE, EXPLAIN and other statements returning resultset, mysql_query() returns a resource on success, or FALSE on error.

    For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.

    Per finire: probabilmente l'id lo devi prendere da $_POST e non da $_GET, visto che tutto il resto lo prendi da $_POST immagino che anche quello sia lì.

  8. #8
    Utente di HTML.it L'avatar di echoweb
    Registrato dal
    Sep 2008
    Messaggi
    419
    Allora, fai così:

    scrivi un echo davanti a $query, in modo che ti stampi a video la query con i dati che gli passi e poi copia il testo ed eseguilo dentro phpAdmin e guarda che errore ti da....

    Controlla che i nomi dei campi siano corretti e che ciò che gli passi sia corretto...


    "Non soffocare la tua ispirazione e la tua immaginazione,
    non diventare lo schiavo del tuo modello"

    Vincent van Gogh

  9. #9
    Originariamente inviato da luca200
    1)
    Codice PHP:
    $sql =@mysql_query($query); 
    Questo è un ABOMINIO da evitare come la peste.
    Codice PHP:
    $sql =mysql_query($query) or die(mysql_error()); 
    Grazie avevo sostituito questa parte come da te consigliato, però mi sono accorto che mysql_num_rows è valido solo per le istruzioni SELECT.
    Per UPDATE bisogna usare mysql_affected_rows

    Originariamente inviato da luca200
    Per finire: probabilmente l'id lo devi prendere da $_POST e non da $_GET, visto che tutto il resto lo prendi da $_POST immagino che anche quello sia lì.
    Mettendo echo davanti a $query ho scoperto che la query non funziona perchè non veniva passato nessun id.

    Il problema è che da $_POST non posso recuperare l'id perchè nella pagina che chiama save_edit_libro.php nel metodo post non c'è l'id visto che non è un campo che mi deve segnalare l'utente.

    $_GET ovviamente funzionava solo nella pagina che chiama save_edit_libro.php per cui ho risolto passando l'id per url nella pagina che chiamava save_edit_libro.php in questo modo:
    Codice PHP:
    <?echo "<form method=\"post\" action=\"save_edit_libro.php?id=$id\">"?>
    Ora l'inserimento funziona.

    Grazie a tutti per l'aiuto
    Scuotivento.it - Il sito dedicato al magico Mondo Disco

  10. #10
    Originariamente inviato da luca200
    1)
    Codice PHP:
    $sql =@mysql_query($query); 
    Questo è un ABOMINIO da evitare come la peste.
    Codice PHP:
    $sql =mysql_query($query) or die(mysql_error()); 
    ovvio... in fase di scrittura e test dell'applicazione bisogna vedere (e correggere) ogni minimo errore

    Originariamente inviato da luca200
    2) NON E' VERO che mysql_query non restituisce un booleano. In caso di istruzione di aggiornamento restituisce proprio un booleano, invece
    hai ragione... purtroppo mi sono fermato all'intestazione
    Codice PHP:
    resource mysql_query  string $query  [, resource $identificativo_connessione  [, int $modo_risultato  ]] ) 
    sorry...
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

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.