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 27/07/2011, 18h32   #1
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 71
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 71
Points : 18
Points : 18
Par défaut verifier si un enregistrement existe

Bonjour, je sais que le sujet a déjà été évoqué mais je suis dans un cas un peu particulier.

J'ai crée mon formulaire HTML et mon code php dans la même page, pour éviter d'avoir des insertions intempestive il a fallu vérifier que l'on appuyait bien sur le bouton d'envoi du formulaire.

insersion.php
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
 
<html>
<?php
$tbl_loc="loc";
$nom = $_POST['nom'];
$prenom = $_POST['prenom'];
$date = $_POST['date'];
 
if($_POST['ajouter'])
{
 
mysql_connect($server, $login, $pass) or die("<p>Acces refusé:  Login ou mot de passe incorrect");
mysql_select_db($bdd)or die("Impossible de se connecter à la base de données");
mysql_query("INSERT INTO $contacts (nom,prenom,date)values (NULL,'$nom','$prenom','$date') ")or die(mysql_error ());
 
}
 
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
 
<p>
<font class="label" size="2" face="Arial">Nom:</font><br>
<input class="controle" type="text" name="nom" size="12" />
</p>
<p>
<font class="label" size="2" face="Arial">prenom:</font><br>
<input class="controle" type="text" name="prenom" size="12" />
</p>
<p>
<font class="label" size="2" face="Arial">date de naissance:</font><br>
<input class="controle" type="text" name="date" size="12" />
</p>
<button class="positive" type="submit" name="ajouter" value="ajouter">Ajouter</button>
 
</form>
mon code pour vérifier si un enregistrement existe

Code :
1
2
3
4
5
6
7
8
9
10
 
$req = mysql_query("SELECT COUNT(*) AS verif FROM $tbl_loc WHERE nom = '$nom' AND prenom = '$prenom' AND date = '$date' ") or die (mysql_error());
$donnees = mysql_fetch_array($req);
$result = ''.$donnees['verif'].'';
if($donnees['verif'] > 0)
{
echo '<font color="red" size="3" face="Arial">Entrée déjà dans la base</font><br>';
} else {
echo "ok";
}
Mon problème c'est que l'on ne peux pas insérer un "if" dans un autre.
Donc je suis dans l'impossibilité de vérifier si l'enregistrement que j’insère existe.
Avez vous une solution?
Merci
solaris13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 18h52   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 986
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 986
Points : 5 015
Points : 5 015
Citation:
Mon problème c'est que l'on ne peux pas insérer un "if" dans un autre.
Pardon ?

Le plus simple pour éviter de devoir faire une vérification manuelle est de laisser MySQL le faire: avec une clé unique sur un champ par exemple, une insertion ne pourra pas être faite et la requête échouera (on réccupère TRUE ou FALSE dans le cas des requêtes INSERT).

On peu aussi vouloir écraser un champ existant, pour ça on utilise REPLACE INTO.

Citation:
J'ai crée mon formulaire HTML et mon code php dans la même page, pour éviter d'avoir des insertions intempestive il a fallu vérifier que l'on appuyait bien sur le bouton d'envoi du formulaire.
Pour vérifier que le boutton à bien été cliqué, il suffit de lui mettre un nom et de vérifier sur $_POST ou $_GET qu'on le réccupère. Ce n'est en aucun cas une justification valide pour mélanger du PHP et du HTML.

Par ailleurs ton code est tout à fait vulnérable aux injection SQL. Je te recommande de sécuriser les données POST avec filter_input et de sécuriser l'insertion au niveau de MySQL avec mysql_real_escape_string.

Faire mysql_query(...) or die(...) est toléré en débug mais jamais en production, n'oublie pas de les envlever
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 19h20   #3
Futur Membre du Club
 
Inscription : janvier 2008
Messages : 71
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 71
Points : 18
Points : 18
Citation:

Le plus simple pour éviter de devoir faire une vérification manuelle est de laisser MySQL le faire: avec une clé unique sur un champ par exemple...
comment?
solaris13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2011, 19h24   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour, je ne vois pas où est le problème :
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
<?php
// connexion a la BdD
	mysql_connect($server, $login, $pass) or die("<p>Acces refusé:  Login ou mot de passe incorrect");
	mysql_select_db($bdd)or die("Impossible de se connecter à la base de données");
 
$tbl_loc = 'loc';
 
// traitement du formulaire
if($_POST['ajouter'])
{
	// recuperation depuis le formulaire
	$nom = htmlspecialchars(stripslashes(trim($_POST['nom'])));
	$prenom = htmlspecialchars(stripslashes(trim($_POST['prenom'])));
	$date = $_POST['date'];
	// --------------------
	// on protege d'abord contre les injections SQL
	$nom = mysql_real_escape_string($nom);
	$prenom = mysql_real_escape_string($prenom);
	$date = mysql_real_escape_string($date);
	// --------------------
	// on verifie s'il existe deja un enregistrement avec les meme nom - prenom - date
	$req = mysql_query("SELECT COUNT(*) AS verif FROM $tbl_loc WHERE nom = '".$nom."' AND prenom = '".$prenom."' AND date = '".$date."';") or die (mysql_error());
	$donnees = mysql_fetch_array($req);
	if($donnees['verif'] > 0)
	{
		// erreur : l'enregistrement existe deja
		$msg_erreur =  '<font color="red" size="3" face="Arial">Entrée déjà dans la base</font><br>';
		echo $msg_erreur; // (cet echo peut alors se faire ailleurs dans la page)
	} else {
		// OK : on peut effectuer l'enregistrement en BdD
		mysql_query("INSERT INTO ".$contacts." (nom, prenom, date) values ('".$nom."', '".$prenom."', '".$date."');")or die(mysql_error ());
	}
}
?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h27.


 
 
 
 
Partenaires

Hébergement Web