Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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/09/2006, 11h33   #1
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Par défaut [Conception] INSERT fonctionne a moitié, UPDATE Fonctionne, comprends pas?

Bonjour le forum,

Juste une petite aide, je ne comprends pas pourquoi ce code ne fonctionne qu'a moitié :


Citation:
<?PHP

$server = "";
$user = "";
$password = "";
$base = "";
$table = $_GET['table'];
mysql_connect($server,$user,$password);
mysql_select_db($base);

$leg=substr($stade,0,1);

$result=mysql_query("SELECT * FROM $table WHERE mail='$mail'") or die(mysql_error());
$nbre_rangs=mysql_num_rows($result);
if ($nbre_rangs == 1)
{
$modif=mysql_query("UPDATE $table SET stade='$stade', legende='$leg', reponse='$reponse', motif='$motif' WHERE nom='$nom'") or die(mysql_error()); if (!$modif)
{ return(FALSE); }
}
else
{
$odif=mysql_query("INSERT INTO $table VALUES ('$stade','$leg','$reponse','$motif')") or die(mysql_error());
if (!$modif)
{ return(FALSE); }
}
echo "$leg";
?>
Ce code (valide.php) fait suite a un fomulaire qui renvoie les infos dans ma BDD via action="valide.php".

JE comprends pas pourquoi il faut que j'appel deux fois le code (valide.php) pour que cela fonctionne, c'est comme si l'insert ne fonctionnait pas et que l'update seul fonctionnait.

J'en deduit ca car en fait l'insert fonctionnerai qu'a moitié, et il faut un update derriere pour que la BDD soit completement remplie .

Je me suis dis que cela pouvait venir eventuellement de la variable ;
$leg=substr($stade,0,1);

qui était peut etre mal placée.........peut etre trop top dans le code.

Je précise également que si j'enleve la variable $leg=substr($stade,0,1);
et que je mette directement legende='substr($stade,0,1)', cela ne fonctionne pas.....


MErci pour votre aide, j'ai du mal a comprendre.

Bonne journée
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 11h43   #2
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Salut

Déjà, c'est louche ton code :

Code :
1
2
$odif=mysql_query("INSERT INTO $table VALUES.........
Ensuite, ton formulaire envoie en mode Post ou Get ?
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 11h45   #3
Membre expérimenté
 
Avatar de papyphp
 
Inscription : avril 2005
Messages : 425
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Belgique

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 425
Points : 545
Points : 545
Bonjour,

1) d'ou viennent et comment viennent les variables $stade, $motif, $nom,..
2) remarque conceptuelle tu insère un if après chaque query
Citation:
$modif=mysql_query("UPDATE $table SET stade='$stade', legende='$leg', reponse='$reponse', motif='$motif' WHERE nom='$nom'") or die(mysql_error()); if (!$modif)
{ return(FALSE); }
or d'après moi (corrigez-moi si je me trompe) le or die arrête le script si il y a une erreur. donc le if ne sera jamais à false puisque si il l'est c'est qu'il y a une erreur et à ce moment le die ferme le script
3) vraiment pour le fun : si par hasard tu as une inscription en double, la condition mysql_num_rows retournera un nombre différent de 1 et donc tu feras un insert --> tu crées un troisième enregistrement. AMHA il faudrait tester la non-réponse plutot que l'unicité de celle-ci.
[gilled] pour post ou get
__________________
Lu kinze d' awousse, la Vierje arandje û dusbrôle lu timp. Et ce coup ci, elle ne nous a pas ratés
papyphp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 11h45   #4
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
J'avais pas fait gaffe pour le odif, normalement c'est modif

Ensuite je suis bien en POST

MErci de ta prémière réponse
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 11h47   #5
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par kaolivier
J'avais pas fait gaffe pour le odif, normalement c'est modif

Ensuite je suis bien en POST

MErci de ta prémière réponse
$table = $_GET['table'];
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 12h26   #6
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Marche toujours pas completement la fonction INSERT avec ce code :

