Visualizzazione risultati 1 fino 3 di 3

Discussione: Cancellare riga database a seconda della scelta dell'utente

  1. #1
    Guest

    Predefinito Cancellare riga database a seconda della scelta dell'utente

    Ciao a tutti, ho un file html
    Codice HTML:
    <FORM ACTION="rimuovi.php" method="POST">
    Cerca Operatore da eliminare: <input type="text" size="20" name="cognome" required/> 
    
     <select name="note">
      <option value="cognome" selected>Cognome</option>
    
    <option value="acc">ACC</option>
    <option value="nome">Nome</option>
    <option value="matricola">Matricola</option>
    </select> 
    <button id="buttondx" type="submit">Ricerca</button></span>
    </form>

    Un semplice campo di ricerca, dove si collega col file php rimuovi.php



    Codice PHP:
    <FORM ACTION="cancella.php" method="POST">
    <?php
    $host
    ="localhost";
    $username="root";
    $password="";
    $db_name="operatori";
    $tbl_name="nomi_operatori";
    $db =mysqli_connect($host,$username,$password,$db_name);

    $cognome = $_POST['cognome'];
    $field = $_POST['note'];
    $sql=mysqli_query($db, "SELECT MATRICOLA, ACC, AGENT_ID, COGNOME, NOME, RECAPITO, CODFISCALE, SKILL, GRUPPO_PWK, GRUPPO, MODULO, NOTE FROM `nomi_operatori` WHERE $field='$cognome'");
    $count=mysqli_num_rows($sql);
    if(!
    $count==0){
    while(
    $cicle=mysqli_fetch_array($sql)){
    echo
    "<br>";
    echo
    "<br>";

    echo
    "<table border='2'>";

    echo
    "<tr><td>Matricola</td>";
    echo
    "<td>".$cicle['MATRICOLA']."</td>";


    echo
    "<tr><td>Acc</td>";
    echo
    "<td>".$cicle['ACC']."</td>";


    echo
    "<TR><td>Agent_id</td></Td>";
    echo
    "<td>".$cicle['AGENT_ID']."</td>";

    echo
    "<TR><td>Cognome</td></Td>";
    echo
    "<td>".$cicle['COGNOME']."</td>";


    echo
    "<TR><td>Nome</td></Td>";
    echo
    "<td>".$cicle['NOME']."</td>";


    echo
    "<TR><td>Recapito</td></Td>";
    echo
    "<td>".$cicle['RECAPITO']."</td>";

    echo
    "<TR><td>CodFiscale</td> </Td>";
    echo
    "<td>".$cicle['CODFISCALE']."</td>";


    echo
    "<TR><td>Skill</td></Td>";
    echo
    "<td>".$cicle['SKILL']."</td>";


    echo
    "<TR><td>Gruppo_Pwk</td> </Td>";
    echo
    "<td>".$cicle['GRUPPO_PWK']."</td>";


    echo
    "<TR><td>Gruppo</td> </Td>";
    echo
    "<td>".$cicle['GRUPPO']."</td>";

    echo
    "<TR><td>Modulo</td> </Td>";
    echo
    "<td>".$cicle['MODULO']."</td>";



    echo
    "<TR><td>Note</td></Td>";
    echo
    "<td>".$cicle['NOTE']."</td>";




    echo
    "<td><a href='cancella.php'>elimina</td>";
    echo
    "</tr>";
    echo
    "</table>";
    }

    }
    else{
    echo
    "<h3 align='center'>Nessun record trovato. ";
    }
    ?>
    <button id="buttonsx" type="submit">Ritorna</button></span>
    In questo file php vengono visualizzati i risultati della ricera, se si cerca col cognome alle volte si avranno piu' risultati se nel database si ha un cognome uguale con accanto un pulsante elimina che si collega al file cancella.php

    Codice PHP:
    <?php
    $host
    ="localhost";
    $username="root";
    $password="";
    $db_name="operatori";
    $tbl_name="nomi_operatori";
    $db =mysqli_connect($host,$username,$password,$db_name);
    $query=mysqli_query($db,"SELECT MATRICOLA FROM nomi_operatori");
    $result=mysqli_fetch_array($query);
    $id=$result['MATRICOLA'];
    $query2=mysqli_query($db,"DELETE FROM nomi_operatori where MATRICOLA='$id'");

    header("Location:index.html");


    ?>
    il problema e' che se clicco sul tasto elimina nel database mi elimina solo la prima riga e non per esempio la seconda se la seleziono per elimionarla, potete darmi una mano? Grazie in anticipo
    Ultima modifica di alemoppo : 09-08-2018 alle ore 12.51.16 Motivo: +tag

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    il problema e' che se clicco sul tasto elimina nel database mi elimina solo la prima riga e non per esempio la seconda se la seleziono per elimionarla
    Certo, nel codice che hai mostrato non c'è nulla che indichi quale riga vuoi cancellare: ne stai estraendo una "a caso" per poi cancellarla.

    Come minimo devi inviare, alla pagina cancella.php, un identificatore dell'operatore da eliminare, ad esempio la matricola. Il modo più rapido è intervenire in rimuovi.php modificando questa riga
    Codice PHP:
    echo "<td><a href='cancella.php'>elimina</td>";
    così:
    Codice PHP:
    echo "<td><a href='cancella.php?matricola=" . $cicle['MATRICOLA'] . "'>elimina</td>";
    Quindi, nella la pagina cancella.php, devi leggere la matricola da $_GET ed utilizzarla per costruire la query, meglio se con un prepared statement:
    Codice PHP:
    $host = "localhost";
    $username = "root";
    $password = "";
    $db_name = "operatori";

    // Controlla che la matricola sia stata inviata
    if (!isset($_GET['matricola']) || empty($_GET['matricola'])) {
    die(
    "Nessuna matricola specificata");
    }

    // Cancella l'operatore con la matricola indicata
    $link = mysqli_connect($host, $username, $password, $db_name);
    $query = "DELETE FROM nomi_operatori WHERE MATRICOLA = ?";
    $stmt = mysqli_prepare($link, $query);
    if (!
    $stmt) {
    die(
    "Errore nella preparazione della query: " . mysqli_error($link));
    }

    mysqli_stmt_bind_param($stmt, "s", $_GET['matricola']);
    $result = mysqli_stmt_execute($stmt);
    if (!
    $result) {
    die(
    "Errore nell'esecuzione della query: " . mysqli_stmt_error($stmt));
    }
    mysqli_stmt_close($stmt);

    // Redirige alla pagina index.html
    header("Location:index.html");
    PS: Non c'entra con il problema in questione, ma nei codici che hai mostrato ci sono diversi errori o aspetti migliorabili (alcuni già segnalati in un'altra discussione):
    • nomi degli identificatori
    • in cancella.php usi direttamente i valori letti da $_GET per costruire la query, il che è vulnerabile a SQL injection: usa i prepared statement
    • in cancella.php stai creando una nuova tabella ad ogni iterazione del ciclo while: non sarebbe più semplice creare un'unica tabella?
    • in cancella.php dentro al ciclo while ci sono molti tag <tr> aperti, ma solo uno chiuso
    • in cancella.php, dopo il ciclo, hai un <button type="submit"> che non fa parte di un form, il che non ha senso
    • nello stesso punto hai la chiusura di un tag </span> che non è mai stato aperto
    • chiamare i tag o i nomi delle colonne con lettere tutte maiuscole (<TR>, MATRICOLA, ACC, COGNOME) era una "convenzione" degli anni '90, da circa 30 anni a questa parte si preferisce usare nomi in minuscolo (<tr>, matricola, acc, cognome)

    I suggerimenti che do più spesso:


  3. #3
    Guest

    Predefinito

    Ti ringrazio veramente tanto mi hai risolto un grosso problema, e si seguiro' i consigli che mi hai scritto.
    Grazie Grazie ancora!

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
  •