form con checkbox

miagy

Utente Attivo
2 Nov 2014
83
1
8
Ciao a tutti.
Ho ereditato un codice al fine di studiare il funzionamento di MySqli da autodidatta e sono incappato in un dubbio.
Ho questa pagina che, mettendomi in elenco tutti gli elementi da cancellare secondo un determinato criterio, mi permette di selezionare tutti quelli che voglio e cancellarli. All'interno dello stesso codice, sopra a tutto, ho un isset post che, attivato, cancella i file selezionati (e che è corretto).

Il mio dilemma è: la pagina sichiama cancella_users.php


Detto questo, in
HTML:
<form action='??????' method='POST'>
devo rimettere la stessa pagina? :')


PHP:
<?php
  
$connect=mysqli_connect("bla bla bla"); /* DATI DB */
if(mysqli_connect_errno()){
echo "Error".mysqli_connect_error();
}

/* CANCELLO FILE SELEZIONATI */

if (isset($_POST['delete'])){
    $checkbox = $_POST['checkbox'];
    $count = count($checkbox);

    for($i=0;$i<$count;$i++){

        if(!empty($checkbox[$i])){ /* CHECK SE CHECKBOX SONO FLAGGATI */
        echo "cancellato $nickname";
        #$nickname= mysqli_real_escape_string($connect,$checkbox[$i]); /* ESCAPE INUTILE */
        mysqli_query($connect,"DELETE FROM users WHERE nickname = '$nickname'"); /* CANCELLO*/

        }

    }

}

$query = "SELECT * FROM users WHERE DATE_ADD(login, INTERVAL 180 DAY) <= NOW() ORDER BY nickname";
$result = mysqli_query($connect,$query);

echo "<form action='??????' method='POST'>"; /* SUBMIT */

echo "<table>";
echo "<tr><td>Name</td></tr>";
while ($row = mysqli_fetch_array($result)){
  
    echo "<tr><td><input type='checkbox' name='checkbox[]' value='$nickname'></td>";
    echo "<td>" . $row['nickname'] . "</td></tr>";
}
mysqli_free_result($result);
echo "</table>";
?>

<tr>
<td colspan="5" align="center"><input name="delete" type="SUBMIT" id="delete" value="delete" action="POST"></td>
</tr>
</form>
 
Ultima modifica:

Hormus

Utente Attivo
26 Giu 2020
83
10
8
La funzione isset restituisce true se la variabile è almeno definita e per leggere $_POST['delete'] dovrai indicare per forza cancella_users.php altrimenti i dati inviati con il metodo POST non saranno mai visibili. (tieni presente dovrà essere lo stesso percorso che visualizzi nella barra del tuo browser).
Comunque l'escape non è mai inutile a maggior ragione se lavori con variabili esterne cioè non provenienti dalla tua definizione di variabile.
Comunque sia devi validare il valore di ritorno di mysqli_query e solo se diversa da false puoi considerare che sia stata eseguita.
PHP:
<?php

$connect = mysqli_connect("bla bla bla"); /* DATI DB */
if(mysqli_connect_errno()){
echo "Error ".mysqli_connect_error();
}

/* CANCELLO FILE SELEZIONATI */

if (isset($_POST['delete'])){
    $checkbox = $_POST['checkbox'];
    $count = is_array($checkbox) ? count($checkbox) : false;
    if($count !== false) {

        for($i=0;$i<$count;$i++){

            if(!empty($checkbox[$i])){ /* CHECK SE CHECKBOX SONO FLAGGATI */
            $nickname= mysqli_real_escape_string($connect,$checkbox[$i]); /* ESCAPE INUTILE */
                if(mysqli_query($connect,"DELETE FROM users WHERE nickname = '$nickname'") !== false) {
                echo "cancellato $nickname";
                } /* CANCELLO*/

            }

        }

    }

}


$query = "SELECT * FROM users WHERE DATE_ADD(login, INTERVAL 180 DAY) <= NOW() ORDER BY nickname";
if(($result = mysqli_query($connect,$query)) !== false) {

echo "<form action=\"??????\" method=\"POST\">"; /* SUBMIT */

echo "<table>";
echo "<tr><td>Name</td></tr>";
while ($row = mysqli_fetch_array($result)){

    echo "<tr><td><input type=\"checkbox\" name=\"checkbox[]\" value=\"$row['nickname']\"></td>";
    echo "<td>" . $row['nickname'] . "</td></tr>";
}
mysqli_free_result($result);
echo "</table>".'

<tr>
<td colspan="5" align="center"><input name="delete" type="SUBMIT" id="delete" value="delete"></td>
</tr>
</form>';
}

?>
Adesso il form appare solo se la query è diversa da false controllo che il checkbox è un array altrimenti non faccio nulla imposta la tua url.
 
Ultima modifica:

miagy

Utente Attivo
2 Nov 2014
83
1
8
La funzione isset restituisce true se la variabile è almeno definita e per leggere $_POST['delete'] dovrai indicare per forza cancella_users.php altrimenti i dati inviati con il metodo POST non saranno mai visibili. (tieni presente dovrà essere lo stesso percorso che visualizzi nella barra del tuo browser).

Ti ringrazio della risposta.
Scrivendo questo, il risultato è false:

HTML:
<form action='cancella_users.php' method='POST'>
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
Ho modificato il codice per favore leggi nuovamente il messaggio precedente, cosa intendi per false? Un vero valore Boleano della funzione var_dump? O semplicemente non ti funziona.
Nel secondo caso assicurati http://domain.com/cancella_users.php sia nella web root e non in altra directory.
Abilità temporaneamente error_reporting(-1); in cima al tuo script alla risoluzione dovrai rimuoverlo.
 

miagy

Utente Attivo
2 Nov 2014
83
1
8
Ho modificato il codice per favore leggi nuovamente il messaggio precedente, cosa intendi per false? Un vero valore Boleano della funzione var_dump? O semplicemente non ti funziona.
Nel secondo caso assicurati http://domain.com/cancella_users.php sia nella web root e non in altra directory.
Abilità temporaneamente error_reporting(-1); in cima al tuo script alla risoluzione dovrai rimuoverlo.

Sì, scusami. Ho scritto dal cellulare e non sono stato chiaro.
Non mi riconosce il value nickname.
Anche postando la tua soluzione, il comando DELETE non funge e la echo mostra sola il testo cancellato, dandomi il $nickname vicino vuoto.

Quindi mettendo che io voglia cancellare UTENTE A, correttamente selezionabile nella lista iniziale, lo flaggo, clikko su delete e piuttosto che cancellarmi utente a con il messaggio "cancellato utente a", non me lo cancella e mi stampa "cancellato "
 

Hormus

Utente Attivo
26 Giu 2020
83
10
8
Puoi abilitare error_reporting(-1); mi sembra che la variabile $nickname non è mai stata definita e poiché non definita ha il valore null la funzione echo stampa una stringa vuota per $nickname se usi var_dump('cancellato', $nickname): avrai in stampa anche il valore null ma comunque sia error_reporting(-1); dovrebbe già segnalare l'errore di variabile $nickname non definita.
Inizialmente avrai $row['nickname'] se hai dubbi posta il codice e ti aiuto.
 
Ultima modifica:

miagy

Utente Attivo
2 Nov 2014
83
1
8
Puoi abilitare error_reporting(-1); mi sembra che la variabile $nickname non è mai stata definita e poiché non definita ha il valore null la funzione echo stampa una stringa vuota per $nickname se usi var_dump('cancellato', $nickname): avrai in stampa anche il valore null ma comunque sia error_reporting(-1); dovrebbe già segnalare l'errore di variabile $nickname non definita.
Inizialmente avrai $row['nickname'] se hai dubbi posta il codice e ti aiuto.

L'errore riportato è quello che hai sospettato:

Notice: Undefined variable: name in /membri/miagysite/cancella_users.php on line 21

vale a dire:


echo "cancellato $nickname";

Sei gentilissimo :)
Il codice intero è quello che ho postato all'inizio di questo topic :)
 
Discussioni simili
Autore Titolo Forum Risposte Data
G form invio multiplo con checkbox PHP 12
M form php con checkbox PHP 4
D Selezionare tutti i checkbox di un form con jQuery jQuery 1
F problema con convalida form e checkbox Javascript 1
S passare un valore da un form a un file .php con metodo post PHP 4
I Form con selettore HTML e CSS 0
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
G Invio form con PHP PHP 3
M Problema con controllo form in real time jQuery 6
F query e form con select multipla PHP 17
W Rinominare Documenti Con Form Asp Classic ASP 9
S [PHP] Recupero nome immagine da Form con input file PHP 3
C [PHP] Form con Inserimento dati dalla maschera e un menù a discesa che prende i dati dal db PHP 1
Domenico_Falco1 [Javascript] [HTML] Campi form con sfondo imposto dal browser Javascript 5
E Form inserimento dati con JavaScript Javascript 0
I [PHP] inviare form con allegato tramite una mail PHP 1
P PHP - Leggere una pagina passata con Form e Captcha PHP 0
M [HTML] form con multipli input type image HTML e CSS 1
alessandra86 [PHP] Popolamento database con form ricorsivi - problema array (foreach ) PHP 5
U [PHP] Form stessa pagina con qualche complicazione PHP 0
S [PHP] form con metodo get e recupero id PHP 4
michela90 [PHP] Refresh page on submit - Form con Swiftmailer PHP 14
Emix Problema con creazione form css/mobile HTML e CSS 3
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
L Scelta form con jquery jQuery 1
F [PHP] Validare form prenotazione appuntamento tattoo con upload image PHP 0
S Html con form e action .php PHP 6
bubino8 [PHP] Auto Submit form con dati PHP 7
W Consiglio su gestione di un form con XMLHttpRequest Ajax 0
Matteo Lorenzon [PHP][WORDPRESS] Form in Wordpress, creazione PDF con dati del form ed invio tramite email WordPress 1
T [Javascript] un form con select dinamica che funzioni da menù... Javascript 2
zammaeng [PHP] Problema form con lista PHP 8
B INSERIRE DATI CON IMMAGINE DA FORM IN MYSQL MySQL 7
V [PHP] Form con elenco a tendina con dati DB PHP 20
A [HTML] form con campi dinamici. HTML e CSS 1
asevenx [PHP] form con select che non invia dati se con apostrofo PHP 4
SimooRu [PHP] Non riesco a far passare i dati con i form PHP 4
S [PHP] Form iscrizione senza DB con comandi deprecated PHP 10
Fuego2806 Stampare dati Form su immagine di sfondo con html HTML e CSS 1
Fuego2806 [PHP] Stampare dati Form su immagine di sfondo con html PHP 70
C [PHP] Upload immagine in un form con target _blank: non funziona PHP 7
G validazione form con div tipo alert jQuery 0
D form php con chapta PHP 1
I Form/aree di testo con input da lista di nomi!Chiedo aiuto!! HTML e CSS 3
P invio mail da form con dati php PHP 7
P PHP mailer invio form con 2 allegati. PHP 3
M Form multipagina con campi già compilati se presenti PHP 5
B problema con i form Javascript 0
F controllo form php con restituzione errori nella form PHP 10
A form con inserimento multiplo PHP 4

Discussioni simili