Citation:
mysql_connect($server,$user,$password);
mysql_select_db($base);

$result=mysql_query("SELECT * FROM $table WHERE mail='$mail'");
$nbre_rangs=mysql_num_rows($result);
$leg=substr($stade,0,1);
if ($nbre_rangs == 1)
{
$modif=mysql_query("UPDATE $table SET stade='$stade', legende='$leg', reponse='$response', motif='$motif' WHERE nom='$nom'"); if (!$modif)
{ return(FALSE); }
}
else
{
$modif=mysql_query("INSERT INTO $table VALUES ('$stade','$leg','$reponse','$motif')");
if (!$modif)
{ return(FALSE); }
}

De plus je ne comprends pas car si je fais :
echo "$leg";
echo "$motif";

Les infos apparaissent pas mais $motif n'est pas inséré dans la BDD


OK pour GET et POST mais cela n'explique pas pourquoi l'UPDATE fonctionne et pourquoi l'INSERT ne fonctionne pas competement car une seule partie des infos sont bien insérée.

Merci de votre patience.
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 12h46   #7
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
1/ Comme suggéré par papyphp :

Code :
1
2
3
4

$modif=mysql_query("INSERT INTO $table VALUES ('$stade','$leg','$reponse','$motif')")
or die(mysql_error());
2/ c'est mieux ainsi :

Code :
1
2
3
4

$modif=mysql_query("INSERT INTO $table(stade, legende, repose, motif) VALUES ('$stade','$leg','$reponse','$motif')")
or die(mysql_error());
3/Et enfin, ta requête ne peut pas fonctionner car il n'y a pas que 4 champs dans ta table comme le laisse soupçonner ta requête d'insertion.
Il y a aussi les champs mail, nom....et peut-être d'autres ? hum !

Donc c'est logique que ton update fonctionne puisque tu ne sélectionnes que les champs à modifier.
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 13h05   #8
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Plus rien ne fonctionne

Je vais revoir tout ça cet aprés midi

Merci
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 13h32   #9
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Je comprends pas il y a toujours deux variables qui ne fonctinnent pas voic le code complet :


Citation:
$leg=substr($stade,0,1);

mysql_connect($server,$user,$password);
mysql_select_db($base);

$result=mysql_query("SELECT * FROM $table WHERE mail='$mail'");
$nbre_rangs=mysql_num_rows($result);
if ($nbre_rangs == 1)
{
echo "$tauxn";
echo "$frp";

$modif=mysql_query("UPDATE $table SET stade='$stade', nom='$nom', prenom='$prenom', adresse_postale='$adresse', mail='$mail', telephone='$tel', mise_a_jour='$maj', taux_nature='$tauxn',frais_b='$frb', frais_n='$frn', frais_p='$frp', legende='$leg'' WHERE nom='$nom'");
if (!$modif)
{ return(FALSE); }
}
else
{
$modif1=mysql_query("INSERT INTO $table(stade, nom, prenom, adresse_postale, mail, telephone, mise_a_jour, taux_nature, frais_b, frais_n, frais_p, legende, reponse, motif) VALUES ('$stade', '$nom','$prenom', '$adresse','$mail','$tel','$maj','tauxn','$frb','$frn','$frp','$leg','$reponse','$motif')");
if (!$modif1)
{ return(FALSE); }
}
?>
Les deux echos me renvoient bien les valeurs présentes dans le formulaire (tauxn=3 et frp=3000), mais quand je regarde ma BDD il est inscrit dedans :

pour tauxn > j'ai le mot tauxn alors que je devrais avoir la valeur correspondante soit 3
pour frp >, je n'ai rien, c'est vide alors que je devrais avoir la valeur correspondante soit 3000

Je suis un peu desespéré, car je ne comprends pas le PB
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 13h40   #10
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Citation:
Envoyé par kaolivier

