Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/02/2012, 11h10   #1
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 2
Points : 2
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 :
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
Marie08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 11h21   #2
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Bonjour,

Code :
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 :
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
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 11h46   #3
Invité de passage
 
Inscription : août 2011
Messages : 6
Détails du profil
Informations forums :
Inscription : août 2011
Messages : 6
Points : 2
Points : 2
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
Marie08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 11h48   #4
Membre éclairé
 
Avatar de Nowwis
 
Homme
Développeur Web
Inscription : juin 2009
Messages : 363
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2009
Messages : 363
Points : 365
Points : 365
Bonjour,

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

Code :
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
Nowwis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h28.


 
 
 
 
Partenaires

Hébergement Web