checkbox per selezionare articoli da cancellare

Ciao

Vorrei implementare una funzionalità alla mia pagina php dove è anche possibile cancellare gli articoli stampati.

In pratica per ogni (riga) articolo visualizzare a fianco un checkbox (quello per inserire o meno un segno di spunta

per intenderci) attraverso il quale l'utente può selezionare l'articolo per poi con un bottone "Cancella selezionati"

cancellare tutti gli articoli selezionati in un'unica operazione come avviene ad esempio per i programmi di posta elettronica online.

Per il momento stampo a lato di ogni record visualizzato un link che invia anche l'id alla funzione di eliminazione, ma la cosa è abbastanza scomoda perchè se l'utente vuole cancellare più articoli è costretto a ripetere l'operazione N volte e ancor prima ri-visualizzare la pagina.

Si può fare una cosa del genere in php?

Grazie e buon NATALE

inviato 5 anni fa
frankphp
X 0 X

Si che è possibile.

Devi semplicemente creare un form con le checkbox corrispondenti sia graficamente, sia di valore, agli id degli articoli da cancellare.

Inserisci dunque il bottone che invierà i dati al php che poi processerà il tutto.

Non è complicato.

Ciao e Buon Natale!

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Si che è possibile.

Devi semplicemente creare un form con le checkbox corrispondenti sia graficamente, sia di valore, agli id degli articoli da cancellare.

Inserisci dunque il bottone che invierà i dati al php che poi processerà il tutto.

Non è complicato.

Ciao e Buon Natale!

Ok, ma l'id adesso passato è solo uno.

Il codice è questo:

......

//all'ultimo td della riga c'è il link per richiamare la funzione e che passa l'id per l'eliminazione

<td height=\"54\" width=\"5%\" align=\"center\" id=\"row7\"><a href=\"ricercanote.php?task=dom_delete&id=$id\">

......

// di seguito le 2 funzioni: la prima richiede una conferma la seconda esegue l'operazione

di eliminazione del record dal db

function dom_delete($id){      

    $query="SELECT * FROM primanota descrizione WHERE id = '$id'  LIMIT 1";

      $risultato = mysql_query($query) or die("Errore durante l'esecuzione della query");

      $riga = mysql_fetch_array($risultato);

   

      echo "      

      Sei sicuro di voler cancellare la primanota:<p> <b><font color=\"#FF0000\"> ".$riga['descrizione']." </font></b>?</p><br /><br />

      <a href=\"ricercanote.php?task=delete&id=$id\"><img src=\"stili/si.gif\" border=\"0\" alt=\"Sì\"></a>

      <a href=\"javascript:history.back()\"> <img src=\"stili/no.gif\" border=\"0\" alt=\"No\"></a>";                  

   }

   

function delete($id) {   

     $querydel = "delete from primanota WHERE id=$id";

     $res = @mysql_query($querydel);

     

     if (!$res) {

     die("Errore nella query $querydel: " . mysql_error());

      }

      

     // chiudo la connessione a MySQL

    @mysql_close($cn);

     

echo "<br><br>

   <div align=\"center\"> 

   <table width=\"80%\" height=\"124\">

   <tr><td> 

      <p align=\"center\"><span style=\"background-color: #00FF00\"> <strong> Record primanota cancellato correttamente!</span></strong></td>

   </tr>

   <tr><td> 

   <p align=\"center\"> &nbsp;&nbsp; Attendi il caricamento oppure clicca <a href=\"ricercanote.php\">qui</a></td>

   </tr>

   </table>

   </div>";

}

...

Come e cosa più o meno dovrei modificare?

Grazie e buon natale ancora

risposto 5 anni fa
frankphp
X 0 X

Devi creare un banale form con degli input di tipo checkbox.

Prendi esempio da questo utente:

http://www.phpnews.it/forum/database/problema-ad-eliminare-record-con-checkbox/

P.S. mi sono accorto ora della sua richiesta, gli rispondo adesso.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Devi creare un banale form con degli input di tipo checkbox.

Prendi esempio da questo utente:

http://www.phpnews.it/forum/database/problema-ad-eliminare-record-con-checkbox/

P.S. mi sono accorto ora della sua richiesta, gli rispondo adesso.

