Aide pour formulaire d'envoie php vers base de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Aide pour formulaire d'envoie php vers base de données

par Truc » 12 avr. 2008, 21:05

Modération :
Brendon92, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

par Brendon92 » 11 avr. 2008, 18:33

Oui ben je vais bien relire et apprendre les fonctions de if .... Merci encore ! :D

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par Berzemus » 08 avr. 2008, 19:46

Merci beaucoup à vous tous ! C'est bon ça marche maintenant.

:D
ah ben voilà.. j'espère que tu pourras tout expliquer au prof.. :wink:

par Brendon92 » 08 avr. 2008, 18:14

Merci beaucoup à vous tous ! C'est bon ça marche maintenant.

:D

par Brendon92 » 08 avr. 2008, 14:57

Merci, le problème était nores en fait. Maintenant les valeurs rentrent dans la base de données. Par contre dans la table reservation les dates apparaissent comme ceci 00-00-0000. Je me suis dit que c'était en rapport avec le html donc j'ai supprimé les valeurs déroulantes et je l'ai mis sous la forme <input type="text" name"dateresdeb" value="jj/mm/aaaa"> Ca fait toujours la même chose.

par Ryle » 08 avr. 2008, 14:12

Ca dépend de ce que tu entends par "rentrer des données" ;)

L'idée c'est de prendre la requête SQL générée et de l'exécuter dans phpMyAdmin par exemple (dans le panneau SQL) et devoir si l'enregistrement est bien créé où s'il y a des erreurs, les messages d'erreur te permettant de voir ce qui ne fonctionne pas et ainsi le corriger :)

par Brendon92 » 08 avr. 2008, 14:07

Merci, quand tu dis jouer dans mySql, tu veux dire de rentrer des données, c'est bien ça ?

par Ryle » 08 avr. 2008, 13:54

Affiches les requêtes SQL générées et vérifies qu'elles sont correctes...
essaye de les jouer dans MySql ou phpMyAdmin...
ajoute un test pour vérifier le résultat de tes mysql_query() et affiche les éventuels messages d'erreur SQL avec mysql_error()...

par Brendon92 » 08 avr. 2008, 13:30

Merci, j'ai mis la connexion avant, ça marche mais rien ne rentre dans la base de données, voici le script modifié :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<body>

<?php

// Connexion au serveur MySQL

$db=mysql_connect("localhost","root","GSI") or die("erreur de connexion".mysql_error());

// Ouverture de la base Gîte du vertige

mysql_select_db("Gite du vertige",$db) or die("erreur de connexion à la base Gite du vertige");

// Récupération et protection après la vérification de leur saisie dans le formulaire

if (isset($_POST))
    {
    $nomcli=mysql_real_escape_string(htmlspecialchars($_POST["nomcli"]));
    $prenomcli=mysql_real_escape_string(htmlspecialchars($_POST["prenomcli"]));
    $adressecli=mysql_real_escape_string(htmlspecialchars($_POST["adressecli"]));
    $villecli=mysql_real_escape_string(htmlspecialchars($_POST["villecli"]));
    $departementcli=mysql_real_escape_string(htmlspecialchars($_POST["departementcli"]));
    $cpcli=mysql_real_escape_string(htmlspecialchars($_POST["cpcli"]));
    $telcli=mysql_real_escape_string(htmlspecialchars($_POST["telcli"]));
    $melcli=mysql_real_escape_string(htmlspecialchars($_POST["melcli"]));
    //$nores=mysql_real_escape_string(htmlspecialchars($_POST["nores"]));
    $dateresdeb=mysql_real_escape_string(htmlspecialchars($_POST["dateresdeb"]));
    $dateresfin=mysql_real_escape_string(htmlspecialchars($_POST["dateresfin"]));
    $nogite=mysql_real_escape_string(htmlspecialchars($_POST["nogite"]));
    
    $nores = "jesuisperdu";
    }
else
    {
    die("Vous n'avez pas rempli entièrement votre formulaire");
    }

// Affichage d'un message de contrôle

