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
    Membre averti
    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
    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 très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    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.


  3. #3
    Membre averti
    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
    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 très actif
    Avatar de Nowwis
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2009
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2009
    Messages : 406
    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

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