8768 sujets

Développement web côté serveur, CMS

Pages :
Bonjour tout le monde.
J'explique mon problème:
Je suis actuellement en stage dans une boite pour laquelle je dois créer un site internet avec un formulaire d'inscription, de connexion... Bref une bonne quinzaine de formulaires différents.
Bon, créer un formulaire en HTML n'a rien de difficile. Le truc c'est que je ne suis pas du tout, mais alors PAS DU TOUT, à l'aise avec PHP/MySQL, et je ne sais pas comment créer mon fichier traitement.php pour l'inscription des visiteurs. Je voudrais en faite que lorsqu'ils remplissent les champs lors de l'inscription, quand ils appuient sur "valider", les données transmises sont envoyées dans la base de données, ce qui créer une nouvelle entrée dans ma table. Mais je ne sais absolument pas par où commencer. J'ai bien deux ou trois ébauches piochées par çi par là sur internet, mais je bloque encore pas mal.

Voilà mon formulaire:

<html>
	<head>
		<meta charset="UTF-8">

	</head>
	<body>
		<form action="registerdoc.php" method="post">
			<input type="text" placeholder="Nom" name="nom" required><br />
			<input type="text" placeholder="Prénom" name="mail" required><br />
			<input type="text" placeholder="Fonction/Spécialité" name="specialite" required><br />
			<input type="text" placeholder="Adresse mail" nom="mail" required><br />
			<input type="submit" value="Envoyer">
		</form>
	</body>
</html>



Vraiment un formulaire bateau, sans mise en forme, juste pour sortir le php qui va derrière.
Donc en gros, je voudrais qu'une fois le visiteur inscrit, son nom soit entré dans la BDD dans la colonne nomUser de la table users, que le prénom le soit dans la colonne prenomUser, que la fonction.... etc, vous m'avez compris.

Comment je peux faire, s'il vous plait?

Merci d'avance Smiley lol
Bonjour,

Vérifie d'abord la validité de ton document HTML. Smiley smile : W3C
Ensuite, comme tu l'as dit Internet est plein de tutos pour faire ce genre de formulaire assez basique. Je te conseille donc de suivre un de ces tutos et de revenir pour nous demander des conseils sur certaines parties du code où tu bloques, ce que tu ne comprends pas, ou autre chose Smiley cligne

Bon courage!

Cordialement
Bonjour,
D'abord, merci de ta réponse.

Je me doute bien que mon document HTML n'est pas valide du tout, mais comme je l'ai dit, c'est juste pour avoir le squelette de mon formulaire, justes les champs, de manières à pouvoir rapidement bosser sur le php.

Donc, si je prend ce morceau de code trouvé sur CCM:

