écrire dans une base de données mysql

andlauer Messages postés 23 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 10 février 2011 - 17 mars 2010 à 14:06
andlauer Messages postés 23 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 10 février 2011 - 18 mars 2010 à 17:30
Bonjour,

je travaille avec une base de données Mysql sur une plateforme Windows 2000.
J'ai écris un script en php qui permet d'insérer ou de modifier des données dans ladite base. Mon pb est qu'il s'exécute via un navigateur (Firefox, IE, Google ou autre) et que bien évidemment si l'utilisateur rafraichit via la Touche F5, il double la saisie dans la BDD, sans même sans rendre compte.
Je ne vois pas comment m'en sortir.
Toute idée serait la bienvenue.
Merci.

7 réponses

mailliam Messages postés 261 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 10 mars 2014 3
17 mars 2010 à 17:22
Hello,
Fais un copier-coller de ton script car la c'est po trop possible de t'aider comme ca..
A++
0
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
18 mars 2010 à 12:35
Perso j'utilise les sessions pour eviter ce genre de choses. En gros:

<?php
...
if(!isset($_SESSION['mon_action'])){
    $_SESSION['mon_action'] = 1;
    faireMonAction(); // code de ton action, genre enregistrement mysql etc...
}
else
{
    echo 'Action deja effectuee!';
}
...
?>


Voili ;-)
0
andlauer Messages postés 23 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 10 février 2011
18 mars 2010 à 14:12
Bonjour, merci d'avoir pris le temps de me lire

j'envoie un certains nb de valeur par POST dans un fichier dont voici une partie du code :

$ok = strlen(trim($_POST['nom']));
if ($ok > 2 )
{
$ok = strlen(trim($_POST['adresse']));
if ($ok > 2 )
{
$ok = strlen(trim($_POST['cp']));
if ( (is_numeric($_POST['cp']) and ($ok > 0 )and ($ok < 6)) )
{
$dates = date("d-m-Y");
$heures = date("H:i");
$query = "insert into clients (regie, nom, nom2, tph1, tph2, email, adresse, cp, commune, activite, vendeur, secteur, potentiel ) values
("{$_POST['tregie']}", "{$_POST['nom']}", "{$_POST['nom2']}", "{$_POST['tph1']}", "{$_POST['tph2']}", "{$_POST['email']}",
"{$_POST['adresse']}", "{$_POST['cp']}", "{$_POST['commune']}", "{$_POST['act']}", "{$_POST['vend']}", "{$_POST['sec']}", "{$_POST['pot']}" ) ";
$result = mysql_query($query) or die ("Création dans la table clients impossible");

Si j'ai bien compris ISSET sert à tester l'existence d'un variable ? peux tu m'en dire plus concernant l'utilisation ?

Merci
0
JulSoft Messages postés 354 Date d'inscription dimanche 3 juin 2001 Statut Membre Dernière intervention 11 mars 2013
18 mars 2010 à 14:17
En gros $_SESSION est une variable (un tableau) qui permet de passer des valeurs d'une page à l'autre (les puristes vont me lyncher pour une telle simplification, mais en gros ça sert à ça).

isset() sert comme tu l'as dit à tester l'existence d'une variable. Dans notre cas, on vérifie que l'indice 'mon_action' n'existe pas dans la variable de session. Si il n'existe pas, alors on le crée (et du coup il existe ensuite tant que la session "vit").

pour plus d'infos: http://php.net/manual/fr/features.sessions.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
andlauer Messages postés 23 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 10 février 2011
18 mars 2010 à 14:24
Ok, je vais essayer de me débrouiller avec ca.
Merci beaucoup
0
andlauer Messages postés 23 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 10 février 2011
18 mars 2010 à 16:18
Je viens de me palucher un peu la doc sur ISSET().
Je teste l'existence de la variable newclient
avec :
if(!isset($_POST['newclient']))
{
cette variable est créée dans le formulaire de saisie de l'écran précédent :

et est envoyé par post.
Je la détruit par :
{
unset( $_POST['newclient'] );
après l'avoir testé.
Mon problème maintenant est que maintenant il détecte systématiquement l'existence de newclient (même après le unset() )et donc ne créée plus rien.
Visiblement j'ai pas compris quelque chose !!!
0
andlauer Messages postés 23 Date d'inscription mercredi 29 avril 2009 Statut Membre Dernière intervention 10 février 2011
18 mars 2010 à 17:30
Suite à dernières modif, j'arrive à ceci : après mon insert, j'incrémente
$query = "insert into clients (regie, nom, nom2, tph1, tph2, email, adresse, cp, commune, activite, vendeur, secteur, potentiel ) values
("{$_POST['tregie']}", "{$_POST['nom']}", "{$_POST['nom2']}", "{$_POST['tph1']}", "{$_POST['tph2']}", "{$_POST['email']}",
"{$_POST['adresse']}", "{$_POST['cp']}", "{$_POST['commune']}", "{$_POST['act']}", "{$_POST['vend']}", "{$_POST['sec']}", "{$_POST['pot']}" ) ";
$result = mysql_query($query) or die ("Création dans la table clients impossible");

$_SESSION['newclient'] = 1;

Normalement si l'on utilise la touche F5 qui va renvoyer les POST, il devrait trouver mon
$_SESSION['newclient'] dont je teste l'existence par
if(!isset($_SESSION['newclient']))
et donc passer à mon else.
Or il trouve bien $_SESSION['newclient'] mais
ne passe pas dans le else et renseigne ma BDD
0