Attivare funzione con un link

  • Creatore Discussione Creatore Discussione ivarello
  • Data di inizio Data di inizio

ivarello

Utente Attivo
14 Dic 2012
211
1
16
Ciao a tutti mi chiedevo se si potesse attivare una funzione php cliccando su un link, esempio:
PHP:
<?php
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 prodotti 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();

	//$messaggio = urlencode("Numero record cancellati: $num_record");
	//header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
}
?>

poi vorrei richiamarla nella pagina con un include e poi così:

PHP:
//Tabellazione


echo '
<center><table width="900" border="0" cellpadding="5" cellspacing="10">
	<tr>
		<th bgcolor="#CEECF5" width=60><center>Azione</center></th>
	</tr></center>';

while ($row = mysql_fetch_assoc($result)) {
	$link2 = elimina_record($ids);



	echo "<tr>
			<td bgcolor='#EFF5FB'><center><a href=\"$link\"><img src=images/bottone_cancella.png></a></center></td>
		</tr>";
}

echo '</table>';
 
Devi organizzare la struttura in un altro modo, non devi passare la funzione ma il link ad una pagina che eseguirà la funzione adoperando controlli su ciò che gli arriva


es. nel while
PHP:
echo "<tr> 
            <td bgcolor='#EFF5FB'><center><a href=\"elimina.php?ids=".urlencode(join(',',$ids))."\"><img src=images/bottone_cancella.png></a></center></td> 
        </tr>";

es. in elimina.php
PHP:
if(!empty($_GET['ids'])) elimina_records(explode(',',urldecode($_GET['ids'])));

edit: ho fatto alcune modifiche in modo che cosi dovrebbe eliminare tutto insieme, inoltre non ho capito il senso del while se devi fare una sola azione


Infine ti segnalo una possibile XSS
PHP:
header('location: '.$_SERVER['PHP_SELF'].'?msg='.$messaggio);

Senza controlli l'utente potrebbe far stampare ciò che vuole, anche codice html malevolo
 
Ultima modifica:
Grazie tante per la risposta, domani provo ;) cmq per il while ovviamente ci sono altri dati che non ho scritto per utilità (praticamente ogni riga ha il suo id così elimino solo quella e non tutto) ;)
 
Ultima modifica:
Grazie tante per la risposta, domani provo ;) cmq per il while ovviamente ci sono altri dati che non ho scritto per utilità (praticamente ogni riga ha il suo id così elimino solo quella e non tutto) ;)

Beh allora ricorreggo il codice

nel while
PHP:
echo "<tr> 
            <td bgcolor='#EFF5FB'><center><a href=\"elimina.php?id=$row[id]\"><img src=images/bottone_cancella.png></a></center></td> 
        </tr>";

elimina.php
PHP:
//ovviamente aggiungi eventualmente un else o altri controlli
if(!empty($_GET['id'])) mysql_query("DELETE FROM prodotti WHERE id=".(int)$_GET['id']) or die(mysql_error());
 

Discussioni simili