Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
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 25/06/2008, 14h37   #1
Membre régulier
 
Inscription : avril 2006
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 289
Points : 89
Points : 89
Par défaut Probleme bizarre sur requête

Bonjour,

J'ai un problème sur une requete, et surtout l'insertion en base.
Voila je remplie un formulaire dans lequel se trouve une liste deroulante et un input box.

Lorsque je transmets le resultat de ce formulaire pour la première fois il s'insere bien en base, si je recommence plus rien de s'insere en base, je ne vois pas pourquoi.

Le formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 <form method="post" id="myform" action="index.php?page=sendinc">
	<label for="form_numincdt">Incident / DT : </label>
		<select name="incident">
			<option value=1>Incident</option>
			<option value=2>Demande de travaux</option>
		</select>
 
	<label for="form_numincdt">Numero correspondant : </label>
			<input type="text" id="form_numincdt" name="num_incdt"><br/><br/>
 
	<input type="submit" value="Valider"><input type="reset" value="Effacer">
  </form>
Le fichier php contenant la requete d'insertion :

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
require_once('mysql.php');
 
//$_REQUEST['num_incdt'];
//$_REQUEST['incident'];
 
if($_REQUEST['incident'] ==	1){
	$sql_in = sprintf("INSERT INTO incident(NUMERO, TYPE_INCIDENT, ETAT, LOGIN, RELANCE) value ('%s', '%s', '%s', '%s', '%s' )",
	mysql_real_escape_string($_REQUEST['num_incdt']),
	mysql_real_escape_string('I'),
	mysql_real_escape_string('A'),
	mysql_real_escape_string($_SESSION['nom']),
	mysql_real_escape_string('1'));
 
	$result_in = $dbh->query($sql_in);
 
	$message = "L'incident a bien ete cree.";
	$message .= "<br/><br/><a href=index.php>Retour</a>";
 
	echo $message;
 
}else{
	$sql_dt = sprintf("INSERT INTO incident(NUMERO, TYPE_INCIDENT, ETAT, LOGIN, RELANCE) value ('%s', '%s', '%s', '%s', '%s' )",
	mysql_real_escape_string($_REQUEST['num_incdt']),
	mysql_real_escape_string('D'),
	mysql_real_escape_string('A'),
	mysql_real_escape_string($_SESSION['nom']),
	mysql_real_escape_string('1'));
 
	$result_dt = $dbh->query($sql_dt);
 
	$message = "La demande de travaux a bien ete cree.";
	$message .= "<br/><br/><a href=index.php>Retour</a>";
 
	echo $message;
}
Si quelqu'un voit pourquoi
kanabzh29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 14h58   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 383
Points : 16 383
$dbh est une connexion PDO ?

Sinon les value de formulaire sont des chaines
Code :
$_REQUEST['incident'] == "1"
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h08   #3
Membre régulier
 
Inscription : avril 2006
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 289
Points : 89
Points : 89
$dbh est bien une connexion PDO.

Mème en mettant dans guillemets, cela ne s'insère plus a partir du moment ou il y a déja des données dans cette table.
kanabzh29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h15   #4
Nouveau Membre du Club
 
Étudiant
Inscription : avril 2007
Messages : 27
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 27
Points : 30
Points : 30
Bonjour,

NUMERO est-il la clée primaire de ta table?

Si oui, alors le problème vient de là, tu ne peux pas avoir deux champs avec la même clef. La meilleure solution est de le mettre en auto-increment et de ne pas laisser l'utilisateur l'entrer, quitte à ajouter un champs numero que l'utilisateur peut définir.
NuDo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h20   #5
Membre régulier
 
Inscription : avril 2006
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 289
Points : 89
Points : 89
Non la clé est sur LOGIN.
kanabzh29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h22   #6
Nouveau Membre du Club
 
Étudiant
Inscription : avril 2007
Messages : 27
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 27
Points : 30
Points : 30
Entre tes deux tentatives d'insertion tu as changé de session?

Sinon c'est exactement ce que je dis plus haut, une personne ne pourra poster qu'une seule fois.
NuDo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h26   #7
Membre régulier
 
Inscription : avril 2006
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 289
Points : 89
Points : 89
Non je n'ais pas changé de session, cela voudrais dire qu'il faudrait que l'utilisateur se delog puis relog pour rentrer un nouvel incident ? Si c'est ça comment faire pour contourner

En effet en changeant d'utilisateur cela s'insêre bien, comment faire pour contourner en gardant la mème architecture.
kanabzh29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h31   #8
Nouveau Membre du Club
 
Étudiant
Inscription : avril 2007
Messages : 27
Détails du profil
Informations personnelles :
Âge : 24

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2007
Messages : 27
Points : 30
Points : 30
Non, d'une session à l'autre le nom de l'utilisateur ne changera pas (si il doit se logger).

Il faut que tu ajoutes un champs de type int en auto_increment dans ta table, qui sera la clée (unique) pour un champs de ta table. Il sera généré automatiquement lors d'un ajout, et cela permettra a un meme utilisateur de reporter plusieurs incident.

Dans la configuration actuelle, c'est le nom de l'utilisateur qui est clée pour un report d'incident si je comprends bien. La clée d'une table devant être unique, il ne pourra y avoir qu'un seul enregistrement pour chaque utilisateur.

Suis-je assez clair ou c'est encore flou ?
NuDo_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2008, 15h35   #9
Membre régulier
 
Inscription : avril 2006
Messages : 289
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : avril 2006
Messages : 289
Points : 89
Points : 89
Non c'est bon, c'est clair, merci pour l'aide
kanabzh29 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 18h16.


 
 
 
 
Partenaires

Hébergement Web