Erreur en PHP

Fermé
Kuromi Messages postés 55 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 28 janvier 2012 - 15 juin 2010 à 15:43
Kuromi Messages postés 55 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 28 janvier 2012 - 15 juin 2010 à 22:38
Bonjour,

Je suis en apprentissage du PHP, et certaines choses me sont encore inconnues, et je n'ai pour l'instant aucunes réponses précises pour mon script.

Suite à la réalisation d'un petit script (permettant des envois de données dans ma DB), lorsque je visite la page pour un test, il m'affiche 3 erreurs.

Notice: Undefined index: login in C:\wamp\www\Zephyr\register.php on line 10

Notice: Undefined index: pass in C:\wamp\www\Zephyr\register.php on line 10

Notice: Undefined index: cpass in C:\wamp\www\Zephyr\register.php on line 10


C'est là que l'on se dit que mes variables ne sont pas (ou mal) déclarées.
Mais elle le sont bien un peu plus loin dans le scipt.

Maintenant, cette erreur ne se produit que lors du premier lancement du script.
En appuyant sur "Enregistrer" il remet une page vierge normale.

Question:

-Comment retirer les erreur qui s'affichent lors de la première visite sur la page ?

-Pourquoi lorsque l'on appuis sur "Enregistrer" il ne met pas le message "Vous n'avez pas rempli tous les champs."? Je suppose que c'est parce que le message n'est envoyé que si l'un des 3 champs est remplis, mais où est-ce écrit qu'il renvois la page si aucuns des champs n'est remplis ?

Voici le code pour plus de clarté. (avec la partie HTML en bas)

<?php

if(!@include("connection.php"))die("Cette page n'existe pas sur le serveur, merci d'informer le webmaster du site si ce problème venait à se reproduire."); 

			$connect = @mysql_connect($db_serv, $db_user, $db_pass);
			@mysql_select_db($db_name, $connect);
			$ip=$_SERVER['REMOTE_ADDR'];

			
			if($_POST['login']!='' || $_POST['pass']!='' || $_POST['cpass']!='')
			{
				if($_POST['login']!='' && $_POST['pass']!='' && $_POST['cpass']!='')
				{
					function l2j_encrypt($db_password) 
					{
						return base64_encode(pack("H*", sha1(utf8_encode($db_password))));
					}
					
					$login = $_POST['login'];
					$db_passw = l2j_encrypt($_POST['pass']);
					$cpassw = l2j_encrypt($_POST['cpass']);
					$ok = 1;

					if($db_passw==$cpassw)
					{
						if($ok==1) 
						{
							$checkaccexist = @mysql_query("SELECT login FROM accounts WHERE login = '$login'");
							$checknum = @mysql_num_rows($checkaccexist);
							if($checknum==1)
							{
								echo '<form action="" method="POST">Le compte "'.$login.'" existe déjà.<br /><input type="submit" value="Ressayer"></form>';
							}
							else
							{
								$lastactive = 0; 
								$db_pass = $_POST['pass'];
								@mysql_query("INSERT INTO accounts(login, password, lastactive, lastIP) VALUES ('$login', '$db_passw', '$lastactive', '$ip') ;");
								echo '<form action="" method="POST">Accompte "'.$login.'" crée à partir de l ip: '.$ip.'<br /><input type="submit" value="OK"></form>'; 
							}
						}
					}
					else
					{
						echo '<form action="" method="POST">Mot de passe incorrecte.<br /><input type="submit" value="Ressayer"></form>';
					}
				}
				else
				{
						echo '<form action="" method="POST">Vous navez pas rempli tous les champs.<br /><input type="submit" value="Ressayer"></form>';
				}
			}

			@mysql_close($connect);
		?>
<p class="title">Enregistrer un nouveau compte</p>
<center>
<table>
	<form action="" method="POST">
		<tr><td>Identifiant: <td><input name="login" type="text">
		<tr><td>Mot de Passe: <td><input name="pass" type="password">
		<tr><td>Confirmer Passe: <td><input name="cpass" type="password">
		<tr><td><td><input name="submit" type="submit" value="Enregister">
	</form>
</table></center>
</p>



2 réponses

naruto-94 Messages postés 865 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 20 décembre 2012 188
Modifié par naruto-94 le 15/06/2010 à 16:51
pour les erreurs Undefined index c'est normal car tes variables sont récupérés à partir du formulaire , et comme quand tu rentre dans la page tu n'as donc pas pas rempli le formulaire alors le script php n'a rien à récupérer , donc il faut dire au script php de s'éxécuter que si les variable $_POST sont défini . pour cela il faut utiliser la fonction isset() , tu fais

if( isset($_POST['login'] && isset($_POST['pass']) && isset($_POST['cpass']) )
{
TON SCRIPT PHP
}

et pour afficher le message "Vous n'avez pas rempli tous les champs." tu utilise la fonction empty() au lieu de $variable != ""
empty() vérifie si la variable est vide
!empty verifie si la variable n'est pas vide

if( !empty($_POST['login']) && !empty($_POST['pass']) && !empty($_POST['cpass']))
{

}
1
Kuromi Messages postés 55 Date d'inscription mardi 10 mars 2009 Statut Membre Dernière intervention 28 janvier 2012 17
15 juin 2010 à 22:38
C'est excellent, merci beaucoup, je ne connaissait même pas la fonction isset...ça me renvois dans mes cours avant de vouloir bosser du php trop haut niveau.

En tout cas tout est claire maintenant, merci infiniment !
0
Gl@dior Messages postés 328 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 24 février 2012 78
15 juin 2010 à 16:52
Salut.

Il faut que tu fasse une seconde page qui traite tes données et tu auras déjà moins de problèmes.
0