8791 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un formulaire permettant d'enregistrer dans une base de données MySQL des partitions de musique (numéro, titre, compositeur...)
Au moment de l'envoi du formulaire je voudrais tester si le numéro de la partition est déjà présent dans la base, dans quel cas je n'insère rien et j'affiche un message d'erreur.

En cherchant sur internet j'ai réussi à écrire le code suivant, mais qui ne fonctionne pas :

$count = $base->prepare('SELECT COUNT (*) FROM partitions WHERE numero=?');
$count->execute(array($_POST['numero']));
$number = $count->fetch();
	
if($number['numero'] == 1) {
	echo 'erreur';
}
else {
       //Ajout dans la base	
}


Je tiens à préciser que dans ma base SQL, le champ "numero" est en index unique donc l'ajout en cas de doublon ne se fait pas (ce qui est bien), mais je voudrais afficher un message d'erreur personnalisé.

Merci d'avance,
Nicolas
Salut,

Tu peut mettre ceci:


$base->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


juste après ton instanciation de PDO pour que tes erreurs soit affichés (dans le cas présent pour voir ce qui cloche.
Merci,

En ajoutant la ligne et en voulant saisir une donnée qui existe déjà j'obtiens l'erreur suivante :

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10' for key 'numero'' in C:\wamp\www\gestionnaire\nouveau_action.php on line 29
( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10' for key 'numero' in C:\wamp\www\gestionnaire\nouveau_action.php on line 29

Donc ça signifie bien que le numéro 10 que j'ai entré existe déjà dans la base, mais comment afficher un message d'erreur au visiteur ? Dois ôter le fait que mon champs "numero" soit en index unique dans la base SQL ?
Voir try-catch

/!\ Ca ne sert pas a masquer les erreurs des scripts! une exception attrapé doit toujour être relancé
Modifié par JJK801 (11 Oct 2012 - 09:41)
Merci,

Finalement j'ai trouvé en utilisant cette méthode :

$count = $base->prepare("SELECT COUNT(*) AS nbr FROM partitions WHERE numero=?");
$count->execute(array($_POST['numero']));
$req  = $count->fetch(PDO::FETCH_ASSOC);

if($req['nbr']==0) {
//N'existe pas
} else {
//Existe déjà
}

Modifié par Javert67 (11 Oct 2012 - 15:36)