Projet de fin d'année. (Java,Html,MySQL,PHP) - Divers - Programmation
Marsh Posté le 24-11-2013 à 10:57:37
J'suis entrin de bosser sur la conception du script de la page de login mais j'ai beaucoup de mal à configurer des chemins d'accés à mon SQL .
Voilà la gueule du prog
<?php
echo"<h1>S'inscrire</h1>";
if(isset($_POST['submit']))
{
if(mysql_num_rows(mysql_query("SELECT * from users WHERE username='" . $_POST['username'] . "'" )) == 1){
echo "Oops! Username is already in use!";
}
else if($_POST['password'] != $_POST['retype-password']){
echo "Oops! The two entered passwords don`t match!";
}
else if(strlen($_POST['username']) > 15)
{
echo "Oops! Username is too long!";
}
else if(strlen($_POST['username']) < 6){
echo "Oops! Username is too short!";
}
else if(strlen($_POST['password']) > 15){
echo "Oops! Password is too long!";
}
else if(strlen($_POST['password']) < 6){
echo "Oops! Password is too short!";
}
else if(preg_match('/[^0-9A-Za-z]/',$_POST['username'])){
echo "Oops! Unknown letters at username!";
}
else if(preg_match('/[^0-9A-Za-z]/',$_POST['password'])){
echo "Oops! Unknown letters at password!";
}
else{
$query = mysql_query("INSERT into users VALUES ('".$_POST['username']."', '".sha1($_POST['password'])."')" ) or die(mysql_error());
}
{
$db_host = "mysql.hostinger.fr";
$db_user = "********_aero";
$db_pwd = "*****";
$db_select = "u*********_wttj";
mysql_connect($db_host, $db_user, $db_pwd, $db_select);
}
}
?>
<form method="POST" action="register.php">
<p>Nom d'utilisateur :</p>
<input type="text" name="username"/>
<p>Mot de passe :</p>
<input type="password" name="password"/>
<p>Repetez mot de passe :</p>
<input type="password" name="repeatpassword"/><br/>
<input type="submit" name="submit" value="valider"/>
</form>
Et quand je le test ça donne ça :
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 6
Notice: Undefined index: retype-password in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 9
Oops! The two entered passwords don`t match!
Warning: mysql_connect(): in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 40
Warning: mysql_connect(): in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 40
Et le module d'inscription que l'on voit à la fin du script est censé die or là il se place juste aprés les 4 lignes d'erreur !
Marsh Posté le 24-11-2013 à 11:09:16
1/ il faut te connecter avant de faire la moindre requete
2/ il FAUT utiliser des requetes préparées. Ce n'est pas plus compliqué et ça te protégeras gratuitement contre les injections SQL
Marsh Posté le 24-11-2013 à 11:58:22
Alors suite à la lecture de ta réponse flo850 et à la vue de ce message dans mon pannel de connection à distance :
If you wish to connect to our MySQL server form your computer or from some other server use this section to add remote IP addresses that will connect to our MySQL server.
Our MySQL server public IP address is: 185.28.20.2. Use this IP address for your PHP scripts.
J'ai modifié mon script de cette façon :
<?php
echo"<h1>S'inscrire</h1>";
if(isset($_POST['submit']))
{
{
$db_host = "185.28.20.2.";
$db_user = "u********_aero";
$db_pwd = "*******";
$db_select = "u********_wttj";
mysql_connect($db_host, $db_user, $db_pwd, $db_select);
}
if(mysql_num_rows(mysql_query("SELECT * from users WHERE username='" . $_POST['username'] . "'" )) == 1){
echo "Oops! Username is already in use!";
}
else if($_POST['password'] != $_POST['retypepassword']){
echo "Oops! The two entered passwords don`t match!";
}
else if(strlen($_POST['username']) > 15)
{
echo "Oops! Username is too long!";
}
else if(strlen($_POST['username']) < 6){
echo "Oops! Username is too short!";
}
else if(strlen($_POST['password']) > 15){
echo "Oops! Password is too long!";
}
else if(strlen($_POST['password']) < 6){
echo "Oops! Password is too short!";
}
else if(preg_match('/[^0-9A-Za-z]/',$_POST['username'])){
echo "Oops! Unknown letters at username!";
}
else if(preg_match('/[^0-9A-Za-z]/',$_POST['password'])){
echo "Oops! Unknown letters at password!";
}
else{
$query = mysql_query("INSERT into users VALUES ('".$_POST['username']."', '".sha1($_POST['password'])."')" ) or die(mysql_error());
}
}
?>
<form method="POST" action="register.php">
<p>Nom d'utilisateur :</p>
<input type="text" name="username"/>
<p>Mot de passe :</p>
<input type="password" name="password"/>
<p>Repetez mot de passe :</p>
<input type="password" name="retypepassword"/><br/>
<input type="submit" name="submit" value="valider"/>
</form>
J'ai placé le module de connexion au serveur MySQL avant le stockage mais ça parait encore faux... Pour preuve je reçois encore ça sur ma page PHP :
Warning: mysql_connect(): Host '92.149.60.127' is not allowed to connect to this MySQL server in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 11
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 14
No database selected
Il me dit ''No database selected'' alors qu'on voit clairement sur mon script que j'ai défini ou la chercher...
Je me suis dis aussi en voyant que cet ''host'' n'a pas le droit d'accéder à MySQL que je pourrai tester avec l'adresse d'host que m'a donné Hostinger j'ai donc remplacer l'ip par => mysql.hostinger.fr
Et ça me donne cette erreur cette fois :
Warning: mysql_connect(): in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 11
Warning: mysql_connect(): in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 11
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-12.1\www\my portable files\register.php on line 14
No database selected
Je ne comprend pas cette erreur : ''Warning; mysql_connect"
Aussi j'ai entendu parlé d'un nouveau mysql_connect () qui se remplace par mysqli_connect () , or quand je le remplace dans mon script NotePad++ il ne reconnait pas l'argument... (affiché en gris)
Marsh Posté le 24-11-2013 à 15:55:35
Tu executes ton code depuis ton pc perso , alors que le serveur mysql n'est vraisemblablement accessible que depuis un site hébergé chez eux
la coloration syntaxique de notepad n'a pas grand chose à voir avec ce qui est supporté et ne l'est pas. Ce n'est qu'une indication
Marsh Posté le 24-11-2013 à 17:24:35
Je suis donc censé mettre mon login sur une page hebergé chez eux ?
Marsh Posté le 24-11-2013 à 17:52:16
flo850 a écrit : 1/ il faut te connecter avant de faire la moindre requete |
J'ajouterais: utiliser bcrypt pour hasher les mots de passe et non sha1 (et ne mettre aucune limite au mot de passe utilisable).
Marsh Posté le 24-11-2013 à 22:46:23
D’abord merci de votre aide, voici là ou j'en suis :
Bonsoir,
Veuillez utiliser les bons identifiants MySQL:
Adresse ip MySQL distant: ***.**.**.*
Utilisateur: u********3_aero
Nom de la base de données: u********_wttj
Veuillez utiliser les bons identifiants MySQL pour que vous puissiez vous connecter à votre base de données à distance.
Veuillez ajouter l'adresse ip de votre ordinateur dans la section "MySQL distant", vous ne l'avez pas fait pour le moment.
Si vous avez d'autres questions, n'hésitez pas à nous contacter à nouveau.
Merci d'avoir choisi d'utiliser nos services.
Cordialement
Nacim C.
Département d'assistance client
http://www.hostinger.fr
Voici la réponse du support, apparement mon script n'arrive pas à entrer dans leur base mySQL parce que j'ai pas mis mon IP mais je ne vois pas ou la mettre dans mon panel je suis allé dans la section mais il me propose juste d'ajouter un ''Host'' + ''Nom de DB'' or j'ai esseyé de mettre mon ip en host mais ça change rien.
Dois-je indiquer au script quelle ip utiliser ? Si oui comment ?
Marsh Posté le 25-11-2013 à 12:23:30
Bonjours,
D’après la consultation de votre gueule de programme je confirme la réponse de flo850 car il faut tjr connecter avant de faire la moindre requête et de prépare les requêtes d'avance afin d’éviter toute injection sql.
cordialement.
www.basicsolutions.ma
Marsh Posté le 25-11-2013 à 12:46:55
Et sinon, tu dois mettre tes cours de php à la poubelle.
Cela fait plusieurs années que mysql_connect n'est plus employée.
Quitte à apprendre, je te conseille de partir sur de bonne bases
http://www.amportfolio.com/knowled [...] entals-pdo
Marsh Posté le 26-11-2013 à 18:43:58
J'ai suivi vos conseils, mon script marche (bon ya pas de mise en page mais c'est pas la priorité) j'ai donc reussi à me connecter au MySQL de Hostinger et d'y envoyer des identifiants et mon serveur les reçois
<form method="post">
<label>Pseudo: <input type="text" name="pseudo"/></label><br/>
<label>Mot de passe: <input type="password" name="passe"/></label><br/>
<label>Confirmation du mot de passe: <input type="password" name="passe2"/></label><br/>
<label>Adresse e-mail: <input type="text" name="email"/></label><br/>
<input type="submit" value="M'inscrire"/>
</form>
<?php
if(!empty($_POST['pseudo']))
{
$con=mysqli_connect("***.**.**.*","u********_aero","******","u********_wttj" );
$passe = mysql_real_escape_string(htmlspecialchars($_POST['passe']));
$passe2 = mysql_real_escape_string(htmlspecialchars($_POST['passe2']));
if($passe == $passe2)
{
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
$passe = sha1($passe);
mysqli_query($con,"INSERT INTO validation (pseudo, passe, email)
VALUES ('$pseudo', '$passe','$email')" );
}
else
{
echo 'Les deux mots de passe que vous avez rentrés ne correspondent pas…';
}
}
?>
Je voudrai que mon script génére le même genre de logs que ceux utilisé par Mojang (vous savez les créateurs de minecraft ) en analysant un peu la documentation j'en ai retiré les éléments que mon script doit générer et stocker surement ?
La base de données est plus importante sur le serveur d'authentification Mojang, il faudrait donc avoir ce genre de truc dans le MySQL
-Colonne id
-Colonne Pseudo
-Colonne Email
-Colonne Nom
-Colonne ClientToken
-Colonne AccessToken
-Colonne Password (crypté biensûr)
-Colonne SelectedProfile_id
-Colonne SelectedProfile_name
-Colonne AvailableProfile_id
-Colonne AvailableProfile_name
Marsh Posté le 26-11-2013 à 21:27:43
non,
non
non
non
non
Toutes tes requetes doivent être des requêtes préparées : http://fr.php.net/manual/fr/mysqli [...] ements.php
(en plus ça t'éviteras de devoir penser a mysql_escape_string)
(et que vient foutre htmlspecialchars ? )
Marsh Posté le 27-11-2013 à 06:56:47
Merci beaucoup de prendre du temps pour me faire progresser, je reviens quand j'aurai amélioré ça^^
Marsh Posté le 27-11-2013 à 18:14:00
J'ai lu mais j'ai beaucoup de mal à changer mon script... Pourriez-vous m'aider ?
Marsh Posté le 23-11-2013 à 17:41:16
Bonjour,
Je suis un nouveau membre du forum et j'ai trouvé votre site car un ami me l'a conseillé. Je suis en Terminale actuellement et je compte rentrer dans une école de Game Designer/Web Designer l'année prochaine, l'entrée dans cette école nécessite un exposé d'un de nos projets personnels afin de prouver notre implications et notre envie d'intégrer l'école. J'ai donc décidé de créer un launcher pour un jeu (minecraft en l’occurrence du fait que ses codes sources sont publiques.) avec une petite difficulté c'est que j'ai pour projet de remplacer le système d'authentification officiel pour y intégrer mon propre système (les membres s'inscriront sur un site et se logeront avec les identifiants du site.) /!\ IMPORTANT /!\
J'ai souscris à un compte prenium afin d'avoir ACCES a mes données SQL et ne pas être obligé de passer par leur bouton PhPmyadmin
Mon launcher contiendra donc :
du Java (Création du launcher), EN COURS
du PHP et MySQL (pour créer la base d'authentification perso), BLOQUE
du HTML (création de page d’accueil intégrable au launcher). EN ATTENTE
Je vais donc directement vous exposer mes problèmes, au fur et à mesure, avec tout les détails de mon avancés et j'éditerai ce sujet pour pas faire de double poste :
J'ai donc commencé avec un code source en travaillant sur Eclipse et avec un hébergeur web possédant un FTP (Hostinger France en l’occurrence) donc là j'ai suivi des guides et j'ai reussi à imposer à mon launcher une version du jeu spécifique (antérieur à la version officiel).
Je posséde donc un launcher qui télécharge la version du jeu directement à part de mon hébergeur web (que j'édite avec FileZila).
Je me suis donc intéressé à la deuxième étapes qui est de remplacer le système d'authentification officiel avec mon serveur d'authentification perso, j'ai téléchargé WAMP (http://www.wampserver.com/) afin d'utiliser PhPmyadmin. Ma question pour le moment est donc : Puis-je remplacer le système d'authentification et le remplacer par le miens ? Voici ou on abouti mes recherches : http://wiki.vg/Protocol_Encryption#Authentication
il semble que le script soit celui-ci
PS : Je tiens à préciser que je suis novice et qu'il me faut absolument me lancer dans mon projet pour rentrer dans le bain ! Je tiens vraiment à l'avoir fini avant la fin de l'année et je pourrai y mettre beaucoup de temps libre, en aucun cas je vous demande de le faire à ma place mais juste de m'éclairer sur la démarche à suivre.
Merci d'avance à vous tous,
Aerowiel.
Message édité par Aerowiel le 24-11-2013 à 11:08:04