Erreur en PHP

Kuromi Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   -  
Kuromi Messages postés 55 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   188
 
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   Statut Membre Dernière intervention   17
 
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   Statut Membre Dernière intervention   78
 
Salut.

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