Indique el resultado buscado:
El valor del contador es:
<?php
session_start();
//
//Redirecciona a una página relativa a la actual, acepta argumentos como http_build_query
function redireccion_relativa($relative_URL,$args = null,$prefijo = null) {
if (!is_null($args)) {
$relative_URL .= (strpos($relative_URL,'?')?'&':'?') . http_build_query($args,$prefijo);
}
header("Location: http://{$_SERVER['HTTP_HOST']}" . str_replace('\\','/',dirname($_SERVER['PHP_SELF']) . '/' . $relative_URL));
exit;
}
//
//Redirecciona a esta misma página con argumentos opcionales
function redireccion_aqui($args= null,$prefijo = null) {
if (!is_null($args)) {
$argURL = '?' . http_build_query($args,$prefijo);
}
header("Location: http://{$_SERVER['HTTP_HOST']}" . str_replace('\\','/',$_SERVER['PHP_SELF']) . $argURL);
exit;
}
//
// Controla si se enviaron datos (submit)
if (!is_null($_GET['submit'])) {
// Esta parte es simplemente para el ejemplo.
// Normalmente, se debería ejecutar una operación sobre la base de datos que debería funcionar o dar error
// En este caso, preguntamos al usuario si desea que funcione o falle
if ($_GET['submit'] == 'Funciona') {
// Simulamos el efecto de tener éxito, en este caso, incrementamos un contador
if (array_key_exists('contador',$_SESSION)) $_SESSION['contador']++;
else $_SESSION['contador'] = 1;
//
// ***********************************************
// ESTA ES LA PARTE IMPORTANTE
// En caso de éxito, hacemos una redirección a esta misma página con un argumento que nos indica el éxito
// Se deberán agregar los argumentos que se consideren necesarios para mostrar un mensaje de confirmación significativo
redireccion_aqui(array('confirma' => 'ok'));
} else {
// Si la supuesta operación de SQL hubiera fallado, la actualización no se habría hecho
// Como todavía no hemos enviado los 'headers' no podemos mostrar nada, por lo tanto lo guardamos para usar después
$resultado = 'no funcionó';
}
}
//
// Aquí llega después de la redirección anterior.
// Si se ejecuta las siguientes instrucciones no se habrán ejecutado las previas,
// o sea que en la confirmación no se actualiza la base de datos
if ($_GET['confirma'] == 'ok') {
$resultado = 'Funcionó';
}
//
?>
<html><head>
<title>Evitar duplicación de registros con Refrescar (F5)</title>
</head>
<body>
<h1>Evitar duplicación de registros con Refrescar (F5)</h1>
<?php
// Acá muestro el mensaje que antes no podía mostrar por faltar los headers
if (!is_null($resultado)) {
echo '<p>El resultado de la operación anterior fué: ',$resultado,'</p><hr/>';
}
?>
<p>Indique el resultado buscado:</p>
<form method="get">
<input type="submit" name="submit" value="Funciona" /> <input type="submit" name="submit" value="No funciona" />
</form>
<hr />
<p>El valor del contador es: <?php echo $_SESSION['contador']; ?> </p>
<hr />
<pre>
<?php highlight_file('NoDuplicados.php'); ?>
</pre>
</body></html>