Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Script qui tourne pas rond [ Double insertion dans bdd ] [ Base de données / MySQL ] (gregorybts)

samedi 4 août 2007 à 04:01:10 | Script qui tourne pas rond [ Double insertion dans bdd ]

gregorybts

Bonsoir,

cela fait 2 jours que je planche sur un problème et je ne m'en sors pas alors je viens chercher de l'aide.

En fait, j'ai fais une sorte de messagerie en php. Je m'explique. En ce moment, j'écris au moyen d'animation flash à quelqu'un et je veux que la personne ne puisse lire l'animation qu'une seule fois. J'ai donc ma page qui controle si l'IP a déjà lu ce message ou pas (je sais que se baser juste sur l'ip est une erreur mais le destinataire est noob). Je communique donc un mot au destinataire et en le rentrant il est redirigé.

En même temps, plusieurs choses viennent compliquer l'affaire. En ajoutant "admin_" devant le mot que j'ai communiqué, on passe au travers de tous les filtres (je m'en sers pour tester). Autre complication, je retiens dans la bdd (ip + mot entré) toutes les tentatives d'accès (réussie ou pas).

J'ai fais énormément de test et il y a donc des echo partout pour tracer les données.

En entrant le mot "test" qui ne correspond à aucun message, il s'affiche ceci " 27Non, non, faut pas rentrer n'importe quoi"

Le chemin est donc parfait mais dans la base voici ce que je récupère :
Textes complets
id
user
lettre
ModifierEffacer33127.0.0.1test
ModifierEffacer34127.0.0.1 

Et oui 2 enregistrements et c'est bien sa qui me fait perdre la boule.

Bon maintenant que je pense avoir bien expliquer voici le code surnaturel.

Merci d'avance aux courageux qui me répondront.

<?php
//Connexion
mysql_connect("localhost", "root", "") or die("erreur de connexion au serveur");
mysql_select_db("correspondance") or die("erreur de connexion a la base de donnees");

//Déclaration de variables
$mot=$_POST['mdp'];
$visiteur=$_SERVER['REMOTE_ADDR'];
$buffer=substr($mot, 0, 6);

if ($buffer=="admin_")
{
echo "1";
    $mot=substr($mot, 6, strlen($mot));
    $reponse = mysql_query("SELECT cle FROM lettres WHERE mot='".$mot."'") or die ("oups erreur de prog");
    $donnees = mysql_fetch_array($reponse) or die ("LOL, c'est pas parce que tu connais la manip qu'il faut essayer tous les mots, c'est pas un dico le truc");
    ?>
    <?php /*?><script language="javascript">
    document.location.href="<?php echo 'cle/'.$donnees['cle'].'.html';?>";
    </script><?php */?>
<?
}
else
{
    echo "2";
    $deja_visite=0;
    $existe=0;
    $reponse = mysql_query("SELECT * FROM lettres WHERE lettres.mot='".$mot."'") or die ("ERREUR requete 1");
    if(mysql_num_rows($reponse))
    {
        echo "3";
        $existe=1;
        $donnees = mysql_fetch_array($reponse, MYSQL_ASSOC);
        $reponse2 = mysql_query("SELECT * FROM vu WHERE vu.lettre='".$mot."'") or die ("ERREUR requete 2");
        if(mysql_num_rows($reponse2))
        {
            echo "4";
            while ($donnees2 = mysql_fetch_array($reponse2, MYSQL_ASSOC))
            {
                echo "5";
                if ($donnees2['user']==$visiteur)
                {
                    echo "6";
                    $deja_visite=1;
                    echo "Non, non, toutes les bonnes choses ont une fin.";
                    mysql_query("INSERT INTO vu VALUES('', '".$visiteur."', '".$mot."')") or die ("ERREUR à l'ajout");
                }
            }
        }
    }
    else
    {
        echo "7";
        echo "Non, non, faut pas rentrer n'importe quoi";
        mysql_query("INSERT INTO vu VALUES('', '".$visiteur."', '".$mot."')") or die ("ERREUR à l'ajout");
        echo mysql_info();
    }
    if (($deja_visite==0)&&($existe==1))
    {
        echo "8";
        mysql_query("INSERT INTO vu VALUES('', '".$visiteur."', '".$mot."')") or die ("ERREUR à l'ajout");
                
        ?>
        <?php /*?><script language="javascript">
        document.location.href="<?php echo 'cle/'.$donnees['cle'].'.html';?>";
        </script><?php */?>
        <?
    }
}
mysql_close();
?>


samedi 4 août 2007 à 12:11:03 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

Evangun

Hello, ce serait pas 'cle/'.$donnees['cle'].'.html qui te ferait la requête ? vu que ce morceau de code ne semble pas être fautif.
à+

samedi 4 août 2007 à 17:18:17 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

gregorybts

que veux tu dire par là je ne comprends pas dsl.

samedi 4 août 2007 à 17:24:02 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

Evangun

L'erreur ne vient pas probablement pas du bout de code que tu nous montres, cherche ailleurs.
à+

samedi 4 août 2007 à 17:27:14 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

gregorybts

c'est bien ce que je pensais, alors là j'ai un gros soucis parce qu'au dessus de ce bout de code c'est le css et le header html, au dessous rien du tout. Et je n'ai que 4 fichiers, dont seulement 2 fichiers php donc je peux te dire que cela ne peut pas venir d'autre chose.

Sa me fait halluciner ce truc.

samedi 4 août 2007 à 17:47:03 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

gregorybts

j'ai trouvé lol. Accrochez vous

sans toucher à la requete insert incriminé,

si dans ma base id de la table vu est en autoincrement => ajout de 2 enregistrements
si il est pas en auto increment = > ajout de 1.

Alors là, j'hallucine parce que c'est la première fois que cela m'arrive surtout que j'utilise tout le temps les auto increment.

Du coup, je suis un peu perdu niveau code. Je cherche à récupérer l'id que je devrais mettre dans mon insert. En fait, c'est "id la plus haute+1" mais n'y a t'il pas un autre moyen que de faire un select pour chopper la MAX(id) ?

merci d'avance pour vos réponses

samedi 4 août 2007 à 17:48:55 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

Evangun

Mmmh... le meilleur conseil dans ces cas-là c'est de refaire les tests en reprenant à 0.
Vide ta table à chaque test et mets les requêtes en commentaires une par une jusqu'à ce que tu trouves d'où ça vient.
à+

samedi 4 août 2007 à 17:53:39 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

gregorybts

non mais c'est bon, le problème est trouvé, c'est l'histoire de l'auto increment. Je pense que nos messages se sont croisés.

samedi 4 août 2007 à 17:58:44 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

gregorybts

oups j'ai parlé trop vite, en fait il n'y a rien de règlé.

Cela marchait car quand j'enlevais l'autoincrement, defaut se mettait à 0 et du coup le doublon venait écrasé le premier.

Donc non, cela ne marche pas, j'y retourne. Je vais les commenter une à une mais je crois que je l'ai déjà fait.

samedi 4 août 2007 à 18:13:53 | Re : Script qui tourne pas rond [ Double insertion dans bdd ]

gregorybts

Il y a 3 possibilités de passer par un insert into dans ce code, soit :

  • le mot ne correspond aucun message
  • le mot correspond à un message qui n'a pas été lu par cette ip
  • le mot correspond à un message qui a déjà été lu par cette ip
J'ai testé les 3 cas possibles. Les résultats sur la base ont mis en évidence que le problème venait de celle ci :

else
    {
        echo "7";
        echo "Non, non, faut pas rentrer n'importe quoi";
        mysql_query("INSERT INTO vu VALUES('', '".$visiteur."', '".$mot."')") or die ("ERREUR à l'ajout");
    }
Moi je ne vois pas ou est le problème. Donc si je mets cet insert en commentaire et que je fais le jeu de test suivant : bon_mot, bon_mot, mauvais_mot

Ce m'enregistre ceci :

Textes complets
id
user
lettre
ModifierEffacer61127.0.0.1bon_mot
ModifierEffacer62127.0.0.1bon_mot

Normal. Si je commente un autre insert et remet ce dernier en marche, je me retrouve avec 4 ou 5 résultats avec le même jeu d'essai.

Quelqu'un a la solution ?


1 2

Cette discussion est classé dans : mysql, erreur, mot, echo, die


Répondre à ce message

Sujets en rapport avec ce message

probleme base de donnée mysql [ par morgandetoi06 ] voila j ai une page qui reçoit des variables et qui doit les inserer dans une table "informations" de la base "cv"mais ça me dit "querry failed" je ne Mysql erreur, mais où ? [ par Tilix ] Bonjour,Je voudrais savoir où est l'erreur dans ceci :while($data = mysql_fetch_assoc($req))     {   if ('!'.$data['id'].'') { echo '(0)'; }    else { Erreur incomprise... [ par Ang3lo ] Bonjours à tous, Je suis en train de développer un script d'identification mais j'ai un problème : une erreur m'est indiqué et je ne sais pas pourquoi Problème avec un soit disant moteur de recherche lol [ par gssk ] Au fait j'ai fait un "moteur de recherche" (code pourrave je le sais merci !!), et je n'ai que d erreur de variables indéfini! tels que Mot,idM,nomM e qqun peut regarder mon code ? [ par Teclis01 ] voil¨¤ en fait je cherche a calculer le tps total des appels de clients le probleme c est kil ne me fait que 1 appel par ligne et je comprends pas tro problème de création de moteur de recherche [ par astuces_jeux ] bonjour,j'ai utilisé le moteur de recherche ici : http://www.plb.fr/v3/ccm/php/phpmoteur.phpet j'ai ces deux erreur :Parse error: syntax error, unexpe Optimisation du code [ par azqsazqs ] bonjour,j'ai un code que je trouve lent, j'aimerais l'accélérer un peu. je l'ai rétréci autant que le pouvais, mais je suis sur qu'il reste des abérat problème concaténation [ par morpheus22170 ] Bonjour,comme le titre l'indique j'ai un problème de concaténation. Je suis sur une base de données de type "bibliothèque"Mon problème vient de l'inse projet php/mysql [ par simonano ] bonjour,je remercie bcp monsieur Bul3 d'avoir me repondre a chaque fois.enfin j'ai confiance a un endroit pour poster mon problème qui casse ma tête erreur dans mon code + MySQL [ par hadjiphp ] Bonjour, merci pour ce site et souhaite de trouver tous ce que je veux. je vous remercie. Bonjour, j'ai une question : j'ai un programme qui per


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version


HTC G1

Entre 449€ et 449€


Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.