• User

    Modificare contenuti già inseriti in tabella mysql

    ciao a tutti,
    in un db mysql ho una tabella con una serie di colonne: id, titolo, testo, data, ecc... ed i relativi contenuti inseriti attraverso un form ad essa collegato...

    per completare l'opera vorrei capire come fare a modificare i contenuti già inseriti, ad esempio modificare il titolo della riga 1 o il testo della riga 2, ecc...

    immagino che mi occorra collegare 'post' un altro form ad una pagina tipo 'update.php', ad esempio:
    <form method="post" action="update.php">...

    ma nn so come collegare i campi del form alle celle della tabella, ne come compilare la pagina di update...

    una mano per favore...

    :ciauz:


  • User Attivo

    salve, innanzitutto ti introduco la sintassi MySql per aggiornare il valore dei campi di una tabella:

    UPDATE nome_tabella SET nome_campo=nuovo_valore WHERE (condizione)
    

    Ora, ovviamente le cose da sapere sulla tabella da aggiornare sono essenzialmente 3:

    • il nome della tabella
    • il nome del campo da aggiornare
    • quale record della tabella aggiornare

    Siccome il nuovo valore lo prendi dal form html, la pagina update.php puoi strutturarla così:

    <?php
    $c = mysql_connect('localhost','root','');
    mysql_select_db('database1');
    $query = "UPDATE nome_tabella SET nome_campo='".$_POST['valore']."' WHERE id='".$_POST['id']."'";
    $risultato = mysql_query($query) or die ("Query \"$query\" fallita
    :::
    ".mysql_error());
    ?>
    

    Un paio di precisazioni:

    • conviene sempre portarsi dietro l'id del record da modificare (cioè un identificatore unico) e farne la condizione delle query, in modo da non aggiornare un record per un altro;
    • ricorda ke il metodo POST ti rimane delle variabili nel caricamento della pagina, quindi in caso di refresh potresti avere quella fastidiosa scritta di avviso "i dati contenuti nella pagina..."; quindi ti consiglio di fare un ```
      header("Location: pagina.php");
    * controlla sempre l'errore delle query sul database, basta un niente e non sai mai dov'è l'errore...
    
    Detto ciò, prova un pò e semmai riposta!
    
    notte

  • User

    dunque...
    dopo studio approfondito sono giunta alla definizione di due files:
    modifica.php e update.php.

    il file modifica.php contiene il form con i campi da modificare (per semplicità ho considerato un solo campo, solo la colonna 'titolo' di una tabella di una unica riga che contiene anche 'id' 'testo' 'data' 'autore' 'mail')

    il file update.php è l'action del form suddetto che ha method="get"

    modifica.php
    [php]<?
    $titolo=$_REQUEST['titolo'];
    include("top_foot.inc.php");
    include("config.inc.php");
    top();
    $db = mysql_connect($db_host, $db_user, $db_password) or die("Mancata Connessione.<br />
    Errore Numero: ".mysql_errno()."<br />descrizione: ".mysql_error());
    $id=$_GET['id'];
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
    $sql = "SELECT titolo FROM news WHERE id = $id";
    $result = mysql_query($sql, $db) or die("Mancata Query.<br />
    Errore Numero: ".mysql_errno()."<br />descrizione: ".mysql_error());
    $row = mysql_fetch_array($result);
    mysql_close($db);
    foot();
    ?>
    <form method="get" action="update.php?id=$id">
    <input type="text" size="40" name="titolo" value ="<?php $titolo ?>" />
    <input type="submit" value="Invia" />
    </form>

    [/php]

    update.php
    [php]<?
    $titolo=$_REQUEST['titolo'];
    include("top_foot.inc.php");
    include("config.inc.php");
    top();
    if ($pass != $password): echo "Password errata";
    elseif (trim($titolo) == ""):
    echo "Il campo Titolo deve essere riempito!";
    else :
    $titolo = addslashes(stripslashes($titolo));
    $titolo = str_replace("<", "<", $titolo);
    $titolo = str_replace(">", ">", $titolo);
    $db = mysql_connect($db_host, $db_user, $db_password);
    $id = $_GET['id'];
    if ($db == FALSE)
    die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
    mysql_select_db($db_name, $db)
    or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
    $sql = "UPDATE news SET titolo = $titolo WHERE id = $id";
    if (mysql_query($sql, $db))
    echo "L'articolo è stato modificato correttamente";
    else
    echo "Errore durante l'inserimento";
    //endif;
    mysql_close($db);
    endif; // chiude la verifica della presenza dei dati
    foot();
    ?>
    [/php]

    quando arrivo sulla pagina modifica.php?id=xxx succede questo:

    1. il form, che per semplicità ha un unico campo (titolo), appare vuoto mentre io me lo aspettavo pieno, stante il seguente:

    <input type="text" size="40" name="titolo" value ="<?php $titolo ?>" />

    1. quando inserisco un nuovo titolo e clicco su invia mi risulta il seguente errore:

    Errore durante l'inserimento

    quindi deve essere successo qualcosa qui:
    [php]$sql = "UPDATE news SET titolo = $titolo WHERE id = $id";
    if (mysql_query($sql, $db))
    echo "L'articolo è stato modificato correttamente";
    else
    echo "Errore durante l'inserimento";[/php]

    ???