Ferguss0N Posté(e) le 14 septembre 2009 Partager Posté(e) le 14 septembre 2009 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 Par avance, merci Ps : ce que je viens d'écrire est un torchon... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 14 septembre 2009 Partager Posté(e) le 14 septembre 2009 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 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 More sharing options...
Ferguss0N Posté(e) le 14 septembre 2009 Auteur Partager Posté(e) le 14 septembre 2009 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 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 More sharing options...
Shtong Posté(e) le 15 septembre 2009 Partager Posté(e) le 15 septembre 2009 pour le controle je pense que javascript va m'être d'un grand soutiens en effet ! Attention à toujours faire les contrôles coté serveur, et ensuite éventuellement en javascript, au cas où Je veux bien m'amuser à tester aussi si tu veux Lien vers le commentaire Partager sur d’autres sites More sharing options...
SnipX Posté(e) le 15 septembre 2009 Partager Posté(e) le 15 septembre 2009 Tant que tu vérifies ce que tu récupères (genre avec une expression régulière), tu évites 99% des attaques :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 Merci pour vos commentaires ! 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 PS : j'ai mis un user fixe pour faire mes essais PS: me fouettez pas je suis de niveau débutant hein !!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 16 septembre 2009 Partager Posté(e) le 16 septembre 2009 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 Salut Mephisto, merci pour le coup de main Cela fonctionne à l'affichage désormais <?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 More sharing options...
Mephisto Posté(e) le 16 septembre 2009 Partager Posté(e) le 16 septembre 2009 $_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 More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 J'ai bien suivi tes instructions et pourtant ça n'inscrit pas dans la base... j'ai du manquer un truc :( Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 16 septembre 2009 Partager Posté(e) le 16 septembre 2009 fais un echo de ta requête (et, au passage, test-là avec ce qui te sert d'interface avec ta BDD) et... un doute qui me trotte mais... tu es bien identifié sur la BDD ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 fais un echo de ta requête(et, au passage, test-là avec ce qui te sert d'interface avec ta BDD) et... un doute qui me trotte mais... tu es bien identifié sur la BDD ? Oui je suis bien identifié dans mon fichier de config Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 16 septembre 2009 Partager Posté(e) le 16 septembre 2009 j'imagine que ce fichier est bien inclue dans la page en question ? que donne l'echo de la requête ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 j'imagine que ce fichier est bien inclue dans la page en question ?que donne l'echo de la requête ? Oui mon fichier de config est bien inclu l'echo de la requete donne ça : UPDATE users SET username = '', login = 'test', user_passwd = 'test' WHERE id_user='id_user' Lien vers le commentaire Partager sur d’autres sites More sharing options...
Mephisto Posté(e) le 16 septembre 2009 Partager Posté(e) le 16 septembre 2009 donc, déjà, tu peux corriger la faute de frape dans la variable $username tu as pu tester la requête sur phpMyAdmin / mysql / ... ? (autrement que par ton site, histoire de voire si la requête lui convient) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 $username = isset($_REQUEST['username']) ? $_REQUEST['username'] : ""; je vois pas ou est la faute... EDIT: c'est bon j'ai corrigé, c'était dans mon formulaire que ça décounait Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 Par contre je me demande de quoi cela peut bien venir je suis obligé de cliquer deux fois sur modifier pour que cela apparaissent à l'écran.. Visiblement j'ai un bug, les valeurs se barre de la base des que je change de page et que je reviens... EDIT : j'ai corrigé je poste le code plus tard Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 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 More sharing options...
Ferguss0N Posté(e) le 16 septembre 2009 Auteur Partager Posté(e) le 16 septembre 2009 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
SnipX Posté(e) le 17 septembre 2009 Partager Posté(e) le 17 septembre 2009 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 More sharing options...
Ferguss0N Posté(e) le 17 septembre 2009 Auteur Partager Posté(e) le 17 septembre 2009 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 ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Ferguss0N Posté(e) le 17 septembre 2009 Auteur Partager Posté(e) le 17 septembre 2009 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 More sharing options...
SnipX Posté(e) le 18 septembre 2009 Partager Posté(e) le 18 septembre 2009 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 More sharing options...
Shtong Posté(e) le 18 septembre 2009 Partager Posté(e) le 18 septembre 2009 Ah oui, joli en effet Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.