beh il form con gli input checkbox lo so creare e sul resto che ho dei dubbi.

In ogni caso continuiamo la discussione lì, ok?

Grazie

ps: perchè si blocca poi all'utente giogiomogio?

risposto 5 anni fa
frankphp
X 0 X

No, il tuo problema lo continuiamo qui.

Dacci i file che hai creato e indicaci dove hai dei dubbi o dove non ti funziona.

Per l'utente giogiomogio non ti posso rispondere, potrebbe anche trattarsi di un errore di connessione al database. Solo lui può risponderci con certezza.

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

No, il tuo problema lo continuiamo qui.

Dacci i file che hai creato e indicaci dove hai dei dubbi o dove non ti funziona.

Per l'utente giogiomogio non ti posso rispondere, potrebbe anche trattarsi di un errore di connessione al database. Solo lui può risponderci con certezza.

Ciao

va bene.

Quello che devo fare dovrebbe essere simile alle intenzioni e al codice di giogiomogio.

Ci aggiorniamo però ad un altro giorno. Oggi sono sfinito. C'era parte del codice della stessa pagina che mi dava un sacco di problemi e solo adesso ne sono venuto a capo (niente a che vedere però col problema dei checkbox).

Ci sentiamo e grazie ancora.

risposto 5 anni fa
frankphp
X 0 X

Attendiamo notizie  :D

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Attendiamo notizie  :D

Rieccomi :D ;D..ho risolto!

Allora ho provato con il checkbox (al momento mi sono accertato solo che venissero passati i valori poi implemento con la query di delete) ed era più semplice del previsto (hai ragione è una cosa banale).

Ho in pratica utilizzato la stessa soluzione di giogiomogio e anche a me all'inizio non passava i valori ( la probabile causa della famigerata pagina bianca). Poi ho risolto il problema che penso possa interessare anche a giogiomogio (lo informi tu? ;).

La causa era qui:

value="<? echo $id ?>"

Bisogna eliminare gli spazi nella value.

Il mio codice è un po' diverso in quanto metto tutto nell'echo dall'inizio:

echo "

............................

<td height=\"30\" width=\"7%\" align=\"center\" id=\"row7\"><form name=\"form1\" method=\"post\" action=\"fornitori.php?task=dom_delete\">

      <input name=\"checkbox[]\" type=\"checkbox\" value=\"$id\"</td>       

       </tr>";

...............

Me ne sono accorto analizzando il sorgente del codice dal browser.

I valori venivano passati ma non erano visualizzati e riportava (se ricordo bene) una cosa del genere:

echo 15 12 ecc ecc

Ho dovuto modificare anche lo switch che richiama la funzione passandoci anche i valori da così:

case 'dom_delete':

        dom_delete($_REQUEST['id']);

        break;

a così:

case 'dom_delete':

        dom_delete();

        break;

in quanto il request è direttamente nella funzione ora.

Adesso devo provare se da questa funzione (di conferma) i valori sono passati regolarmente anche alla funzione di cancellazione dei record.

Ok, grazie di tutto. Se ci sono altri problemi mi faccio risentire.

Ciao

risposto 5 anni fa
frankphp
X 0 X

Bene  :D come vedi il php non è così difficile, basta ricordarsi la sintassi e ragionarci un po' su.

Buon lavoro!!!

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Bene  :D come vedi il php non è così difficile, basta ricordarsi la sintassi e ragionarci un po' su.

Buon lavoro!!!

Ed è proprio questo il mio problema: ricordare la sintassi in quanto possono passare anche mesi prima di scrivere un'altra riga di codice....ad ogni modo i complimenti fanno sempre piacere, grazie

Ho un altro problema (forse anche questa volta una sciocchezza):

questa la funzione che riceve l'array del checkbox:

function dom_delete(){   
   
   $check = $_POST['checkbox'];
      
      
    foreach ($check as $key => $m_id)
{
   echo "Hai selezionato la checkbox: $key con valore: $m_id<br />";
}

      echo "      
      Sei sicuro di voler cancellare i fornitori <b>?<br /><br />
      <a href=\"fornitori.php?task=delete&ide=$check\"><img src=\"stili/si.gif\" border=\"0\" alt=\"Sì\"></a>
      <a href=\"javascript:history.back()\"> <img src=\"stili/no.gif\" border=\"0\" alt=\"No\"></a>";                     
                            
   }    

