Posté(e) le 14 septembre 200915 a 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...
Posté(e) le 14 septembre 200915 a 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à.
Posté(e) le 14 septembre 200915 a Auteur 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
Posté(e) le 15 septembre 200915 a 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
Posté(e) le 15 septembre 200915 a Tant que tu vérifies ce que tu récupères (genre avec une expression régulière), tu évites 99% des attaques :)
Posté(e) le 16 septembre 200915 a Auteur 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 !!!
Posté(e) le 16 septembre 200915 a 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
Posté(e) le 16 septembre 200915 a Auteur 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 ?
Posté(e) le 16 septembre 200915 a $_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)
Posté(e) le 16 septembre 200915 a Auteur J'ai bien suivi tes instructions et pourtant ça n'inscrit pas dans la base... j'ai du manquer un truc :(
Posté(e) le 16 septembre 200915 a 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 ?
Posté(e) le 16 septembre 200915 a Auteur 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
Posté(e) le 16 septembre 200915 a j'imagine que ce fichier est bien inclue dans la page en question ? que donne l'echo de la requête ?
Posté(e) le 16 septembre 200915 a Auteur 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'
Posté(e) le 16 septembre 200915 a 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)
Posté(e) le 16 septembre 200915 a Auteur $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
Posté(e) le 16 septembre 200915 a Auteur 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
Posté(e) le 16 septembre 200915 a Auteur 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...
Posté(e) le 16 septembre 200915 a Auteur 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 ?
Posté(e) le 17 septembre 200915 a 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).
Posté(e) le 17 septembre 200915 a Auteur 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 !
Posté(e) le 17 septembre 200915 a Auteur 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 ?
Posté(e) le 18 septembre 200915 a 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 :)
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.