echo "Cher(e) ".$nomcli." ".$prenomcli.",<br/>";
echo "Vous désirez réserver le gîte numéro ".$nogite.".";


// Requête d'insertion des valeurs dans la table client

$sql="INSERT INTO client (nomcli, prenomcli, adressecli, villecli, departementcli, cpcli telcli, melcli, nores)
VALUES('$nomcli','$prenomcli','$adressecli','$villecli','$departementcli','$cpcli','$telcli','$melcli','$nores')";

// Exécution de la requête

mysql_query($sql);

// Requête d'insertion des valeurs dans la table reservation

$sql="INSERT INTO reservation (dateresdeb , dateresfin, nogite)
VALUES('$dateresdeb','$dateresfin','$nogite')";

// Exécution de la requête
 
mysql_query($sql);

echo "<br/><br/> Vos données ont bien été envoyées dans notre base de données. Nous vous enverrons un mail dès que possible pour vous informer de la disponibilité du gîte";

// Fermeture de la connexion à MySql

mysql_close();
?>
</body>
</html>

par Cyrano » 08 avr. 2008, 12:26

Il serait judicieux de créer la connexion AVANT d'utiliser les fonctions mysql_xyz incluant mysql_real_escape_string() :-k

par Brendon92 » 08 avr. 2008, 12:10

Merci, ce sript est le mien, je me suis inspiré d'un TD fait en classe et j'ai été aidé sur Internet pour le if.... que je ne connaissais pas. J'ai donc fait comme tu as dis et j'ai toutes ces erreurs :

"Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 12

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 12

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 13

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 13

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 14

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 14

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 15

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 15

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 16

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 16

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 17

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 17

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 18

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 18

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 19

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 19

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 21

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 21

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 22

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 22

Warning: mysql_real_escape_string(): Accès refusé pour l'utilisateur: 'ODBC'@'@localhost' (mot de passe: NON) in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 23

Warning: mysql_real_escape_string(): A link to the server could not be established in c:\program files\easyphp1-8-modgsi\www\les gites du vertige\transfertclient10.php on line 23
Cher(e) ,
Vous désirez réserver le gîte numéro .

Vos données ont bien été envoyées dans notre base de données. Nous vous enverrons un mail dès que possible pour vous informer de la disponibilité du gîte "

par Berzemus » 07 avr. 2008, 22:45

Bon, ben on va avancer, pousser un peu hein ?

Cette table:
[nomcli] => Lol
[prenomcli] => Babou
[adressecli] => 10 rue des lol
[villecli] => Paris
[departementcli] => Paris
[cpcli] => 75000
[telcli] => 01 45 72 68 94
[melcli] => [email protected]
[dateresdeb] => 1
[type] => 1
[dateresfin] => 1
[nogite] => 1
représente donc ce que ton script reçoit. C'est ce qu'il à, rien de plus.
Première constatation, à quoi sert "type" ? Attention, ce sont la les données que le formulaire envoie. Elles viennent, en direct, du formulaire. Champs, données, tout.

A partir de la, il est logique, inévitable, que le if, qui recherche l'existance de nores, rate. Lamentablement.

Je vois pas trop à quoi sert nores. Une clé étrangère, certes, mais de quel champ de la table réservation ? Je vois que dans reservation, tu as dateresdeb , dateresfin et nogite. En quoi y-t-il une relation avec la table client ? En attendant, mieux vaut le laisser tomber.

Voilà quelque chôse qui devrait marcher selon ce que j'ai vu. :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<body>

<?php

// Récupération et protection après la vérification de leur saisie dans le formulaire

if (isset($_POST))
	{
	$nomcli=mysql_real_escape_string(htmlspecialchars($_POST["nomcli"]));
	$prenomcli=mysql_real_escape_string(htmlspecialchars($_POST["prenomcli"]));
	$adressecli=mysql_real_escape_string(htmlspecialchars($_POST["adressecli"]));
	$villecli=mysql_real_escape_string(htmlspecialchars($_POST["villecli"]));
	$departementcli=mysql_real_escape_string(htmlspecialchars($_POST["departementcli"]));
	$cpcli=mysql_real_escape_string(htmlspecialchars($_POST["cpcli"]));
	$telcli=mysql_real_escape_string(htmlspecialchars($_POST["telcli"]));
	$melcli=mysql_real_escape_string(htmlspecialchars($_POST["melcli"]));
	//$nores=mysql_real_escape_string(htmlspecialchars($_POST["nores"]));
	$dateresdeb=mysql_real_escape_string(htmlspecialchars($_POST["dateresdeb"]));
	$dateresfin=mysql_real_escape_string(htmlspecialchars($_POST["dateresfin"]));
	$nogite=mysql_real_escape_string(htmlspecialchars($_POST["nogite"]));
	
	$nores = "jesuisperdu";
	}
else
	{
	die("Vous n'avez pas rempli entièrement votre formulaire");
	}

// Affichage d'un message de contrôle

echo "Cher(e) ".$nomcli." ".$prenomcli.",<br/>";
echo "Vous désirez réserver le gîte numéro ".$nogite.".";

// Connexion au serveur MySQL

$db=mysql_connect("localhost","root","GSI") or die("erreur de connexion".mysql_error());

// Ouverture de la base Gîte du vertige

mysql_select_db("Gite du vertige",$db) or die("erreur de connexion à la base Gite du vertige");

// Requête d'insertion des valeurs dans la table client

$sql="INSERT INTO client (nomcli, prenomcli, adressecli, villecli, departementcli, cpcli telcli, melcli, nores)
VALUES('$nomcli','$prenomcli','$adressecli','$villecli','$departementcli','$cpcli','$telcli','$melcli','$nores')";

// Exécution de la requête

mysql_query($sql);

// Requête d'insertion des valeurs dans la table reservation

$sql="INSERT INTO reservation (dateresdeb , dateresfin, nogite)
VALUES('$dateresdeb','$dateresfin','$nogite')";

// Exécution de la requête
 
mysql_query($sql);

echo "<br/><br/> Vos données ont bien été envoyées dans notre base de données. Nous vous enverrons un mail dès que possible pour vous informer de la disponibilité du gîte";

// Fermeture de la connexion à MySql

mysql_close();
?>
</body>
</html>
Et puis, une dernière question, d'ou viens ce script ?

par Brendon92 » 07 avr. 2008, 19:11

Le problème est donc nores, j'ai essayé d'effacer cette variable mais après il y a des messages d'erreurs... Je ne comprends vraiment pas. Pouvez-vous m'aidez s'il vous plaît ? J'attends votre réponse .
Voici donc le formulaire que j'ai changé. J'ai laissé nores dans if.... et je ne l'ai pas mis dans insert into... :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<body>

<?php

// Récupération et protection après la vérification de leur saisie dans le formulaire

echo "<pre>";
print_r($_POST);
echo "</pre>"; 
if(isset($_POST["nomcli"]) && isset($_POST["prenomcli"]) && isset($_POST["adressecli"]) && isset($_POST["villecli"]) && isset($_POST["departementcli"]) && isset($_POST["cpcli"]) && isset($_POST["telcli"]) && isset($_POST["melcli"]) && isset($_POST["nores"]) && isset($_POST["dateresdeb"]) && isset($_POST["dateresfin"]) && isset($_POST["nogite"]))
{
$nomcli=mysql_real_escape_string(htmlspecialchars($_POST["nomcli"]));
$prenomcli=mysql_real_escape_string(htmlspecialchars($_POST["prenomcli"]));
$adressecli=mysql_real_escape_string(htmlspecialchars($_POST["adressecli"]));
$villecli=mysql_real_escape_string(htmlspecialchars($_POST["villecli"]));
$departementcli=mysql_real_escape_string(htmlspecialchars($_POST["departementcli"]));
$cpcli=mysql_real_escape_string(htmlspecialchars($_POST["cpcli"]));
$telcli=mysql_real_escape_string(htmlspecialchars($_POST["telcli"]));
$melcli=mysql_real_escape_string(htmlspecialchars($_POST["melcli"]));
$nores=mysql_real_escape_string(htmlspecialchars($_POST["nores"]));
$dateresdeb=mysql_real_escape_string(htmlspecialchars($_POST["dateresdeb"]));
$dateresfin=mysql_real_escape_string(htmlspecialchars($_POST["dateresfin"]));
$nogite=mysql_real_escape_string(htmlspecialchars($_POST["nogite"]));
}
else
{
die("Vous n'avez pas rempli entièrement votre formulaire");
}

// Affichage d'un message de contrôle

echo "Cher(e) ".$nomcli." ".$prenomcli.",<br/>";
echo "Vous désirez réserver le gîte numéro ".$nogite.".";

// Connexion au serveur MySQL

$db=mysql_connect("localhost","root","GSI") or die("erreur de connexion".mysql_error());

// Ouverture de la base Gîte du vertige

mysql_select_db("Gite du vertige",$db) or die("erreur de connexion à la base Gite du vertige");

// Requête d'insertion des valeurs dans la table client

$sql="INSERT INTO client (nomcli, prenomcli, adressecli, villecli, departementcli, cpcli telcli, melcli, nores)
VALUES('$nomcli','$prenomcli','$adressecli','$villecli','$departementcli','$cpcli','$telcli','$melcli','$nores')";

// Exécution de la requête

mysql_query($sql);

// Requête d'insertion des valeurs dans la table reservation

$sql="INSERT INTO reservation (dateresdeb , dateresfin, nogite)
VALUES('$dateresdeb','$dateresfin','$nogite')";

// Exécution de la requête
 
mysql_query($sql);

echo "<br/><br/> Vos données ont bien été envoyées dans notre base de données. Nous vous enverrons un mail dès que possible pour vous informer de la disponibilité du gîte";

// Fermeture de la connexion à MySql

mysql_close();
?>
</body>
</html> 

par Brendon92 » 07 avr. 2008, 18:11

Ok merci ben je vais essayer. Mais nores est la clé étrangère pour client à réservation si je l'enlève je fais comment ?
J'ai fait comme tu m'as dit j'ai mis :
echo "<pre>";
print_r($_POST);
echo "</pre>"; 
avant le if et j'ai ce message : "Array
(
)

Vous n'avez pas rempli entièrement votre formulaire" C'est lorque je ne met pas de données dans le formulaire mais lorsque je met des données tous les champs sont pris en compte sauf nores :
"Array
(
[nomcli] => Lol
[prenomcli] => Babou
[adressecli] => 10 rue des lol
[villecli] => Paris
[departementcli] => Paris
[cpcli] => 75000
[telcli] => 01 45 72 68 94
[melcli] => [email protected]
[dateresdeb] => 1
[type] => 1
[dateresfin] => 1
[nogite] => 1
)

Vous n'avez pas rempli entièrement votre formulaire"
Que dois-je faire ?

Est-ce-que ça va rentrer dans ma base de données si ça marche quand j'aurai réussi?
Je suis vraiment désespéré, je n'arrive pas à résoudre ce problème et l'oral pour ce projet se rapproche.

par Berzemus » 07 avr. 2008, 18:08

Vous n'avez rien fait de semblable ? lors d'un TP/TD ou autre ?
Je suis donc dans ce cas alors : => arrête tout, et dis que "vous n'avez pas bien rempli".
Mais pourquoi les variables ne sont pas reconnus ? Je comprends pas.
Mais elle sont reconnues.. mais comme tu le dis, elle ne sont pas toutes présentes (comme nores).

Si "nores" n'est pas dans le formulaire, pourquoi vouloir le récupérer ?

Le "if" regarde si les variables "existent". Si elles sont envoyées par le formulaire. Dés que l'une d'entre elles manque, Hop !, c'est foutu. Et comme nores manque (puisqu'il n'est pas dans le formulaire), ben ça rate. Il faut donc corriger.

Pour mieux cerner ce que ton script reçoit de la part du serveur mets ceci:
echo "<pre>";
print_r($_POST);
echo "</pre>";
juste avant le if. Il t'affichera les données qui sont reçues par le script.

(et pour ton script tu peux utiliser les balises
 plutôt que les balises [code], c'est plus joli)