checkbox con più function

  • Creatore Discussione Creatore Discussione dream88
  • Data di inizio Data di inizio

dream88

Utente Attivo
8 Apr 2009
62
0
0
Ciao a tutti!
Vi scrivo perché non riesco a risolvere un problema con le checkbox. Vi spiego meglio...
Io con una query visualizzo tutti i dati di una tabella (in una pagina php) a cui associo una checkbox con il relativo id. Ho due pulsanti "cancella" e "invio" che devono trovare le checkbox selezionate e fare le rispettive operazioni ovvero cancellare o inviare il record a un'altra tabella... Come posso fare? A me funziona solo "cancella"...come posso utilizzare le stesse checkbox anche per la function "invia"?
Aiutatemi, non ce la faccio proprio... E scusate la mia ignoranza!
 
Questo è il codice che ho utilizzato....

<?php
include('config.php');

if($_POST)
{
$ids = isset($_POST['id']) ? $_POST['id'] : array();
elimina_record($ids);
}
elseif(isset($_GET['id']))
{
elimina_record(array($_GET['id']));
}
else
mostra_lista();


function mostra_lista()
{
// mostro un eventuale messaggio
if(isset($_GET['msg']))
echo '<b>'.htmlentities($_GET['msg']).'</b><br /><br />';

// preparo la query
$query = "SELECT * FROM desideri";

// invio la query
$result = mysql_query($query);

// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}

echo '
<form name="form1" method="post" action="">
<table border="1">
<tr>
<th>&nbsp;</th>
<th>Titolo</th>
<th>Autore</th>
<th>Editore</th>
<th>Prezzo</th>
</tr>';

while ($row = mysql_fetch_assoc($result))
{

echo "<tr>
<td><input name=\"id[]\" type=\"checkbox\" value=\"$row[Id]\" /></td>
<td>".$row['Titolo']."</td>
<td>".$row['Autore']."</td>
<td>".$row['Editore']."</td>
<td>".$row['Prezzo']."</td>
</tr>";
}

echo '</table>
<br />
<input type="submit" name="Submit" value="Elimina record selezionati" />
<input type="submit" name="Aggiungi" value="Aggiungi a carrello"/>
</form>';

// libero la memoria di PHP occupata dai record estratti con la SELECT
mysql_free_result($result);

// chiudo la connessione a MySQL
mysql_close();
}

function elimina_record($ids)
{
// verifico che almeno un id sia stato selezionato
if(count($ids) < 1)
{
$messaggio = urlencode("Nessun record selezionato!");
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
exit;
}

// per precauzione converto gli ID in interi
$ids = array_map('intval',$ids);

// creo una lista di ID per la query
$ids = implode(',',$ids);

// preparo la query
$query = "DELETE FROM desideri WHERE Id IN ($ids)";

// invio la query
$result = mysql_query($query);

// controllo l'esito
if (!$result) {
die("Errore nella query $query: " . mysql_error());
}

// conto il numero di record cancellati
$num_record = mysql_affected_rows();

// chiudo la connessione a MySQL
mysql_close();
header('location: '.$_SERVER['PHP_SELF']);
}

?>
 
Tralasciando il codice non del tutto... pulito... non riesco a capire quale sia il problema.
Sinceramente guardando il codice l'unica cosa che potrebbe motivare un non funzionamento è il blocco di controllo iniziale. Utilizza le {} anche per l'else.
E comunque vedere la pagina "in azione" può aiutare a risolvere più velocemente il problema. Per questo ti ho chiesto l'url e non il codice sorgente.
 
Il codice che ti ho messo funziona...
Non so come fare a inserire la funzione "invia($ids)" e ad associarci il pulsante giusto.
Scusa ma non sono molto pratica.
 
Ah perdonami, non avevo capito.
Beh allora la questione è molto semplice: imposta ai due bottoni (in html) lo stesso nome (Es: name="action") e imposta un valore ai due bottoni (Es: value="Invia" e value="Elimina") e nella pagina php gestisci il controllo normalmente:
PHP:
<?php
if ($_POST['action'] == 'Invia') {
  // invia...
} elseif ($_POST['action'] == 'Elimina') {
  // elimina...
}
Chiaramente poi ti gestirai il tuo codice come meglio credi.
 
Grazie per l'aiuto!
Volevo chiederti un altra cosa... Come mai se unisco il codice che ti ho messo prima nell'html, mi dà l'errore:Cannot modify header information...?
 
Perchè cerchi di fare una redirect.
Se hai già stampato del codice html non puoi re-indirizzare la pagina da un'altra parte.
Non puoi modificare l'header... perchè di default se stampi codice html lui lo imposta come text/html e invece tu lo fai diventare un "location".
 
Ma quindi come posso fare?
La parte di html è solo composta da link ad altre pagine e da un form di ricerca nel database... Nelle altre pagine non mi dava questo errore perché lo mettevo all'inizio della pagina prima del tag <html> ma questo non posso se no la tabella mi appare prima di tutta l'impaginazione...
 
Non ci sono tanti modi per fare: lo metti prima di qualasiasi tag html e ci metti dopo un bel exit;.
Unica soluzione.

Oppure usi javascript.
 

Discussioni simili