// questo lo switch relativo:

case 'delete':
        delete($_REQUEST['ide']);
        break;    

//questa la funzione delete (controllo solo il passaggio dei valori al momento come dicevo prima:

function delete($ide) {
   
 
  
   
   foreach ($ide as $key => $m_id2)
{
   echo "Hai selezionato la checkbox: $key con valore: $m_id2<br />";
}      

allora nella prima nessun problema il foreach fa il suo lavoro.

Nella seconda (delete) ottengo un messaggio di errore warning..argomento del foreach ecc.

Qual'è il problema adesso? Cosa mi sfugge?

Ciao e grazie.

risposto 5 anni fa
frankphp
X 0 X

Si tratta di un waring, non preoccupante. Per capire meglio fornisci tutto l'errore e in che condizioni compare.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Si tratta di un waring, non preoccupante. Per capire meglio fornisci tutto l'errore e in che condizioni compare.

ecco l'errore:

Warning: Invalid argument supplied for foreach() in C:\Programmi\xampp\htdocs\primanota\in_fornitori.php on line 289

la riga 289 è questa:

....   

foreach ($ide as $key => $m_id2)

...

ciao

risposto 5 anni fa
frankphp
X 0 X

Compare quando non è selezionato nessun checkbox?

Prima di entrare nel foreach controlla se il parametro passato è un array e se effettivamente è "pieno". Altrimenti ottieni quell'errore.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Compare quando non è selezionato nessun checkbox?

Prima di entrare nel foreach controlla se il parametro passato è un array e se effettivamente è "pieno". Altrimenti ottieni quell'errore.

ho fatto l'echo di $ide e ottengo array stampato a video.

Cosa devo fare adesso?

Grazie

risposto 5 anni fa
frankphp
X 0 X

Non dovresti riuscire a fare un echo di un array.

Fa una cosa del genere:

if(is_array($ide))
{
   //qui metti il tuo foreach
}

Vedi un po'.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Non dovresti riuscire a fare un echo di un array.

Fa una cosa del genere:

if(is_array($ide))
{
   //qui metti il tuo foreach
}

Vedi un po'.

nel frattempo avevo fatto questo

if (isset($ide)){

    echo "ok";

}

e dava risultato ok..aspe che provo il tuo codice  :)

risposto 5 anni fa
frankphp
X 0 X

niente

Non stampa ugualmente niente.

Strano...

risposto 5 anni fa
frankphp
X 0 X

E' evidente che quello che fornisci non è un array.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
E' evidente che quello che fornisci non è un array.

ok.

però visto che nella funzione dom_delete() l'array è ok,

come lo passo correttamente alla funzione delete?

Grazie ancora....ci sentiamo stasera sul tardi, adesso devo scappare, ciao.

risposto 5 anni fa
frankphp
X 0 X

Forse passi il parametro sbagliato?

$_REQUEST['ide']

Controlla.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Forse passi il parametro sbagliato?

$_REQUEST['ide']

Controlla.

No, non mi sembra?

