Aller au contenu

[PHP] Enregistrement d'utilisateurs


Ferguss0N

Messages recommandés

Bonjour à tous,

Me voici de nouveau confronté à un problème de taille : l'enregistrement de plusieurs utilisateurs sur un site web que je suis en train de monter (pour me faire la main)... je pourrai utiliser des scripts tout prêts me direz vous mais je n'ai pas su les trouver (si il y en a) ou alors ils sont bien trop complexe pour ma demande...

Voici en gros ce que je recherche :

La possibilité de s'enregistrer sur le site à l'aide d'un formulaire classique avec champs modifiable dans l'avenir si l'utilisateur le souhaite, pouvoir uploader un avatar... et donner un niveau d'utilisation au dit utilisateur... du genre : user, admin, superadmin.

Si quelqu'un peut me dropper des liens sur le fonctionnement de mysql, php et formulaire car les sites que j'ai visités n'explique pas au pas à pas mais donne l'info en brut ce qui à le don de me faire suer...

J'ai déjà créer une table dans ma base mysql...

Bien sur la sécurité est au rendez-vous :transpi:

Par avance, merci

Ps : ce que je viens d'écrire est un torchon... :transpi:

Lien vers le commentaire
Partager sur d’autres sites

niveaux liens, tu devrais trouver ton bonheur sur lesiteduzero ou phpdebutant.org (ainsi que la doc PHP, ......)

mais ce que tu veux faire n'est pas bien compliqué. où bloques-tu ?

-fonctionnement de mysql:

pour enregistrer un user, ça se passe avec "INSERT INTO ma_table (field0, field1, ..., filedn) VALUES (value0, value1, ..., valuen);"

avec ça, tu créé un nouvel utilisateur.

pour le faire en php (une fois que t'as ouvert la connexion avec ta base), passes par mysql_querry("$requete");

-pour le fonctionnement des formulaires

j'immagine que tu sais déjà créer un formulaire (<form><input ...> ... </form>)

l'attribut "action" de form désigne la page qui traitera les infos (qui peut être la même que celle affichant le formulaire, ou un simple script qui n'affiche rien)

une fois dans la page traitant le formulaire, tu recupères les infos envoyés avec $_POST['attr_name'], $_GET['attr_name'], ou plus généralement: $_REQUEST['attr_name'] (attr_name étant le nom de l'atribut, pour <input type='textarea' name='description' />, attr_name=description)

c'est très sommaire, mais ta question étant plutot généraliste... demandes si tu veux des détails.

bonus1:

si tu connais / te motives à l'apprendre, JavaScript pourrait te rendre quelques services à ce niveau (vérification du formulaire avant envoie de la requête, exécution de la requète et affichage du résultat sans avoir quitté la page du formulaire, ...)

bonus2:

en post, c'est quand même plus "sûr" qu'en get

bonus3:

ne te contentes pas de faire:

$sql="INSERT INTO my_table (......) VALUES ($_POST['name'], $_POST['first_name'], ...)"

ou alors, laisse nous tester après :incline:

mysql_real_escape_string() permet d'éviter les (la plus grande majorité des) injections sql

bonus4:

uploader un avatar, c'est sympa.

et dangereux.

réfléchis bien à ce que tu fais quand tu en sera là.

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta réponse, en effet le site du zero est vraiment bien foutu !

Je bloquais au niveau de l'insertion... je crois être dans la bonne voix je vais faire attention à la sécurité puis je te donnerai une url pour que tu essais tu me dirais si il peut supporter les attaques courantes :reflechis:

pour le controle je pense que javascript va m'être d'un grand soutiens en effet !

je vous tiens au jus !

merci ;)

Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos commentaires ! :p

je viens vers vous car je me retrouve confronter à un problème assez casse-burnes :

Je souhaite rendre les champs utilisateurs modifiable j'ai donc regarder comment faire sur le net et j'en suis arrivé à ce code :

<?php
//On récupère la valeur des champs :

if (isset($_POST['username'])) $username = $_POST['username']; //echo 'username'=.$username
if (isset($_POST['login'])) $login = $_POST['login']; //echo 'login'=.$login
if (isset($_POST['user_passwd'])) $user_passwd = $_POST['user_passwd']; //echo 'user_passwd'=.$user_passwd

$config_update = "UPDATE users SET username='username', login='login', user_passwd='user_passwd' WHERE id_user=1 ";

//exécution de la requête SQL:
$mod = mysql_query($config_update) or die(mysql_error());
//}

