SELECT avec une condition

Mammouth du PHP | 643 Messages

19 août 2016, 17:57

Salut voilà j'avais un deuxième soucis pour aujourd'hui
J'ai donc un script qui permet d'ajouter des annonces dans ses favoris.
L'insertion marche bien et j'affiche un message comme quoi l'annonce existe déjà en favoris pour cet utilisateur mais s'affiche en même temps à ce moment la:
Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '34-484291' for key 'PRIMARY' in /home/www/lasortie/add_favoris.php on line 24
Problème lors de l'insertion


Mon code:
<?php
session_start();
include("include/conndb.php");

if(!empty($_SESSION['pseudo']) && !empty($_SESSION['membre']['id_simply_user'])) {
	
$num_favoris = $_GET['idfav'];
$utilisateur = $_SESSION['membre']['id_simply_user'];

$sql = "SELECT * FROM favoris WHERE id_simply_user = '".$_SESSION['membre']['id_simply_user']."'";
$req = $bdd->query($sql);

while($ligne = $req->fetch(PDO::FETCH_ASSOC)){  
if ($num_favoris == $ligne['id_loisir']) {
	echo  'Cette annonce fait déjà partie de vos favoris';
		
}else{
// Insertion
$req = $bdd->prepare('INSERT INTO favoris (id_simply_user, id_loisir)  VALUE (:id_simply_user, :id_loisir)');	
$req->execute(array(
				  'id_simply_user'=>$utilisateur,
				  'id_loisir'=>$num_favoris	  
				  ))
				  or die('Problème lors de l\'insertion');
}	}				
header("Location:favoris.php");

}else{
	header("Location: mon-compte.php");
}

?>
Merci à vous

Mammouth du PHP | 2703 Messages

19 août 2016, 18:04

le test à faire en sql, c'est : est-ce que l'utilisateur a déjà cet id dans ces favoris ?
si oui, alors 'Cette annonce fait déjà partie de vos favoris'
si non, alors insertion.

Mammouth du PHP | 643 Messages

19 août 2016, 18:15

Oui c'est ce que j'essai de faire ....
l'insertion marche pas de problème mais si il a déjà cet annonce en favoris j'ai le message :

Cette annonce fait déjà partie de vos favoris
Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '34-484291' for key 'PRIMARY' in /home/www/lasortie/add_favoris.php on line 24
Problème lors de l'insertion

Je ne vois pas pourquoi

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

19 août 2016, 18:16

Parce que tu as mis une clé primaire sur un champ qui doit donc être unique.
Or tu as déjà un enregistrement avec pour valeur "34-484291"
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

19 août 2016, 18:25

Structure de la table:

id_loisir int(11)
id_simply_user int(11)

C'est pas bon ca ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

20 août 2016, 01:32

c'est l'index clé primaire / PRIMARY qui pose problème
Quand tout le reste a échoué, lisez le mode d'emploi...

Mammouth du PHP | 643 Messages

20 août 2016, 13:49

primary n'est pas coché pourtant

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

21 août 2016, 00:36

fais un export de la structure de ta table et tu verras qu'il y a une clé primaire dessus
Quand tout le reste a échoué, lisez le mode d'emploi...