<?php
	if(isset($_POST) and !empty($_POST['email']) and !empty($_POST['password']{
		$bdd = mysql_connect(127.0.0.1,"root","");
		$bdd = mysql_select_db("ma-bdd");

		$sql = 'INSERT INTO 'utilisateur' ('email','password') VALUES '.$_POST['email'].', '.sha1($_POST['password']).'';
		mysql_query($sql);

	}
?>



Je devrais remplacer utilisateur pas users (nom de ma table), et rajouter dans la parenthèse les noms de colonnes qui me manquent?
isset($_POST)
Ne fonctionne pas, il faut mettre une valeur. Si tu veux tester que le formulaire a été soumis, mets un attribut "name" à ton bouton "submit". Et tu fais le test :
isset($_POST['nomDeTonSubmit'])

Après ça, tu peux faire tes tests si les valeurs du formulaire sont vides ou non :
if ((isset($_POST['login']) && !empty($_POST['login']))

etc....
Ensuite tu peux te connecter à la base si tout est ok :
$base = mysql_connect ('127.0.0.1', 'root', '');
		mysql_select_db ('ma-bdd', $base);


Tu peux faire une vérif si l'utilisateur est déjà dans la base.
Et oui après tu remplaces le nom de la table et des colonnes :
$sql = 'INSERT INTO 'users' ('email','password') VALUES '.$_POST['email'].', '.sha1($_POST['password']).'';
		mysql_query($sql);


Tu démarres la session, tu rediriges et tu quittes.
Ce ne sont que des bases, fais attention à la manière dont tu traites tes infos dans les champs (pour les injections par exemple).

Voilà voilà Smiley smile
Mes tests, je les fait en cascades imbriquées?

Désolé si les questions peuvent paraitre idiotes, j'ai vraiment du mal avec PHP Smiley confused
Dans ce genre là je dirais :

if (isset($_POST['connexion'])) { //test si le formulaire est soumis
	if (isset .....!empty .... && isset .....!empty ... ) {  //test de tes champs

	//tu te connectes à la bdd

	//tu peux faire le test de l'existence du login, ou pas
	}
	else {
	 //message d'erreur
	}


Pas de soucis, Faut bien commencer un jour Smiley cligne
Du genre comme ça:

<?php
	if(isset($_POST['testEnvoi']){
		if(isset($_POST['nom'])) && !empty($_POST['nom'])){
	
						$bdd = mysql_connect(127.0.0.1,"root","");
						$bdd = mysql_select_db("base");

						$sql = 'INSERT INTO 'users' ('email','password') VALUES '.$_POST['email'].', '.sha1($_POST['password']).'';
						mysql_query($sql);

		}
	}
?>


Je fait le isset sur le submit, puis sur le nom, puis sur le prénom etc...
Hexilas a écrit :

Je fait le isset sur le submit, puis sur le nom, puis sur le prénom etc...

Ou tu fais la condition du submit et après tu mets tout dans la même condition
Modifié par nef1912 (23 Apr 2014 - 13:33)

if ((isset($_POST['nom']) && !empty($_POST['nom'])) && (isset($_POST['prenom']) && !empty($_POST['prenom'])) && (isset($_POST['mail']) && !empty($_POST['mail'])) && (isset($_POST['mdp']) && !empty($_POST['mdp']))) 

Enfin tu vois le principe quoi, j'ai pas tout mis je crois.

Par contre en relisant, j'ai vu ça :
Hexilas a écrit :

<input type="text" placeholder="Prénom" name="mail" required><br />


Pas bon le name.
Ouais le name je l'ai vu entre temps, j'ai corrigé, mais merci de le souligner Smiley biggrin

Je te remercie pour ton aide Smiley biggrin

Après pour la requête SQL pour tout balancer dans la base, ça ressemblera bien à ça:

$sql = 'INSERT INTO 'users' ('email','password','prenom') VALUES '.$_POST['email'].', '.sha1($_POST['password']).','.$_POST['prenom'].'''; et ainsi de suite...


?

En gros, je liste tous mes champs dans la première parenthèse, puis je les balances dans un $_POST?
C'est ça.
Teste d'abord comme ça et après il faudrait l'optimiser pour éviter les injections classiques. Smiley smile
Bonjour,

Pour éviter les injections SQL, partant du principe que tu utilises la syntaxe de base à savoir les fonctions mysql_connect, row, etc...

La méthode la plus simple et la plus sûre est d'utiliser mysql_real_escape_string() sur tes chaines de caractères.

Attention, la syntaxe de certaines fonctions mysql_* sont dépréciés dès PHP 5.5. Aussi je te recommande d'apprendre davantage à utiliser des fonctions à jour pour les versions de PHP actuelles et futures, notamment PDO ou mysqli.
Modifié par ohweb (23 Apr 2014 - 14:19)
Je suis justement en train d'essayer de me connecter à ma base avec PDO, mais visiblement j'ai une erreur de connexion, ou dans mon isset, qui fait que je ne peux pas exécuter ma requête.


<?php
	if(isset($_POST['testEnvoi'])){
		if ((isset($_POST['nom']) && !empty($_POST['nom']))
			&& (isset($_POST['prenom']) && !empty($_POST['prenom'])) 
			&& (isset($_POST['specialite']) && !empty($_POST['specialite'])) 
			&& (isset($_POST['mail']) && !empty($_POST['mail']))){
				
			
			try{
					$bdd = new PDO('mysql:host=localhost;dbname=base', 'root', '');
			}catch (Exception $e){
				    die('Erreur : ' . $e->getMessage());
			}
			echo "Connexion base réussie";

		}else{

			echo "Erreur de connexion";
		}	
	}else{
	
		echo "Erreur formulaire";
	}
?>



Mais je vois pas où est le problème. Si c'est de la syntaxe, ou je sais pas quoi.
Après plusieurs tests, il semblerait que le problème vienne de cette ligne

if ((isset($_POST['nom']) && !empty($_POST['nom'])) && (isset($_POST['prenom']) && !empty($_POST['prenom'])) && (isset($_POST['specialite']) && !empty($_POST['specialite'])) && (isset($_POST['mail']) && !empty($_POST['mail']))){


Et plus précisément de cette partie


if ((isset($_POST['nom']) && !empty($_POST['nom'])) && (isset($_POST['prenom']) && !empty($_POST['prenom'])) && (isset($_POST['specialite']) && !empty($_POST['specialite'])) && [b](isset($_POST['mail']) && !empty($_POST['mail']))){[/b]


Mais j'arrive pas à comprendre ce qui merde Smiley biggol



PS: Je reposte mon html, au cas où:

<html>
	<head>
		<meta charset="UTF-8">

	</head>
	<body>
		<form action="registerDoc.php" method="post">
			<input type="text" placeholder="Nom" name="nom" required><br />
			<input type="text" placeholder="Prénom" name="prenom" required><br />
			<input type="text" placeholder="Fonction/Spécialité" name="specialite" required><br />
			<input type="text" placeholder="Adresse mail" nom="mail" required><br />
			<input type="submit" value="Envoyer" name="testEnvoi">
		</form>
	</body>
</html>
HAaaaaaaaaaan le blaireau.... -_-'
J'ai du passer 2h sur mon code sans même voir l'erreur...


Merci Smiley smile
Je souhaiterais aussi que si une erreur survient lors de la saisie des coordonnées, que le message indiquant que tel ou tel champ n'a pas été rempli ou pas correctement ne s'affiche pas sur une nouvelle page, mais sur la même page, sans la recharger, genre dans un popup ou je ne sais quoi.

J'avais penser à intégrer su JS dans mon code, avec son alert, mais le truc, c'est que la page change quand même. Je n'arrive pas à rester sur la même page.
Comment je pourrais faire?
Bonjour,

Tu peux mettre le nom de la page où se trouve le formulaire comme cible du form dans l'attribut "action" de la balise <form>, ainsi le formulaire sera validé sur la même page, ensuite tu englobes ton code php dans une fonction (tous tes tests comme isset($_POST['machin']), etc),

Tu inclues le fichier avec la fonction au début de ta page où se trouve le formulaire, et tu appelles la fonction (du style valider_form() par ex) où tu souhaites mettre les messages d'erreur de saisie de l'utilisateur, ainsi le code PHP écrira directement à l'endroit où tu le souhaites les messages d'erreur Smiley smile

Je ne sais pas si c'est très clair, donc voici un résumé en code:

1 : mettre la cible du <form> sur la même page que ton formulaire
<form method="post" [b]action="formulaire.php"[/b]>

2 : englober ton PHP qui valide le formulaire dans une fonction
function valider_form()
{ 
/* if(sset($_POST)) { },
etc...
*/
}

3 : inclure la page au début de ta page formulaire.php
<?php include(valider_formulaire.php); // nom pour exemple ?>

4 : Pour finir, tu appelles ta fonction valider_form() à l'endroit où tu veux tes messages d'erreur (par ex au-dessus de ton formulaire)
<?php valider_form(); ?>

Modifié par ohweb (25 Apr 2014 - 09:58)
Au passage, pas besoin de cumuler isset et empty Smiley cligne

"Manuel php pour Empty()" a écrit :
Détermine si une variable est considérée comme vide. Une variable est considérée comme vide si elle n'existe pas, ou si sa valeur équivaut à FALSE.

ou dit autrement :
"manuel php pour empty()" a écrit :
Cela signifie que empty() est strictement équivalent à !isset($var) || $var == false.


Et ce qui vaut false :
"manuel php pour empty()" a écrit :
"" (une chaîne vide)
0 (0 en tant qu'entier)
0.0 (0 en tant que nombre à virgule flottante)
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)
$var; (une variable déclarée, mais sans valeur)




Et au passage, ça pourrait valoir le coup, avant d'aller plus loin dans l'apprentissage du php de prendre des bonnes habitudes en supprimant les mysql_ l'extension étant désuette depuis php 5 et obsolète depuis php 5.5. A remplacer par mysqli_ (tutoriel en français : ici) ou à PDO
Pages :