Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Problema cancellazione record DB

    Ciao a tutti!
    Premetto che non sono esperto in PHP, anche perchè lo studio solo per ampliare le mie conoscenze (dovrei aspettare ancora 2 anni per i siti dinamici a scuola (e in Asp.)).

    Allora: inserisco attraverso un form dei dati nel database mysql, in questo modo ->

    Codice PHP:
    // prendiamo i dati
    if (!empty($_POST['titolo'])){
        
    $titolo $_POST['titolo'];

        if (!empty(
    $_POST['autore'])){
            
    $autore $_POST['autore'];

            if (!empty(
    $_POST['articolo'])){
                
    $testo $_POST['articolo'];
            
                
    $inserimento mysql_query("INSERT INTO articoli (titolo,autore,data,testo) values ('$titolo','$autore',now(),'$testo')");
                echo 
    "
    \n<p style=\"font-size: 15px; color: #000;\">[b]Articolo postato con successo![/b]</p>\n"
    ;
            }
        }
    }

    // chiudiamo il db
    mysql_close(); 
    Io questi dati inseriti nel database li voglio eliminare attraverso un'altra pagina (cancella.php) e ho scritto questo ->

    Codice PHP:
    $lettura mysql_query("SELECT * from articoli order by id DESC");
    if (
    mysql_num_rows($lettura)>0){
        while (
    $scatola_temporanea mysql_fetch_array($lettura)){
                    
    // prendo i dati
            
    $titolo $scatola_temporanea["titolo"];
            
    $autore $scatola_temporanea["autore"];
            
    $data $scatola_temporanea["data"];
            
    $testo $scatola_temporanea["testo"];
            
    $id $scatola_temporanea["id"]; // autoincrementante
    // scriviamo
    echo <<< END
    <table>
    <tr>
    <td class="informazioni">
    Articolo 
    $id: [b]$titolo.[/b]
    <form action="cancella.php" method="post">
    <input type="checkbox" name="check">
    <input id="submit" type="submit" name="submit" value="Cancella articolo!">
    </form>
    </td>
    </tr>
    </table>
    END;
    }

    if (isset(
    $_POST['check'])){
      
    $cancella mysql_query("DELETE FROM articoli WHERE id='$id'");
      echo 
    "Operazione riuscita!";

    Però lo script non mi cancella l'articolo con la checkbox selezionata, bensi quello non selezionato.
    Sbaglio qualcosa (sicuramente...) ?

  2. #2
    ti manca la "id"
    nel form con il checkbox dovresti mettere un campo nascosto con la id del record da eliminare
    Codice PHP:
    <input type=\"hidden\" name=\"id\" value=\".$id.\" /> 
    che poi nella pagina cancella.php dovrai leggere e mettere nella query

  3. #3
    Ho inserito quanto indicato nello script, ma continua sempre a darmi il problema, che però è diverso.
    Se io ho tre articoli e uno è selezionato con la checkbox
    ARTICOLO 1 X(Selezionato)
    ARTICOLO 2
    ARTICOLO 3

    lui mi eliminase sempre l'ultimo.

    EDIT:
    form che leggi gli articoli da eliminare e script che li elimina sono nella stessa pagina cancella.php!

  4. #4
    Allora ho fatto così.
    pagina modifica.php
    Codice PHP:
    $lettura mysql_query("SELECT * from articoli order by id DESC");
    if (
    mysql_num_rows($lettura)>0){
        while (
    $scatola_temporanea mysql_fetch_array($lettura)){
            
    $titolo $scatola_temporanea["titolo"];
            
    $autore $scatola_temporanea["autore"];
            
    $data $scatola_temporanea["data"];
            
    $testo $scatola_temporanea["testo"];
            
    $id $scatola_temporanea["id"];
    // scriviamo ->
    echo <<< END
    <table>
    <tr>
    <td class="informazioni">
    Articolo 
    $id: [b]$titolo.[/b]
    <form action="cancella.php" method="post">
    <input type="checkbox" name="check">
    <input type="hidden" name="id" value="
    $id">
    <input id="submit" type="submit" name="submit" value="Cancella articolo!">
    </form>
    </td>
    </tr>
    </table>
    END; 
    pagina cancella.php
    Codice PHP:
    if(isset($_POST['check'])){
    $id $_POST['id'];
    mysql_query("DELETE FROM articoli WHERE id=\"$id\"");
    echo 
    "Operazione riuscita!";

    Ma niente, zero.

  5. #5
    Avevo capito male
    La id che ti serve la dai alla value della checkbox
    codice:
    <input type=\"checkbox\" name=\"check\" value=\"".$id."\" />
    e concluderei con:

    Codice PHP:
    if (isset($_POST['check'])){
      
    $id $_POST['check'];
      
    $cancella mysql_query("DELETE FROM articoli WHERE id='$id'"); 
      echo 
    "Operazione riuscita!
    "
    ;

    Però, per evitare accidentali scelte multiple che in questa circostanza potrebbe dare fastidio, suggerirei di usare dei controlli "radio" invece dei controlli "checkbox"

  6. #6
    Ti ringrazio tantissimo, ha funzionato!
    Ma non capisco il perchè di assegnare l'id alla checkbox (o al radio), lo puoi spiegare?
    Cioe, non era lo stesso se lo assegnavo all'input nascosto?

  7. #7
    In linea di massima io lavoro in modo differente.
    E' difficile che io costruisca molti form per ogni record o un form gigantesco per tutti i record, visualizzati nella pagina, che intendo modificare o cancellare
    Di solito uso creare una lista di tutti i record ed a fianco di ciascuno di questi metto un semplice link con associata una querystring che contiene alcune variabili id, tabella, altre informazioni) necessarie all'elaborazione della richiesta (modifica o eliminazione del record).
    In modo del tutto teorico mi sembra di aver capito che nel tuo codice costruisci un form per ogni record (nel tuo caso si poteva anche creare un unico form con una checkbox o radio per ogni record con associati nelle rispettive value l'id del record corrente e forse sarebbe stato anche più facile)
    Sempre teoricamente mi sembra di comprendere che premendo sul pulsante submit invii uno specifico form con tutti gli elementi in esso contenuti e non gli altri. Ma nel codice potrebbe crearsi confusione. Teoricamente la input di tipo hidden dovrebbe restituire il valore ad esso associato, ma evidentemente non è sempre così.
    Per questo motivo, se un valore posso assegnarlo ad uno specifico controllo lo faccio evitando i controlli nascosti che uso per altri scopi.

    Non so se sono stato chiaro o, peggio, se ho detto qualche corbelleria.
    Mi affido alla comprensione di chi legge.

  8. #8
    Sei stato chiaro e hai azzeccato come ho costruito la pagina.
    Per questo anche ho limitato il numero di risultati per pagina, anche se il tuo metodo è più efficiente.

    Il sito, comunque, non verrà reso "usabile", è solo per imparare.

  9. #9
    Praticamente tu fai questo (o sbaglio?):

    Codice PHP:
    <?php
    $lettura 
    mysql_query("SELECT * from articoli order by id DESC");
    if (
    mysql_num_rows($lettura)>0){
        while (
    $scatola_temporanea mysql_fetch_array($lettura)){
            
    $titolo $scatola_temporanea["titolo"];
            
    $autore $scatola_temporanea["autore"];
            
    $data $scatola_temporanea["data"];
            
    $testo $scatola_temporanea["testo"];
            
    $id $scatola_temporanea["id"];
            echo 
    "<table><tr><td>";
            echo 
    "Articolo $id$titolo.</td>";
            echo 
    "<td><form action=\"getmodifica.php\" method=\"post\">";
            echo 
    "<input type=\"hidden\" name=\"titolo\" value=\"$titolo\" />";
            echo 
    "<input type=\"hidden\" name=\"autore\" value=\"$autore\" />";
            echo 
    "<input type=\"hidden\" name=\"testo\" value=\"$testo\" />";
            echo 
    "<input type=\"submit\" name=\"submit\" value=\"Modifica!\" />";
            echo 
    "</form></td></tr></table>";
        }
    }
    ?>
    e ti crei una pagina es: postmodifica.php

    Codice PHP:
    <?php
    if (isset($_POST['titolo'])){ $titolo $_POST['titolo']; }
    if (isset(
    $_POST['autore'])){ $autore $_POST['autore']; }
    if (isset(
    $_POST['testo'])){ 
    $testo $_POST['testo']; 
    echo <<< END
    <table>
        <tr>
            <td>Titolo:</td>
            <td><input type="text" value="
    $titolo"></td>
        </tr>
        <tr>
            <td>Autore:</td>
            <td><input type="text" value="
    $autore"></td>
        </tr>
        <tr>
            <td>Testo:</td>
            <td><textarea>
    $testo</textarea></td>
        </tr>
    </table>
    END;
    }
    ?>
    Molto più pratico.

    EDIT:
    Scusa, questo è per la modifica, ma in sostanza è la stessa cosa.

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.