E poi qualcosa viene comunque passato (se faccio un echo della variabile ottengo la scritta "array" sia nella funzione

dove è ok sia in delete().

Tu dalla funzione dom_delete come passeresti il valore alla funzione delete per fare poi lo stesso foreach?

Grazie

risposto 5 anni fa
frankphp
X 0 X

Non stai passando un array. Stai passando una semplice variabile.

Rivedi bene il passaggio dei parametri nelle funzioni Php, temo ti stai perdendo in un bicchier d'acqua ok?

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

scusami Mario, se vedessi l'errore non sarei qui a chiedere aiuto, ti pare?

Avevo premesso che magari e' una sciocchezza.

Il codice e' quello. Tu lo vedi l'errore?

Ripeto tu come passeresti quell'array che nella prima funzione c'e' e funziona e nella seconda no?

Grazie

risposto 5 anni fa
frankphp
X 0 X

frankphp tu hai fornito "spezzoni di codice".

A dom_delete fai questo:

function dom_delete(){

$check = $_POST['checkbox'];

$check è il tuo array preso da $_POST['checkbox'].

Per delete invece fai questo:

delete($_REQUEST['ide']);

Passi dunque $_REQUEST['ide'] che non so da dove tu lo stai prendendo. Tale variabile non è un array, $_REQUEST è un array ma l'indice che indichi non contiene un array.

Se a delete devi passare il checkbox come dom_delete ti basta fare così:

delete($_POST['checkbox'])
risposto 5 anni fa
Mario Santagiuliana
X 0 X

frankphp tu hai fornito "spezzoni di codice".

A dom_delete fai questo:

function dom_delete(){

$check = $_POST['checkbox'];

$check è il tuo array preso da $_POST['checkbox'].

Per delete invece fai questo:

delete($_REQUEST['ide']);

Passi dunque $_REQUEST['ide'] che non so da dove tu lo stai prendendo. Tale variabile non è un array, $_REQUEST è un array ma l'indice che indichi non contiene un array.

Se a delete devi passare il checkbox come dom_delete ti basta fare così:

delete($_POST['checkbox'])

Non ci siamo capiti marios.

Non posso passare direttamente $_POST['checkbox'] alla funzione delete (a meno che non utilizzi una sessione..ma vorrei evitare di ricorrere alle sessioni e capire dove e il perchè del problema) perchè nella dom_delete ci deve essere prima la visualizzazione dei record  che si intendono eliminare per poi dare la conferma col pulsate si.

La delete() riceve la variabile da qui (vedi: task=delete&ide=$check):

function dom_delete(){

$check = $_POST['checkbox'];

foreach ($check as $key => $m_id)

{

   echo "Hai selezionato la checkbox: $key con valore: $m_id<br />";

}

echo "

Sei sicuro di voler cancellare i fornitori <b>?<br /><br />

<a href=\"fornitori.php?task=delete&ide=$check\"><img src=\"stili/si.gif\" border=\"0\" alt=\"Sì\"></a>

<a href=\"javascript:history.back()\"> <img src=\"stili/no.gif\" border=\"0\" alt=\"No\"></a>";

   }   

//che la invia allo switch che richiama la funzione delete () e gli invia la variabile

case 'delete':

        delete($_REQUEST['ide']);

        break;    

// delete che la riceve

function delete($ide) {

...

   

E' tutto codice che avevo già postato.

Ho sempre passato la variabili così e non ho mai avuto problemi.

Adesso c'è un problema specifico con l'array (magari è qualcosa di simile a quello verificatasi col codice di giogiomogio..che so io..boh?).

Mah? Ciao

risposto 5 anni fa
frankphp
modificato 5 anni fa
X 0 X

Il problema del codice di giorgiomogio non centra nulla con il tuo problema.

$_REQUEST['ide'] da dove deriva?

Il codice che hai passato è un codice parziale. Da tale codice non si può dire niente o aiutarti di più di quel che ho già fatto.

L'array $_REQUEST comprende "tutto" ($_GET e $_POST). Se tu passi tramite get un valore "ide" è ovvio che questo non è un array.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Il problema del codice di giorgiomogio non centra nulla con il tuo problema.

$_REQUEST['ide'] da dove deriva?

Il codice che hai passato è un codice parziale. Da tale codice non si può dire niente o aiutarti di più di quel che ho già fatto.

L'array $_REQUEST comprende "tutto" ($_GET e $_POST). Se tu passi tramite get un valore "ide" è ovvio che questo non è un array.

ma come da dove deriva?  :D

<a href=\"fornitori.php?task=delete&ide=$check\"><img src=\"stili/si.gif\" border=\"0\" alt=\"Sì\"></a>

Se poi mi dici che così non si possono passare gli array allora è un'altra storia.

Ma come allora? E' quello che vorrei sapere.

Grazie ancora

risposto 5 anni fa
frankphp
X 0 X

ma come da dove deriva?  :D

<a href=\"fornitori.php?task=delete&ide=$check\"><img src=\"stili/si.gif\" border=\"0\" alt=\"Sì\"></a>

Se poi mi dici che così non si possono passare gli array allora è un'altra storia.

Non puoi passare in quel modo un array.

Usa sempre un form e in questo form inserisci dei campi nascosti contenendo i valori da cancellare. Più semplice è farlo con l'uso delle sessioni...

Ciao

risposto 5 anni fa
Mario Santagiuliana
X 0 X

ma come da dove deriva?  :D

<a href=\"fornitori.php?task=delete&ide=$check\"><img src=\"stili/si.gif\" border=\"0\" alt=\"Sì\"></a>

Se poi mi dici che così non si possono passare gli array allora è un'altra storia.

Non puoi passare in quel modo un array.

Usa sempre un form e in questo form inserisci dei campi nascosti contenendo i valori da cancellare. Più semplice è farlo con l'uso delle sessioni...

Ciao

Oh ecco, è quello che volevo sapere, Grazie O0

Posso fare in modo di trasformare il pulsante SI in un button di un form e inserire un hidden input e vediamo se funziona...altrimenti le sessioni (che vorrei evitare ma che, come avevo già accennato sopra, avevo messo in preventivo)...ti faccio sapere ciao e grazie ancora.

risposto 5 anni fa
frankphp
X 0 X

Ho provato prima la soluzione con il form:

Nella funzione dom_delete()

function dom_delete(){   

   

   $check = $_POST['checkbox'];

      

      

    foreach ($check as $key => $m_id)

{

   echo "Hai selezionato la checkbox: $key con valore: $m_id<br />";

}

      echo "      

      Sei sicuro di voler cancellare i fornitori <b>?<br /><br />

      <form name=\"xfornitore\" action=\"fornitori.php?task=delete\" method=\"post\">

      <INPUT TYPE=\"HIDDEN\"  name=\"control[]\" value=\"$m_id\">

      <input type=\"submit\"  Value=\"SI\">

      </form>

      <a href=\"javascript:history.back()\"> <img src=\"stili/no.gif\" border=\"0\" alt=\"No\"></a>";                     

                            

   }        

// la funzione delete:

function delete() {

$ide = $_POST['control'];   

 

 

     foreach ($ide as $key => $m_id2)

{

   echo "Risultato: $key con valore: $m_id2<br />";

}

   

Mi stampa solo l'ultimo valore

Cioè se ho selezionato record con id 12  e 15

in dom_delete li vedo (come prima del resto)

in delete

invece vedo solo 15

Ho sbagliato il form?

Grazie

risposto 5 anni fa
frankphp
X 0 X

Il ciclo for lo devi fare solo sul campo input.

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Il ciclo for lo devi fare solo sul campo input.

cosa?

risposto 5 anni fa
frankphp
X 0 X

Con il ciclo foreach che hai creato stai creando molteplici form.

Devi crearne uno solo.

Controlla la tua pagina html creata.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Con il ciclo foreach che hai creato stai creando molteplici form.

Devi crearne uno solo.

Controlla la tua pagina html creata.

Ok RISOLTO!!!!!!!

Ecco la nuova dom_delete():

function dom_delete(){   

   

   $check = $_POST['checkbox'];

echo "<form name=\"xfornitore\" action=\"fornitori.php?task=delete\" method=\"post\">";      

      

    foreach ($check as $key => $m_id)

{

   echo "Hai selezionato la checkbox: $key con valore: $m_id<br />

   <INPUT TYPE=\"HIDDEN\"  name=\"control[]\" value=\"$m_id\">";

}

   

      

 echo"Sei sicuro di voler cancellare i fornitori <b>?<br /><br />      <input type=\"submit\"  Value=\"SI\">

      </form>

      <a href=\"javascript:history.back()\"> <img src=\"stili/no.gif\" border=\"0\" alt=\"No\"></a>";                     

                            

   }       

Il resto è identico.

Grazie

risposto 5 anni fa
frankphp
X 0 X

Ottimo, ora devi solamente recuperare control che è nell'array POST, esattamente come fai in dom_delete. Non dovresti avere problemi in tal senso.

risposto 5 anni fa
Mario Santagiuliana
X 0 X

Gia' fatto! Percio' avevo segnalato che avevo risolto.

Grazie per l'aiuto....e per la pazienza. Ciao

risposto 5 anni fa
frankphp
X 0 X

Ah non avevo compreso :)

Bene così!!!

risposto 5 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda