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

Discussione: Problema pagina di modifica PHP SQL

  1. #1
    Guest

    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 = 7: You have an error in your SQL syntax; check 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
    22,067

    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 AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    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:


  4. #4
    Guest

    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 AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    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:


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
  •