//affichage des résultats, pour savoir si la modification a marchée:
if($mod)
{
echo("La modification à été correctement effectuée");
}
else
{
echo("La modification à échouée");
}	
?>

Je bloque au niveau de :

$config_update = "UPDATE users SET username='username', login='login', user_passwd='user_passwd' WHERE id_user=1 ";

Vu que j'ai mis des valeurs fixes dans le SET ça marche mais dès que je veux mettre la variable attitrée cela affiche une erreur lorsque je charge le formulaire (je ne parle pas d'exécution)

Si quelqu'un peut jeter un oeil dans le truc ça me serait bien utile merci :transpi:;):craint::eeek2:

PS : j'ai mis un user fixe pour faire mes essais :D

PS: me fouettez pas je suis de niveau débutant hein !!!

Lien vers le commentaire
Partager sur d’autres sites

1. tu peux nous poster le code avec la 'variable attitré' ?

2. dans tes commentaires (pour ta culture perso), tu fais echo 'username'=.$username

ce qui te fait deux concaténations ('username' + = et 'username=' + $username)

une façon plus simple de l'écrire: echo 'username='.$username, voir echo 'username=$username'

3. un peu de code

$username = isset($_REQUEST['username']) ? $_REQUEST['username'] : "";
$login	= isset($_REQUEST['login']) ? $_REQUEST['login'] : "";
$passwd   = isset($_REQUEST['passwd']) ? $_REQUEST['passwd'] : "";
$iduser   = isset($_REQUEST['iduser']) ? $_REQUEST['iduser'] : "";

$update = "UPDATE users "
	.		"SET usename = '$username', "
	.		"login = '$login', "
	.		"user_passwd = 'passwd' "
	. "WHERE id_user='$iduser'";

$mod = mysql_query($config_update) or die(mysql_error());
[...]

et je viens de percuter.

si tu ne met pas de '$' devant tes noms de variable, tu n'y arrivera pas :francais:

Lien vers le commentaire
Partager sur d’autres sites

Salut Mephisto, merci pour le coup de main :francais:

Cela fonctionne à l'affichage désormais :transpi:

<?php

//On récupère la valeur des champs :

$username = isset($_REQUEST['username']) ? $_REQUEST['username'] : "";
$login	= isset($_REQUEST['login']) ? $_REQUEST['login'] : "";
$user_passwd   = isset($_REQUEST['user_passwd']) ? $_REQUEST['user_passwd'] : "";
$id_user   =  isset($_REQUEST['id_user']) ? $_REQUEST['id_user'] : "";

$config_update = "UPDATE users "
	.		 "SET username = '$username', "
	.		 "login = '$login', "
	.		 "user_passwd = '$user_passwd' "
	.		 "WHERE id_user='$id_user'";

//exécution de la requête SQL:
$mod = mysql_query($config_update) or die(mysql_error());
//}

//affichage des résultats, pour savoir si la modification a marchée:
?>

Cependant il ne modifie pas la table de l'id_user... je dois encore ne pas comprendre comment tout fonctionne !

Mon formulaire se présente ainsi :

<form method="POST" action="">

<fieldset>

	<ul>
		<li>Utilisateur <input type="text" size="20" name="user" value="<?php echo $username ?>"></li>
		<li>Login <input type="text" size="20" name="user" value="<?php echo $login ?>"></li>
		<li>Mot de passe <input type="text" size="20" name="user" value=<?php echo $user_passwd ?>"></li>
	</ul>

	<center><input type="submit" value="Modifier"></center>

</fieldset>

</form>

Ps : la différence en REQUEST et POST c'est quoi ?

Lien vers le commentaire
Partager sur d’autres sites

$_REQUEST va chercher dans $_POST et dans $_GET

(quand vous êtes plusieurs à tafer sur un intra boisé, ça évite les contacts avec les différents participants...)

