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

Discussione: Problema pagina di modifica PHP SQL

  1. #1
    doctorloois non è connesso Neofita
    Data registrazione
    19-02-2018
    Messaggi
    2

    Exclamation Problema pagina di modifica PHP SQL

    Salve, ho da poco iniziato ad approcciarmi al mondo PHP, e ho un problema che non riesco a risolvere, in pratica nel mio db ho inserito dei dati ovvero "titolo e contenuto" e stavo progettando un modo per poterli modificare utilizzando questa pagina.

    Codice PHP:
    <?php
    // richiamo il file di configurazione
    require 'config.php';


    if(
    $_POST && isset($_GET['id']))
    {
        
    aggiorna_record();
    }
    elseif(isset(
    $_GET['id']))
    {
        
    mostra_record();
    }
    else
        
    mostra_lista();

    function 
    mostra_lista()
    {
        
    // mostro un eventuale messaggio
        
    if(isset($_GET['msg']))
            echo 
    '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

        
    // preparo la query
        
    $query "SELECT id,titolo,contenuto FROM news";

        
    // invio la query
        
    $result mysql_query($query);

        
    // controllo l'esito
        
    if (!$result) {
            die(
    "Errore nella query $query: " mysql_error());
        }

        echo 
    '
        <table border="1">
            <tr>
                <th>titolo</th>
                <th>&nbsp;</th>
            </tr>'
    ;

        while (
    $row mysql_fetch_assoc($result))
        {
            
    $titolo htmlspecialchars($row['titolo']);

            
    // preparo il link per la modifica dei dati del record
            
    $link $_SERVER['PHP_SELF'] . '?id=' $row['id'];

            echo 
    "<tr>
                    <td>
    $titolo</td>
                    <td><a href=\"
    $link\">modifica</a></td>
                </tr>"
    ;
        }

        echo 
    '</table>';

        
    // libero la memoria di PHP occupata dai record estratti con la SELECT
        
    mysql_free_result($result);

        
    // chiudo la connessione a MySQL
        
    mysql_close();
    }

    function 
    aggiorna_record()
    {
        
    // recupero i campi di tipo "stringa"
        
    $titolo      trim($_POST['titolo']);
        
    $contenuto     trim($_POST['contenuto']);

        
    // verifico se devo eliminare gli slash inseriti automaticamente da PHP
        
    if(get_magic_quotes_gpc())
        {
            
    $titolo      stripslashes($titolo);
            
    $contenuto     stripslashes($contenuto);
        }

        
    // effettuo l'escape dei caratteri speciali per inserirli all'interno della query
        
    $titolo      mysql_real_escape_string($titolo);
        
    $contenuto   mysql_real_escape_string($contenuto);

        
    // recupero gli altri campi del form
        
    $id intval($_GET['id']);

        
    // verifico la presenza dei campi obbligatori
        
    if(!$titolo)
        {
            
    $messaggio urlencode("Non hai inserito il titolo");
            
    header("location: $_SERVER[PHP_SELF]?id=$id&msg=$messaggio");
            exit;
        }

        
    // preparo la query
        
    $query "UPDATE news SET
                    titolo = '
    $titolo',
                    contenuto = '
    $contenuto',
                    WHERE id = 
    $id";

        
    // invio la query
        
    $result mysql_query($query);

        
    // controllo l'esito
        
    if (!$result) {
            die(
    "Errore nella query $query: " mysql_error());
        }

        
    // chiudo la connessione a MySQL
        
    mysql_close();

        
    $messaggio urlencode('Aggiornamento effettuato con successo');
        
    header("location: $_SERVER[PHP_SELF]?msg=$messaggio");
    }

    function 
    mostra_record()
    {
        
    // mostro un eventuale messaggio
        
    if(isset($_GET['msg']))
            echo 
    '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

        
    $id intval($_GET['id']);

        
    // preparo la query
        
    $query "SELECT titolo,contenuto FROM news WHERE id = $id";

        
    // invio la query
        
    $result mysql_query($query);

        
    // controllo l'esito
        
    if (!$result) {
            die(
    "Errore nella query $query: " mysql_error());
        }

        
    // controllo che la SELECT abbia restituito un record
        // l'id passato via GET potrebbe essere stato manipolato
        
    if(mysql_num_rows($result) != 1) {
            die(
    "l'ID passato via GET è errato");
        }

        list(
    $titolo,$contenuto) = mysql_fetch_row($result);

        
    $titolo      htmlspecialchars($titolo);
        
    $contenuto     htmlspecialchars($contenuto);

        
    ?>
        <form name="form_registrazione" method="post" action="">
          <label>Titolo:
          <input name="titolo" type="text" value="<?echo $titolo?>" />
          </label>
          <p>
            <label>Contenuto:<br />
            <textarea name="contenuto" cols="40" rows="5"><?echo $contenuto?></textarea>
            </label>
          </p>
          <p>
            <input name="invia" type="submit" value="Invia" />
          </p>
        </form>
        <?
    }
    ?>
    solo che mi da questa riga in esecuzione.

    Codice PHP:
    Errore nella query UPDATE news SET titolo 'Astronauta su marte'contenuto 'marte finalmente colonizzato'WHERE id 7You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 7' at line 4 
    Qualcuno di buon cuore che possa aiutarmi ?

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

    Predefinito

    Non ho analizzato il codice, ma dal messaggio di errore vedo che hai messo una virgola prima della clausola "WHERE", eliminala.

    Ciao!

  3. #3
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    989

    Predefinito

    Non devi usare la virgola prima di WHERE.

    E non usare le funzioni mysql che sono deprecate, usa mysqli o PDO.

    Edit: Anticipato da alemoppo... :)
    Ultima modifica di mzanella : 17-05-2018 alle ore 13.33.14
    alemoppo likes this.

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


  4. #4
    doctorloois non è connesso Neofita
    Data registrazione
    19-02-2018
    Messaggi
    2

    Predefinito

    in realtà l'ho fatto e funziona, l'unico problema è che ora mi modifica tutti i dati ovvero anche quelli he non voglio modificare ad esempio ho due articoli modifico uno e me li modifica entrambi

  5. #5
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    989

    Predefinito

    Mostra il modo in cui stai costruendo la query di aggiornamento e la query effettivamente eseguita sulla base di dati (ad esempio aggiungendo echo $query; prima di eseguirla).

    I suggerimenti che do più spesso:
    • Le funzioni mysql_* sono deprecate. Usa PDO o MySQLi.
    • Non memorizzare le password in chiaro nella base di dati. Usa password_hash().
    • Indenta correttamente il codice e usa nomi significativi per gli identificatori.


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
  •