• User Newbie

    Problema CANCELLAZIONE dati da un DB

    Salve, ho un problema con una Rubrica:
    cancello un record ma ricevo un errore.
    La rubrica che stò realizzando sarebbe molto più complessa ...ma avendo avuto problemi con la CANCELLAZIONE e con la MODIFICA dei dati inseriti, ho deciso di provare con una rubrica ridotta che contenesse solamente NOME COGNOME e AZIENDA.
    Per la cronaca, si tratta di listati presi dal libro PHP5 di M. Canducci.

    • Ho creato il database.
    • Ho creato il FORM per inserire i dati (FUNZIONA)
    • Ho creato una pagina per visualizzare i dati presenti nel DB (FUNZIONA)
      Poi, ci sarebbero le due query per la CANCELLAZIONE e per la MODIFICA di un Record.
      Partendo dalla CANCELLAZIONE, all'esecuzione restituisce il seguente errore:
      Notice: Undefined index: confirm in C:\wamp\www\test2\8-8.php on line 12

    Praticamente la pagina PHP che visualizza una tabella con i dati presenti nel DB (chiamata: 8-7.php), ha, per ogni riga della tabella (cioè per ogni Record presente), due link CANCELLA e MODIFICA che inviano alla pagina 8-8.php l'ID del Record da cancellare.
    Il record viene cancellato ma è preceduto dall'errore riportato sopra.

    Spero possiate aiutarmi ...perchè sono diversi giorni che ci provo in tutti i modi ma senza successo. :arrabbiato:

    Vi posto di seguito i due listati. Nel listato 8-8.php ho evidenziato in grassetto la RIGA 12 cui fa riferimento l'errore.

    (Il database si chiama 'rubrica' e la tabella si chiama 'elenco')


    8-7.php - Lista i record presenti nel DB


    <html>
    <head>
    <title>Visualizza Record</title>
    </head>
    <body>
    <?php
    $host = 'localhost';
    $user = 'root';
    $password = 'password';
    $database = 'rubrica';

    $db = mysql_connect($host, $user, $password) or die ("Impossibile connettersi al server $host");

    mysql_select_db($database, $db) or die ("Impossibile connettersi al database $database");

    $query = "select * from elenco";
    $dbResult = mysql_query($query, $db);
    $AffectedRows = mysql_affected_rows($db);

    print "<table border="1">\n";

    for ($index=0 ; $index<$AffectedRows ; $index++)
    {
    $row=mysql_fetch_row($dbResult);

    if($index==0)
    {
    print "<tr>\n";
    foreach ($row as $k => $v)
    {
    $myfield = mysql_fetch_field($dbResult, $k);
    print ("<td><b>" . $myfield->name . "</b></td>");
    }
    print "</tr>\n";
    }

    foreach ($row as $k =>$v)
    {
    print ("<td>$v ");
    if ($k==0)
    {
    print "<br>";
    print "<a href="8-8.php?id='$v'">Cancella</a>";
    print "<br>";
    print "<a href="8-9.php?id=$v">Modifica</a>";
    }
    print ("</td>");
    }
    print ("</tr>");
    }
    print ("</table>");

    mysql_free_result($dbResult);
    mysql_close($db);
    ?>
    </body>
    </html>


    8-8.php - Cancella un Record dal DB


    <html>
    <head>
    <title>Cancella un Record</title>
    </head>
    <body>
    <?php
    $host = 'localhost';
    $user = 'root';
    $password = 'password';
    $database = 'rubrica';

    $confirm = $_REQUEST['confirm'];
    $id = $_REQUEST['id'];

    if ($confirm)
    {

    $db = mysql_connect($host, $user, $password) or die ("Impossibile connettersi al server $host");

    mysql_select_db($database, $db) or die ("Impossibile connettersi al database $database");

    $query = "delete from elenco where id=$id";
    $dbResult = mysql_query($query, $db);
    $AffectedRows = mysql_affected_rows($db);

    if ($AffectedRows==0)
    {
    print("<h3>Non esistono Record con i criteri selezionati</h3>");
    }
    else
    {
    print("<h3>Il Record è stato eliminato</h3>");
    print("<h3><a href="8-7.php">Torna alla lista</a></h3>");
    }

    mysql_close($db);
    }
    else
    {
    print("<h3>Eliminare il Record?</h3>");
    print("<h3><a href="{$_SERVER['PHP_SELF']}?id=$id&confirm=1">Conferma</a></h3>");
    print("<h3><a href="8-7.php">Annulla</a></h3>");
    }
    ?>
    </body>
    </html>


  • ModSenior

    Ciao Lukat,

    la forma più corretta per il file 8-8.php sarebbe questa:
    [php]
    <html>
    <head>
    <title>Cancella un Record</title>
    </head>
    <body>
    <?php
    $host = 'localhost';
    $user = 'root';
    $password = 'password';
    $database = 'rubrica';

    $id = $_GET['id'];

    if (isset($_GET['confirm']))
    {

    $db = mysql_connect($host, $user, $password) or die ("Impossibile connettersi al server $host");

    mysql_select_db($database, $db) or die ("Impossibile connettersi al database $database");

    $query = "delete from elenco where id=$id";
    $dbResult = mysql_query($query, $db);
    $AffectedRows = mysql_affected_rows($db);

    if ($AffectedRows==0)
    {
    print("<h3>Non esistono Record con i criteri selezionati</h3>");
    }
    else
    {
    print("<h3>Il Record è stato eliminato</h3>");
    print("<h3><a href="8-7.php">Torna alla lista</a></h3>");
    }

    mysql_close($db);
    }
    else
    {
    print("<h3>Eliminare il Record?</h3>");
    print("<h3><a href="{$_SERVER['PHP_SELF']}?id=$id&confirm=1">Conferma</a></h3>");
    print("<h3><a href="8-7.php">Annulla</a></h3>");
    }
    ?>
    </body>
    </html>
    [/php]
    Mancano comunque tutti i controlli sui dati ricevuti, è molto facile alterare la query allo stato attuale.