Les deux echos me renvoient bien les valeurs présentes dans le formulaire (tauxn=3 et frp=3000), mais quand je regarde ma BDD il est inscrit dedans :

pour tauxn > j'ai le mot tauxn.
Code :
1
2
3
4

$modif1=mysql_query("INSERT INTO $table(stade, nom, prenom, adresse_postale, mail, telephone, mise_a_jour, taux_nature, frais_b, frais_n, frais_p, legende, reponse, motif) 
VALUES ('$stade', '$nom','$prenom', '$adresse','$mail','$tel','$maj','tauxn','$frb','$frn','$frp','$leg','$reponse','$motif')");
==>>$tauxn

S'cuse-moi de te le dire, mais il y a de la négligence dans ce que tu fais...tu te relis ?
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 13h53   #11
Membre du Club
 
Inscription : juillet 2006
Messages : 85
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 85
Points : 55
Points : 55
Bonjour,

Alain31 --> <-- kaolivier.....

Ton script devrait fonctionner avec la dernière réponse de Alain31tl.

Bonne chance...
Attilius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 13h54   #12
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Je comprend plus trop ou est le probleme la ?
Il faut un code et des explications precises .... Car "le code fonctionne a moitié" ... hum hum
__________________
Dire Straits, Bob Dylan, Led Zeppelin, the Who, Pink Floyd, AC/DC, Guns & Roses, the Doors, ...
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 16h14   #13
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Citation:
Envoyé par alain31tl
Code :
1
2
3
4

$modif1=mysql_query("INSERT INTO $table(stade, nom, prenom, adresse_postale, mail, telephone, mise_a_jour, taux_nature, frais_b, frais_n, frais_p, legende, reponse, motif) 
VALUES ('$stade', '$nom','$prenom', '$adresse','$mail','$tel','$maj','tauxn','$frb','$frn','$frp','$leg','$reponse','$motif')");
==>>$tauxn

S'cuse-moi de te le dire, mais il y a de la négligence dans ce que tu fais...tu te relis ?
Merci pour la flagelation, mais je ne suis pas amateur .

Effectivement, lorsque j'ai mis le code sur ce post j'ai mal copié, mais dans mon code le $ se trouve bien devant tauxn, et de plus il y a bien aussi dans le code mal écrit sur ce post un $frp de partout et pourtant avec $tauxn, ce sont les deux variables qui ne fonctionnent pas..............


Merci a tous
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 16h58   #14
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Pas amateur, mais 6 couilles quand même dans 10 lignes de script !
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 17h17   #15
Membre régulier
 
Inscription : novembre 2005
Messages : 371
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 371
Points : 80
Points : 80
Mais la "couille" c'est surtout que ç ane marche toujours pas............

Donc si j'ai fait des erreurs c'est parce que j'ai fait des teste aussi, car les erreurs ne sont pas les memes d'un code a l'autre dans mon post, donc......soyons un tout petit peu compréhensif, je suis sur le PB depuis exactement 22H non stop..........

Merci de ta gentillesse et de ta comprehension

Je prefere laisser tomber, merci en tout cas a tous du temps que vous avez consacré a m'aider meme si le resultat na été satisfaisant par ma faute.

J'apprécie énormement ce forum et je respect tous ses membres pour tout le temps qu'ils consacrent a aider les autres.

Bonne journée a tous...
kaolivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2006, 17h22   #16
Membre émérite
 
Avatar de alain31tl
 
Alain
Inscription : novembre 2005
Messages : 897
Détails du profil
Informations personnelles :
Nom : Alain
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : novembre 2005
Messages : 897
Points : 910
Points : 910
Bon !

Dans l'ordre des choses :

Pour $tauxn....c'est réglé ? inséré dans ta table ?
__________________
Ce n'est pas parce que les choses sont difficiles qu'on n'ose pas les entreprendre.
C'est parce qu'on n'ose pas les entreprendre qu'elles sont difficiles.
alain31tl 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 08h14.


 
 
 
 
Partenaires

Hébergement Web