richiamare una funzione: funziona solo la seconda volta...

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti,
ho una pagina che deve elencare i buoni omaggio per una lezione che risultino ancora aperti.
Quindi semplicemente ho scritto una semplice funzione che mi mostra il risultato della ricerca nel db.
E fin qui tutto ok.
Ad ogni riga ho aggiunto un pulsante per eliminare il voucher corrispondente.
Il pulsante richiama una funzione all'interno della pagina che cancella il record.
La cancellazione funziona correttamente.
prima di chiudere la funzione di cancellazione, richiamo nuovamente la funzione che mostra l'elenco dei voucher.
Peccato che mi venga mostrato l'elenco che comprende ancora il record appena cancellato (ho verificato che dopo aver premuto il bottone "ELIMINA" nel db il record effettivamente non c'e' piu')
Se premo nuovamente il pulsante ELIMINA, finalmente ottengo l'elenco correttamente aggiornato.
Quindi devo premere due volte lo stesso pulsante... Come mai? Non riesco a capire.
Se qualcuno mi puo' aiutare. grazie.
Ecco il codice della pagina:
PHP:
<?php
session_start();
//se non c'è la sessione registrata
if (!$_SESSION['autorizzato']) {
  echo "<h1>Area riservata, accesso negato.</h1>";
  echo "Per effettuare il login clicca <a href='index.php'><font color='blue'>qui</font></a>";
  die;
}
 
//Altrimenti Prelevo il codice identificatico dell'utente loggato

$cod = $_SESSION['cod']; //id cod recuperato nel file di verifica


?>




<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Elenco voucher regalo ancora aperti</title>
<link href="backoffice.css" rel="stylesheet" type="text/css" />


</head>

<body>


<div class="testoPiccolo" id="vedo" style="width: 80%">
<p><? echo "$cod"; ?>, di seguito l'elenco dei voucher ancora da riscattare:<br></p>
<br>
<hr>
<br>

<table width=100%>
	<tr>
		<td width="15%">N. Voucher</td><td width="15%">Destinatario</td><td width="5%">Importo pagato</td>
		<td width="5%">Posti Prenotati</td><td width="5%">ID Lezione</td>
		<td width="20%">Donatore</td><td width="10%">Telefono Contatto</td><td width="15%">Email Contatto</td>
		<td>&nbsp;</td>
	</tr>
	<tr>
		<td colspan="9"><hr></td>
	</tr>


<?

elenca();


	function elenca() {
	include 'connect.php';

	$cerca = ("SELECT * FROM voucher_regalo WHERE utilizzato = '0'");
	$vai = mysql_query($cerca);
	$num = mysql_num_rows($vai);

	$i = 0;

	while ($i < $num) {
		$voucher = mysql_result($vai,$i,"voucher");
		$nomedest = mysql_result($vai,$i,"nome_destinatario");
		$cognomedest = mysql_result($vai,$i,"cognome_destinatario");
		$destinatario = $nomedest . " " . $cognomedest;
		$importo_pagato = mysql_result($vai,$i,"importo");
		$posti = mysql_result($vai,$i,"postiprenotati");
		$lez = mysql_result($vai,$i,"id_lezione");
		$donatore = mysql_result($vai,$i,"donatore1");
		$telefono = mysql_result($vai,$i,"telefono_contatto");
		$mail = mysql_result($vai,$i,"mail_contatto");

		?>

		<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
			<tr>
				<td><input type="text" name="ilvoucher" value="<? echo $voucher; ?>" readonly="readonly"></td>
				<td><? echo $destinatario; ?></td>
				<td align="right"><? echo $importo_pagato; ?></td>
				<td align="center"><? echo $posti; ?></td>
				<td align="center"><? echo $lez; ?></td>
				<td><? echo $donatore; ?></td>
				<td><? echo $telefono; ?></td>
				<td><? echo $mail; ?></td>
				<td align="center"><input type="submit" value=" ELIMINA VOUCHER " name="butta"  class="rosso"></td>
			</tr>

		</form>

	<tr>
		<td colspan="9"><hr></td>
	</tr>


	<?

	$i++;

	}

	mysql_close();
}

if (isset($_POST['butta'])){cancella();}

function cancella(){

	$vouch = $_POST['ilvoucher'];
	

	include 'connect.php';
	$query2 = ("DELETE FROM voucher_regalo WHERE voucher = '$vouch'");
	$canc = mysql_query($query2);

	elenca();
}

?>

</table>

</div>




</body>
</html>
 
prova a richiamare la funzione elenca non da dentro la funzione cancella, ma subito dopo quella, tipo

PHP:
// .....
if (isset($_POST['butta']))
{
    cancella();
    elenca(); // oppure qui fai un refresh
}
//.....

oppure come ultima istruzione di cancella() fai un refresh della pagina che automaticamente richiama elenca()
 
Io per prima cosa proverei così

PHP:
// .....
if (isset($_POST['butta']))
{
    cancella();
    header("refresh:1;url=".$_SERVER['PHP_SELF']);
}
//.....
 
no, devo sempre cliccare sul bottone una seconda volta. Non capisco il motivo, anche perchè ho utilizzato lo stesso meccanismo su un'altra pagina e li' funziona perfettamente. L'unica differenza è che dove funziona per prima cosa devo inserire un codice in un form. Il submit del form mi chiama la funzione che mostra i risultati della ricerca nel db; a fianco di ogni riga ho due pulsanti, uno per modificare la riga, l'altro per eliminarla. Premendo uno dei due pulsanti richiamo le rispettive funzioni alla fine delle quali chaimo la funzione "mostra" (che è identica a "elenca()")... Lì va, qui no...
 
prova a modificare allora la funzione cancella()

PHP:
if (isset($_POST['butta'])){
    $vouch = $_POST['ilvoucher'];
    cancella($vouch);
}

function cancella($vouch){
    include 'connect.php';
    $query2 = ("DELETE FROM voucher_regalo WHERE voucher = '$vouch'");
    $canc = mysql_query($query2);

    header("refresh:1;url=".$_SERVER['PHP_SELF']);
    // oppure header("location: ".$_SERVER['PHP_SELF']);
}
 
Ho risolto.
Modificata la funzione cancella aggiungendo per il refresh:
Codice:
$secondsWait = 1;
echo '<meta http-equiv="refresh" content="'.$secondsWait.'">';
 

Discussioni simili