eliminare righe

ciao! sono nuova con php! ho una tabella con un record x ogni riga ed un checkbox per ogni record, vorrei cancellare le righe con la spunta all'invio del form, sapete dirmi come posso fare?? :)

inviato 9 anni fa
cyb
cyb
1
X 0 X

Vuoi la logica di come farlo o il codice che lo fa?

risposto 9 anni fa
LonelyWolf
X 0 X

la logica se non riesco a fare il codice poi chiedo aiuto!!

risposto 9 anni fa
cyb
cyb
1
X 0 X

io ho provato a dare ai checkbox il nome elimina$n con un contatore $n=n+1, poi un for da 0 a 100 if elimina è diverso da  ""

sql= delete where id= request(elimina$n),

non so se la logica è sbagliata ma non so come scriverlo in php!!

risposto 9 anni fa
cyb
cyb
1
modificato 9 anni fa
X 0 X

Allora il checkbox invia il valore solo se selezionato, per cui nella pagina che riceve i dati del form devi fare un ciclo che ontrolla l'esistenza o meno di elimina$n (isset), se c'è prende il valore e compone la query per l'eliminazione.

un tipico checkbox:

<input type="checkbox" name="elemento1" value="codice_presente_nel_db">

la pagina che riceve:

//il ciclo lo fai tu
if (isset($_POST["elemento1"]) {
    $elimina=$_POST["elemento1"];
    $query = "delete from nometabella where codice = $elimina limit 1;";
   //esecuzione della query
}

Ecco sommariamente come deve andare.

risposto 9 anni fa
LonelyWolf
X 0 X

grazie, + tardi ci provo!! :bye:

risposto 9 anni fa
cyb
cyb
1
X 0 X

ho provato così:

for($w=0;$w<100;$w++){
   if (isset($_POST["'id'.$n"]) {
      $elimina=$_POST["'id'.$n"];
      $sql="DELETE FROM promemo where idmemo=$elimina";
      $query = mysql_query($sql) or die (errore_server());
      header("Location: promemo.php");
   }   
}

con <?php $n=$n+1?> e <input name=<?php echo "id".$n;?>" type="checkbox" id="id$n" value="<?php echo $row['idmemo'];?>">

ma mi da errore!!

risposto 9 anni fa
cyb
cyb
1
X 0 X

Allora, se i checkbox li hai chiamati id1, id2, id3, ecc il nome si compone così:

"id$w" (o in alternativa: "id".$w) dato che è $w la variabile che si incrementa.

risposto 9 anni fa
LonelyWolf
X 0 X

ma è giusto questo:

<input name=<?php echo "id".$n;?>" type="checkbox" id="id$n" value="<?php echo $row['idmemo'];?>">

perchè se facccio così:

for($w=0;$w<100;$w++){
   if (isset($_POST['id'.$w]) {
      $elimina=$_POST['id'.$w];
      $sql="DELETE FROM promemo where idmemo=$elimina";
      $query = mysql_query($sql) or die (errore_server());
      header("Location: promemo.php");
   }   
}

mi da errore qui.

if (isset($_POST['id'.$w]) {

PHP Parse error: parse error, unexpected '{' in C:\Inetpub\wwwroot\ecom\delete_memo.php on line 18  :'(

risposto 9 anni fa
cyb
cyb
1
X 0 X

ho provato anche così:

$cancella =implode(" ',' ",$_POST['idmemo'])
foreach( $cancella as $campo => $valore ) {
   $query="DELETE FROM promemo WHERE idmemo = $valore";
   $query = mysql_query($sql) or die (errore_server());
   header("Location: promemo.php");
}

con:

<input name="idmemo" type="checkbox" value="<?php echo $row['idmemo'];?>">

ma non va!!

risposto 9 anni fa
cyb
cyb
1
X 0 X

ma è giusto questo:

<input name=<?php echo "id".$n;?>" type="checkbox" id="id$n" value="<?php echo $row['idmemo'];?>">

perchè se facccio così:

for($w=0;$w<100;$w++){
   if (isset($_POST['id'.$w]) {
      $elimina=$_POST['id'.$w];
      $sql="DELETE FROM promemo where idmemo=$elimina";
      $query = mysql_query($sql) or die (errore_server());
      header("Location: promemo.php");
   }   
}

mi da errore qui.

if (isset($_POST['id'.$w]) {

PHP Parse error: parse error, unexpected '{' in C:\Inetpub\wwwroot\ecom\delete_memo.php on line 18  :'(

Prova a guardare le parentesi di quello che hai scritto:

if (isset($_POST['id'.$w]) { 2 tonde aperte e solo 1 tonda chiusa, per forza segnala errore su {.

deve essere:

if (isset($_POST['id'.$w])) {

risposto 9 anni fa
LonelyWolf
X 0 X

grazie, sono una frana!

ora però non mi da errore ne mi cancella i record, evidentemente isset da false, forse l'errore è qua:

<input name=<?php echo "id$n";?>" type="checkbox" id="id$n" value="<?php echo $row['idmemo'];?>">

come dovrei corrreggere??

risposto 9 anni fa
cyb
cyb
1
X 0 X

Così però non ne veniamo a capo, per favore posta tutto il codice che genera i checkbox e tutto il codice della pagina che riceve i dati.

Non posso sapere se <input name=<?php echo "id$n";?>" type="checkbox" id="id$n" value="<?php echo $row['idmemo'];?>"> è giusto dato che non so come sono valorizzate le variabili.

risposto 9 anni fa
LonelyWolf
X 0 X
<?php

include ("connessione.php");
connect_to_ecom_db();

include ("errore.php");

$sql = "select * from promemo"; // where azienda LIKE '%$azienda%'";
$query =mysql_query ($sql) or die (errore_server());

$n=0;
?>

il form

<table width="90%" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF"><form name="form1" method="post" action="delete_memo.php">

  <tr bgcolor="#99CCFF">

    <td width="60%" bgcolor="#99CCFF"><div align="center"><span class="Stile7">promemo</span></div></td>

    <td width="20%"><div align="center"><span class="Stile7">scadenza</span></div></td>

    <td width="20%"><div align="center">

      <input type="submit" name="Submit" value="eliminare ">

    </div></td>

  </tr><?php while ($row= mysql_fetch_array ($query)){?>

  <tr><?php $n=$n+1;?>

    <td>&nbsp;<?php echo "<a href='dettagli.php?id=$row[idmemo]'>".$row['memo']."</a>";?></td>

    <td width="30%">&nbsp;<?php echo $row['scadenza'];?>

      <div align="center"></div>

      <div align="center"></div>

    <div align="center"></div></td>

    <td width="10%">

      <div align="center">

        <input name=<?php echo "id$n";?>" type="checkbox" id="id$n" value="<?php echo $row['idmemo'];?>">

      </div></td>

  </tr><?php }?></form>

</table>

<body><?php include("menu.php"); ?>

<br>

<table width="90%" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF"><form name="form1" method="post" action="delete_memo.php">

  <tr bgcolor="#99CCFF">

    <td width="60%" bgcolor="#99CCFF"><div align="center"><span class="Stile7">promemo</span></div></td>

    <td width="20%"><div align="center"><span class="Stile7">scadenza</span></div></td>

    <td width="20%"><div align="center">

      <input type="submit" name="Submit" value="eliminare ">

    </div></td>

  </tr><?php while ($row= mysql_fetch_array ($query)){?>

  <tr><?php $n=$n+1;?>

    <td>&nbsp;<?php echo "<a href='dettagli.php?id=$row[idmemo]'>".$row['memo']."</a>";?></td>

    <td width="30%">&nbsp;<?php echo $row['scadenza'];?>

      <div align="center"></div>

      <div align="center"></div>

    <div align="center"></div></td>

    <td width="10%">

      <div align="center">

        <input name=<?php echo "id$n";?>" type="checkbox" id="id$n" value="<?php echo $row['idmemo'];?>">

      </div></td>

  </tr></form><?php }?>

</table>

</body>

delete_memo.php

<?php
include ("connessione.php");
connect_to_ecom_db();

include ("errore.php");

for($w=0;$w<100;$w++){
   if (isset($_POST['id'.$w])) {
      $elimina=$_POST['id'.$w];
      $sql="DELETE FROM promemo where idmemo=$elimina limit 1";
      $query = mysql_query($sql) or die (errore_server());
      header("Location: promemo.php");
   }   
}
?>
risposto 9 anni fa
cyb
cyb
1
X 0 X

Ragazza mia (mi permetti vero?), ci vuole un po' più di ordine nelle cose altrimenti ti sfuggono i "dettagli" che bloccano tutto (come ad esempio la parentesi di prima).

Abbi un po' di pazienza che lo sistemo, ho già visto qualche cosa non a posto.

risposto 9 anni fa
LonelyWolf
X 0 X

Dunque, ecco la prima pagina, quella con il form:

<?php
include ("connessione.php");
connect_to_ecom_db();

include ("errore.php");

$sql = "select * from promemo"; // where azienda LIKE '%$azienda%'";
$query =mysql_query ($sql) or die (errore_server());

$n=0;
?>
<html>
<head></head>
<body>
<?php
include("menu.php");
?>
<br>
<table width="90%" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
<form name="form1" method="post" action="delete_memo.php">
  <tr bgcolor="#99CCFF">
    <td width="60%" bgcolor="#99CCFF"><div align="center"><span class="Stile7">promemo</span></div></td>
    <td width="20%"><div align="center"><span class="Stile7">scadenza</span></div></td>
    <td width="20%"><div align="center"><input type="submit" name="Submit" value="eliminare "></div></td>
  </tr>
   <?php
   while ($row= mysql_fetch_array ($query)){?>
  <tr>
   <?php
          $n++;
          echo "<td>&nbsp;<a href='dettagli.php?id=$row[idmemo]'>".$row['memo']."</a></td>";
          echo "<td>&nbsp;$row['scadenza']</td>";
  ?>
    <td>
      <div align="center">
        <?php
                   echo "<input type='checkbox' name='id$n' id='id$n' value='".$row['idmemo']."' />";
           ?>
      </div>
      </td>
  </tr>
</form>
<?php
}
?>
</table>
</body>
</html>

C'erano tag aperti e chiusi inutilmente, quale " non chiuso e una cosa: hai messo le dimensioni delle colonne (td) nella prima riga (tr) quindi anche tutte le righe successive saranno uguali non puoi cambiare dimensione a piacere.

Ora vedo di controllare la pagina che riceve.

P.S.

Vedi come è + chiaro il codice ordinato?

risposto 9 anni fa
LonelyWolf
X 0 X

Ecco qua, dovrebbe essere tutto a posto ora:

<?php
include ("connessione.php");
connect_to_ecom_db();
include ("errore.php");
//$w parte da 1 perchè $n nella creazione viene prima incrementato
for($w=1;$w<100;$w++){ //Sei sicura che al max sono 100 le note?                  
      if (isset($_POST['id'.$w])) {
         $elimina=$_POST['id'.$w];
       $sql="DELETE FROM promemo where idmemo=$elimina limit 1";
       $query = mysql_query($sql) or die (errore_server());
     }
}// finito il ciclo, quindi recuperati tutti i checkbox ed eliminati deve ritornare all'altra pagina
header("Location: promemo.php");
?>
risposto 9 anni fa
LonelyWolf
X 0 X

grazie, lonely wolf, funziona!!!!!!!!!!!!!!!

che Dio ti benedica!!!!

 :D :D :D

ciao!

 :bye:

risposto 9 anni fa
cyb
cyb
1
X 0 X

lonely wolf, scusa, solo una cosa, li cancella ad uno ad un, non tutti quelli spuntati!!!

anche se tolgo limit:

$sql="DELETE FROM promemo where idmemo=$elimina";

risposto 9 anni fa
cyb
cyb
1
modificato 9 anni fa
X 0 X

limit 1 è solo una "sicurezza" in più, non veramente necessario dato che l'idmemo è unico.

Sì, li cancella uno ad uno perchè mysql può eseguire una query alla volta, con mysql 5 (non so se anche il 4, non sono ben informato in merito) è possibile eseguire + query in una volta sola, ma la query in se elimina un solo memo alla volta,  ogni memo selezionato.

il ciclo viene eseguito 99 volte, controlla se è spuntato id1 e nel caso cancella il memo corrispondente, poi controlla id2 e nel caso cancella il memo corrispondente, e così via fino a id99 poi ritorna alla pagina promemo.php.

il forum ha sballato un po' l'identazione, ma $sql =.... e $query = mysql_query... sono all'interno delle graffe dell'if.

Se vuoi essere sicura senza intervenire sul db è sufficiente che commenti (metti // davanti) $query = mysql_query(..... ed al suo posto metti echo "$sql<br />"; stamperà a video tutte le query corrispondenti ad ogni checkbox e poi segnalerà l'errore di header (se non commenti anche quell'istruzione!)

risposto 9 anni fa
LonelyWolf
X 0 X

Non sarebbe meglio evitare di fare + cicli del necessario ( - del necessario) ?

aggiungi nella pagina del form, prima della chiusura del form:

<input type="hidden" name="n_checkb" value="<?php echo $n; ?>">

e in dlete_memo.php cambia:

for($w=1;$w<100;$w++){

con

for($w=1;$w<=$_POST['n_checkb'];$w++){

Così farà un numero di cicli esattamente uguale a quanti checkbox sono presenti nel form.

risposto 9 anni fa
LonelyWolf
X 0 X

grazie, che bello domani lo vedo!!

risposto 9 anni fa
cyb
cyb
1
X 0 X

Mi correggo:

Così farà un numero di cicli esattamente uguale a quanti checkbox sono presenti nel form.

Sarebbe da aggiungere:

Che non necessariamente è il numero dei checkbox selezionati, ma quello non possiamo saperlo.

risposto 9 anni fa
LonelyWolf
modificato 9 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda