Bonjour,
Je ne suis pas trop certain de l'appartenance débutant/avancé de ce thread mais vu que personne n'a pu me répondre jusque là, je tente l'avancé.
Bref, j'ai déjà fait des tas de pages PHP et c'est la première fois que je me retrouve face à ça: une page qui s'exécute deux fois sans que je ne le lui demande. La page en question est contenue dans une include sur une page vers laquelle je renvoie des données POST venant d'une autre page.
Code de la page contenant l'include de celle qui me pose problème:
<?php
session_start();
$mysqlcon = mysql_connect("localhost", "root", "");
mysql_select_db("cefalweb");
if($_GET['cat'] == 'let3')
{
require_once("newsmail.php");
}
?>
Et ensuite code de ma page problématique (j'y ai mis plusieurs echo afin de tester le nombre de chargement dans diverses situations):
<?php
if(!empty($_POST))
{
mysql_query("INSERT INTO newsindex VALUES('','test','0',SYSDATE())");
$lastid = mysql_insert_id();
echo '<a href="test.php?cat=let3&conf='.$lastid.'">Valider</a>';
echo $_SESSION['count'].' - if';
}
elseif(isset($_GET['conf']))
{
$_SESSION['count']++;
echo $_SESSION['count'].' - elseif';
$idn = mysql_real_escape_string(htmlspecialchars($_GET['conf']));
$idnvraw = mysql_query("SELECT * FROM newsindex WHERE id = '$idn' AND exp = '0'");
if(mysql_num_rows($idnvraw) != FALSE)
{
mysql_query("UPDATE newsindex SET exp = '1' WHERE id = '$idn'");
echo 'La newsletter a bien été envoyée et est, à présent, stockée dans les archives.';
}
else
{
echo $_SESSION['count'].' - elseif';
}
}
else
{
echo $_SESSION['count'].' - else';
}
?>
Quant à la table dans laquelle j'écris/lis, il s'agit bien de la table "newsindex" qui contient les champs "id" (INT / 11 / auto_increment), "lien" (VARCHAR / 36), "exp" (INT / 1) et "date" (DATE).
Les écritures/lectures se passent bien, il n'y a que le fait que le code s'exécute deux fois qui pose problème.
Le fonctionnement logique serait:
1.) $_POST envoyé d'une autre page vers "test.php?cat=let3". Si on vient du formulaire de l'autre page, traitement du if qui affiche un lien "test.php?cat=let3&conf=X" où X est l'id retournée par les actions du if.
2.) En cliquant le lien "test.php?cat=let3&conf=X", on revient donc sur la même page PHP mais qui doit effectuer des actions différentes puisque le $_POST n'est plus d'actualité mais à sa place, le $_GET l'est, donc, je désire effectuer les actions du elseif.
Sauf qu'une fois que je clique sur "test.php?cat=let3&conf=X", le elseif se lance deux fois (deux chargements de la page). Par contre, si j'entre manuellement l'adresse dans la barre d'url et que je donne une autre valeur à conf (correspondant à une autre id mise manuellement sur 0 dans la BDD), tout fonctionne parfaitement.
C'est comme si le fait de modifier le dernier enregistrement faisait tout déconner, je suis complètement largué. Avis aux amateurs de casse-tête. ^^' Et merci d'avance à qui aura une idée.