Le code ci-dessous fonctionne parfaitement. Dans un fichier appelé submit.php, un utilisateur peut entrer une soumission via un formulaire. Le formulaire va à submit2.php, où du code insère la soumission dans une base de données MySQL. Jusqu'ici tout va bien.Empêcher la soumission d'une soumission lors de l'actualisation d'un navigateur
Voici le problème: une fois que l'utilisateur a atterri sur submit2.php, si l'utilisateur actualise le navigateur, une boîte de dialogue «Confirmer la nouvelle soumission du formulaire» s'affiche. Ensuite, si l'utilisateur clique sur "Continuer" dans cette fenêtre, la soumission sera soumise à nouveau à la base de données MySQL.
Comment faire effectuer les opérations suivantes sur submit2.php:
Le pop-up n'apparaît pas si le navigateur est actualisé.
La soumission ne sera pas soumise à nouveau à la base de données.
Merci à l'avance,
John
Sur submit.php:
echo '<form action="http://www.domain.com/sample/submit2.php" method="post">
<input type="hidden" value="'.$_SESSION['loginid'].'" name="uid">
<div class="submissiontitle"><label for="title">Story Title:</label></div>
<div class="submissionfield"><input name="title" type="title" id="title" maxlength="1000"></div>
<div class="urltitle"><label for="url">Link:</label></div>
<div class="urlfield"><input name="url" type="text" id="url" maxlength="500"></div>
<div class="submissionbutton"><input name="submit" type="submit" value="Submit"></div>
</form>
';
Sur submit2.php:
if (isLoggedIn() == true)
{
$remove_array = array('http://www.', 'http://', 'https://', 'https://www.', 'www.');
$cleanurl = str_replace($remove_array, "", $_POST['url']);
$cleanurl = strtolower($cleanurl);
$cleanurl = preg_replace('/\/$/','',$cleanurl);
$cleanurl = stripslashes($cleanurl);
$title = $_POST['title'];
$uid = $_POST['uid'];
$title = mysql_real_escape_string($title);
$title = stripslashes($title);
$slug = str_replace(' ', '-', $title);
echo '-'.$site1.'-';
$cleanurl = mysql_real_escape_string(trim($cleanurl));
$site1 = 'http://' . $cleanurl;
$displayurl = parse_url($site1, PHP_URL_HOST);
function isURL($url1 = NULL) {
if($url1==NULL) return false;
$protocol = '(http://|https://)';
$allowed = '[-a-z0-9]{1,63}';
$regex = "^". $protocol . // must include the protocol
'(' . $allowed . '\.)'. // 1 or several sub domains with a max of 63 chars
'[a-z]' . '{2,6}'; // followed by a TLD
if(eregi($regex, $url1)==true) return true;
else return false;
}
if(isURL($site1)==true)
mysql_query("INSERT INTO submission VALUES (NULL, '$uid', '$title', '$slug', '$cleanurl', '$displayurl', NULL)");
else
echo "<p class=\"topicu\">Not a valid URL.</p>\n";
} else {
// user is not loggedin
show_loginform();
}
votre préparation de données est terrible. faire des stripslashes après mysql_real_escape_string est bizarre et insensé –
Ouais ... la plupart de mon code est assez moche. J'essaie juste de concocter quelque chose qui fonctionne. – John