nouvelle remarque, au lieu de <?php echo $variable?>, tu as <?=$variable?> (c'est exactement pareil, juste plus rapide écrire ;) )

ensuite, tes trois champs ont la même valeur de name ("user")

enfin, pour garder un lien avec l'utilisateur (tu n'utilise pas encore les sessions, j'imagine), rajoute un

<input type='hidden' name='id_user' value='<?=$id_user?>' />

(sinon, quand il charge la page suivante, tu n'as plus de variable $id_user)

Lien vers le commentaire
Partager sur d’autres sites

Donc voilà le code comme il faut :

<?php
//On récupère la valeur des champs :
if(isset ($_REQUEST['verif'])) {
$username  = isset($_REQUEST['username']) ? $_REQUEST['username'] : "";
$login	= isset($_REQUEST['login']) ? $_REQUEST['login'] : "";
$user_passwd   = isset($_REQUEST['user_passwd']) ? $_REQUEST['user_passwd'] : "";
$id_config   =  1;

$config_update = "UPDATE configuration "
.		 "SET username = '$username', "
.		 "login = '$login', "
.		 "user_passwd = '$user_passwd' "
.		 "WHERE id_config='$id_config' ";

//exécution de la requête SQL:
$mod = mysql_query($config_update) or die(mysql_error());
//}
}
?>

avec le formulaire qui va bien derrière pour conserver les infos et tout et tout :

<fieldset>

	<legend><b>Informations</b></legend>

	<ul>

	<?php
	$config_display = mysql_query("SELECT * FROM configuration") or die(mysql_error());

	while ($datas = mysql_fetch_array($config_display) )
	{
	echo ' <li>Utilisateur : <input type="text" size="20" name="username" value="'.$datas['username'].'"></li>
		   <li>Login : <input type="text" size="20" name="login" value="'.$datas['login'].'"></li>
		   <li>Mot de passe : <input type="text" size="20" name="user_passwd" value="'.$datas['user_passwd'].'"></li> '; 
	}

	?>

	</ul>


</fieldset>

Je continue mon truc...

Lien vers le commentaire
Partager sur d’autres sites

Pour info j'ai rajouter comme c'était souligné dans le topic un mysql_real_escape_query_string ainsi :

if(isset ($_REQUEST['verif'])) {
$username = mysql_real_escape_string (isset($_REQUEST['username']) ? $_REQUEST['username'] : "");
$login = mysql_real_escape_string (isset($_REQUEST['login']) ? $_REQUEST['login'] : "");
	$user_passwd = mysql_real_escape_string ( isset($_REQUEST['user_passwd']) ? $_REQUEST['user_passwd'] : "");

Y'a pas plus simple ? :transpi:

Lien vers le commentaire
Partager sur d’autres sites

Je serais toi je ferais par expression régulière, au moins t'es tranquille.

Par exemple, tu sais que ton login doit être composé de caractères alphanumériques seulement, avec une longueur maximale de 15 caractères, tu crées ton expression régulière associée et si ça ne correspond pas là tu mets une erreur. C'est plus "propre" et plus sûr.

Tu peux faire ça sur tous les paramètres que tu reçois dont tu connais la structure (regarde du côté de ereg() en php).

Lien vers le commentaire
Partager sur d’autres sites

Salut SnipX,

Je serais toi je ferais par expression régulière, au moins t'es tranquille.

Par exemple, tu sais que ton login doit être composé de caractères alphanumériques seulement, avec une longueur maximale de 15 caractères, tu crées ton expression régulière associée et si ça ne correspond pas là tu mets une erreur. C'est plus "propre" et plus sûr.

Tu peux faire ça sur tous les paramètres que tu reçois dont tu connais la structure (regarde du côté de ereg() en php).

Merci pour le tuyau je vais regarder ! :francais:

Lien vers le commentaire
Partager sur d’autres sites

Salut à tous,

Bon j'ai une nouvelle fois une difficulte :

Je cherche à faire une liste des users avec possibilité de faire un liens pour supprimer un user de la table par ex, donc j'ai procédé ainsi :

<ul>
<?php
$user_display = mysql_query("SELECT * FROM pages") or die(mysql_error());

while ($datas = mysql_fetch_array($user_display) )
{
echo ' <li><div class="id">'.$datas['id_user'].'</div>" < span class="lightblue">'.$datas['title'].'</span> - <a href="?DELETE FROM pages WHERE id_user='.$datas['id_user'].'">Supprimer</a>';
}

?>

</ul>

Problème ça n'a pas l'air correct pour supprimer, la liste s'affiche bien mais je ne peux pas supprimer (rien ne se passe)... j'ai beau chercher je dois mal chercher.. qqun peut m'aider ?

Lien vers le commentaire
Partager sur d’autres sites

Oulah mais t'es violent toi :)

Tu fais un lien genre

<a href=supprimer_user?id='.$datas['id_user'].'>Supprimer user</a>

Et après tu récupères ton paramètre sur une autre page, mais surtout pas comme ça une page avec directement la requete ! C'est archi dangereux, ça veut dire que quiconque entre une requête ça passerait...

La penses à bien récupérer ton id, tu fais une regexp dessus, et rulez :)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...