IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

annonce démultipliée lors de sa modification


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut annonce démultipliée lors de sa modification
    Bonjour,

    J'ai le soucis suivant : au moment de valider la modification d'une annonce, celle-ci se démultiplie dans la table de ma base de données en 2 ou plus exemplaires.

    L'information m'a été transmise par le gestionnaire du site web ; de mon côté, en effectuant les mêmes manipulations, je ne parviens pas à reproduire le bogue
    Le gestionnaire ne voit aucun message d'erreur, simplement la démultiplication de l'annonce comme si en fait la modification l'insérait plusieurs fois.
    A noter que cela arrive occasionnellement seulement. Je ne m'explique pas cette instabilité, et vous ?

    Je vous propose le code en question ci-dessous. A savoir que lors de sa modification, l'annonce prend la référence 1 et se place ainsi en tête de liste. Dans la deuxième partie du code, les annonces suivantes sont donc décalées d'un rang : l'ex 1 devient 2, l'ex 2 devient 3, etc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <?php include("connection_sql.php"); ?>
    <?php include("bbcode.php"); ?>
     
    <?php
    	// Récupération des paramètres POST
    	$id = $_POST["id"];
    	$reference = $_POST["reference"];
    	$titre = htmlspecialchars($_POST["titre"], ENT_QUOTES);
    	$description = str_replace("\n", '<br/>',$_POST["description"]);
    ?>
     
    <?php 
    	$req1 = $bdd->prepare ('UPDATE ma_table SET reference=:reference, titre=:titre, description=:description, date_insertion=CURDATE(), timestamp=NOW() WHERE reference = :reference')  or die(print_r($bdd->errorInfo()));
     
    	$req1->execute(array(
    		'reference' => $reference,
    		'titre' => $titre,
    		'description' => $description
    		));
     
    		if($req1) {
    			echo '<p>Modification réussie !</p>';
    		}
    		else {
    			echo '<p>Échec à la modification.</p>';
    		}
    	$req1->closeCursor();	
     
     
     
    	//On met à jour la référence
    	$req2 = $bdd->prepare('UPDATE ma_table SET reference=99999 WHERE reference=:reference') or die(print_r($bdd->errorInfo()));
    	$req2->execute(array('reference' => $reference));
    	$req2->closeCursor();
     
    	$req3 = $bdd->prepare('UPDATE ma_table SET reference=reference+1 WHERE reference<:reference') or die(print_r($bdd->errorInfo()));
    	$req3->execute(array('reference' => $reference));
    	$req3->closeCursor();
     
    	$req4 = $bdd->prepare('UPDATE ma_table SET reference=1 WHERE reference>=99999') or die(print_r($bdd->errorInfo()));
    	$req4->execute(array('reference' => $reference));
    	$req4->closeCursor();
     
    ?>
    Je vous remercie de votre attention

    Marie

  2. #2
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    //On met à jour la référence
    	$req2 = $bdd->prepare('UPDATE ma_table SET reference=99999 WHERE reference=:reference') or die(print_r($bdd->errorInfo()));
    	$req2->execute(array('reference' => $reference));
    	$req2->closeCursor();
     
    	$req3 = $bdd->prepare('UPDATE ma_table SET reference=reference+1 WHERE reference<:reference') or die(print_r($bdd->errorInfo()));
    	$req3->execute(array('reference' => $reference));
    	$req3->closeCursor();
     
    	$req4 = $bdd->prepare('UPDATE ma_table SET reference=1 WHERE reference>=99999') or die(print_r($bdd->errorInfo()));
    	$req4->execute(array('reference' => $reference));
    	$req4->closeCursor();
    Je comprends le principe, mais c'est vraiment trop complexe ^^'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $req3 = $bdd->prepare('UPDATE ma_table SET reference=reference+1 WHERE reference<:reference') or die(print_r($bdd->errorInfo()));
    	$req3->execute(array('reference' => $reference));
    	$req3->closeCursor();
     
    	$req4 = $bdd->prepare('UPDATE ma_table SET reference=:reference WHERE reference>=99999') or die(print_r($bdd->errorInfo()));
    	$req4->execute(array('reference' => $reference));
    	$req4->closeCursor();
    Je pense que ça suffira.
    Deplus, la req4 n'avait pas de paramètre alors que tu en passes un... C'est peut-être la le soucis.

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Bonjour Nowwis et merci de ta réponse.

    En utilisant ton code je n'obtiens plus le résultat souhaité, exemple : l'annonce n°6 et positionnée en sixième position, doit après modification passer en première position avec le n°1 et décaler de ce fait les suivantes d'un rang. Or ta proposition modifie bien sans erreur mais l'annonce 6 reste 6 et en 6e position... j'ai raté quelque chose peut-être ?

    Merci

  4. #4
    Membre confirmé
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    Points : 498
    Points
    498
    Par défaut
    Bonjour,

    Non c'est moi qui est fait le feignant et qui a oublié une modif...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $req3 = $bdd->prepare('UPDATE ma_table SET reference=reference+1 WHERE reference<:reference') or die(print_r($bdd->errorInfo()));
    	$req3->execute(array('reference' => $reference));
    	$req3->closeCursor();
     
    	$req4 = $bdd->prepare('UPDATE ma_table SET reference=:reference WHERE reference=:reference') or die(print_r($bdd->errorInfo()));
    	$req4->execute(array('reference' => $reference));
    	$req4->closeCursor();
    Là ça devrait mieux marcher
    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

Discussions similaires

  1. Suppression du BIP lors de la modification du son
    Par shukin dans le forum Windows XP
    Réponses: 16
    Dernier message: 06/11/2006, 12h57
  2. Lancer une macro lors de la modif d'une case excel
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 16/08/2006, 12h19
  3. [VB6]Problème lors de la modification d'un contrôle activeX
    Par pepper dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/04/2006, 13h13
  4. Probleme lors de la modification de la police
    Par amelieh dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 24/10/2005, 16h12
  5. Ecriture auto dans un champ edit lors de la modif d'un autre
    Par KibitO dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 05/02/2005, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo