Plantage de mon script d'identification

Fermé
Gregg - 23 mai 2006 à 15:29
fabrice11901 Messages postés 787 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 12 juillet 2007 - 23 mai 2006 à 18:47
Bonjour à tous,

voilà mon problème, j'ai développé un script d'identification avec l'aide du bouquin "PHP pour les nuls". Je l'ai plus ou moins débuggé sauf que maintenant quand je lance le script mon navigateur n'affiche plus rien et le CPU de ma machine augmente pas mal.

Premier réflexe, je suis allé voir vos tutos sur la gestion des erreurs mais je n'ai même pas de message du type "Maximum execution time exceeded" donc je suis pas mal pommé J'iamgine bien que quelque chose doit tourner en boucle mais je ne trouve pas...

Si l'un de vous pouvait y jeter un coup d'oeil ce serait sympa, il suffit de télécharger ce petit zip et de lancer form.php :
http://greggbazin.free.fr/test/Test.zip

Merci d'avance pour votre aide !

Gregg
A voir également:

10 réponses

fabrice11901 Messages postés 787 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 12 juillet 2007 64
23 mai 2006 à 17:01
salut
je veux bien t'aider mais je préfère que tu mette ton code sur le forum (copier/coller en enlevant les mot de passe) plutôt que de télécharger ton script.
Merci
0
OK je vaisessayer mais il y a plusieurs fichiers, c'est pour ça que c'est un peu galère pour que cela reste lisible.

Merci d'avance en tout cas, c'est bien sympa car là je suis pommé ;-)
0
Fichier form.php :

<?php
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Document sans titre</title>
</head>

<body>
<?php
include("functions_main.inc");
$table_name = "customer";
$next_program = "SecretPage.php";

switch (@$_POST['Button'])
{ case "Identification":
$cxn = Connect_to_db("Vars.inc");
$sql = "SELECT user_name FROM $table_name WHERE user_name='$_POST[fusername]'";
$result = mysqli_query($cnx,$sql) or die ("Execution requête 1 impossible");
$num = mysqli_num_rows($result);
if ($num == 1)
{ $sql = "SELECT user_name FROM $table_name WHERE user_name='$_POST[fusername]' AND password=md5('$_POST[fpassword]')";
$result2 = mysqli_query($cnx,$sql) or die ("Execution requête 2 impossible");
$row = mysqli_fetch_assoc($result2);
if ($row)
{ $_SESSION['auth']="yes";
$_SESSION['logname']=$_POST['fusername'];
header("Location: $next_program");
}
else
{ $message_1="Le nom d'utilisateur '$_POST[fusername]' existe mais vous n'avez pas entré le bon mot de passe ! Réessayez.>br>";
extract($_POST);
include("fields_login.inc");
include("double_form.inc");
}
}
elseif ($num == 0)
{ $message_1 = "Le nom d'utilisateur entré n'existe pas ! Réessayez.<br>";
include("fields_login.inc");
include("double_form.inc");
}
break;
case "Inscription":
foreach($_POST as $field => $value)
{ if ($field != "fax")
{ if ($value == "")
{ $blanks[] = $field;
}
}
}
if(isset($blanks))
{ $message_2 = "Les champs suivants sont vides. Merci d'entrer les informations demandées : ";
foreach($blanks as $value)
{ $message_2 .= "$value, ";
}
extract($_POST);
include("fields_login.inc");
include("double_form.inc");
exit();
}
foreach($_POST as $field => $value)
{ if(!empty($value))
{ if(eregi("name",$field) and !eregi("user",$field) and !eregi("log",$field))
{ if(!ereg("^[A-Za-z' -]{1,50}$",$value))
{ $errors[] = "$value n'est pas un nom valide.";
}
}
if(eregi("street",$field) or eregi("addr",$field) or eregi("city",$field))
{ if(!ereg("^[A-Za-z0-9.,' -]{1,50}$",$value))
{ $errors[] = "$value n'est pas une adresse ou ville valide.";
}
}
if(eregi("state",$field))
{ if(!ereg("[A-Za-z]",$value))
{ $errors[] = "$value n'est pas un état valide.";
}
}
if(eregi("email",$field))
{ if(!ereg("^.+@.+\\.+$",$value))
{ $errors[] = "$value n'est pas un email valide.";
}
}
if(eregi("zip",$field))
{ if(!ereg("^[0-9]{5,5}(\-[0-9]{4,4})?$",$value))
{ $errors[] = "$value n'est pas un code postal valide.";
}
}
if(eregi("phone",$field))
{ if(!ereg("^[0-9)(xX -]{7,20}$",$value))
{ $errors[] = "$value n'est pas un numéro de téléphone valide.";
}
}
}
}
foreach($_POST as $field => $value)
{ if($field != "Button")
{ if($field == "password")
{ $password = strip_tags(trim($value));
}
else
{ $fields[]=$field;
$value = strip_tags(trim($value));
$values[] = addslashes($value);
$$field = $value;
}
}
}
if(@is_array($errors))
{ $message_2 = "";
foreach($errors as $value)
{ $message_2 .= $value." Merci de réessayer<br />";
}
include("fields_login.inc");
include("double_form.inc");
exit();
}
$user_name = $_POST['user_name'];

$cnx = Connect_to_db("Vars.inc");
$sql = "SELECT user_name FROM $table_name WHERE user_name='$user_name'";
$result = mysqli_query($cnx,$sql) or die ("Execution de la requête impossible.");
$num = mysqli_num_rows($result);
if ($num > 0)
{ $message_2 = "$user_name existe déjà. Choisissez un autre nom d'utilisateur.";
include("fields_login.inc");
include("double_form.inc");
exit();
}
else
{ $today = date("Y-m-d");
$fields_str = implode(",",$fields);
$values_str = implode('","',$values);
$fields_str .= ",create_date";
$values_str .= '"'.",".'"'.$today;
$fields_str .= ",password";
$values_str .= '"'.","."md5"."('".$password."')";
$sql = "INSERT INTO $table_name ";
$sql .= "(".$fields_str.")";
$sql .= " VALUES ";
$sql .= "(".'"'.$values_str.")";
mysqli_query($cnx,$sql) or die(mysqli_error($cnx));
$_SESSION['auth']="yes";
$_SESSION['logname']=$user_name;

$emess="Votre inscription s'est correctement déroulé.";
$emess.="<br>Vos nom d'utilisateur et mot de passe sont : ";
$emess.="\n\n\t$user_name\n\t";
$emess.="$password\n\n";
$emess.="Si vous avez des questions ou problèmes, ";
$emess.=" écrivez à gregory.bazin@gltrade.com";
$subj="Votre inscription client";
$mailsend=mail("$email","$subj","$emess");
header("Location: $next_program");
}
break;

default:
include("fields_login.inc");
include("double_form.inc");
}
?>
</body>
</html>


Fichier double-form.inc :

<?php
include ("functions.inc");
?>
<html>
<head><title><?php echo $page['title']?></title></head>
<body style="margin:0">
<h1 align="center"><?php echo $page['top'] ?></h1>
<hr size="10" noshade>
<table border="0" cellspacing="0" cellpadding="0">
<?php
#Formulaire1
?>
<tr>
<td width="33%" valign="top">
<p style="font-size:110%; font-weight:bold">
<?php echo $elements_1['top']?>
</p>
<form action=<?php echo $_SERVER['PHP_SELF']?> method="post">
<table border="0">
<?php
if (isset($GLOBALS['message_1']))
{ echo "<tr>
<td colspan='2' style=\"font-size: 90%; font-weight: bold; font-style: italic; color: red\">
{$GLOBALS['message_1']}
</td>
</tr>\n";
}
foreach($fields_1 as $field => $value)
{ if (ereg("pass",$field))
$type="password";
else
$type="text";
echo "<tr>
<td style=\"text-align: right; font-weight: bold\">$value</td>
<td><input type='$type' name='$field' value='".@$$field."' size='{$length_1[$field]}' maxsize='{$length_1[$field]}'></td>
</tr>
\n";
}
?>
<tr>
<td colspan="2" style="text-align: center">
<br />
<input type="submit" name="Button" value="<?php echo $elements_1['submit']?>">
</td>
</tr>
</table>
</form>
</td>
<!-- Colonne séparant les 2 formulaires -->
<td style="background-color: gray"></td>
<?php
#Formulaire2
?>
<td width="67%">
<p style="font-size: 110%; font-weight: bold">
<?php echo $elements_2['top']?>
<form action=<?php echo $_SERVER['PHP_SELF']?> method="post">
<p>
<table border="0" width="100%">
<?php
if (isset($GLOBALS['message_2']))
{ echo "<tr>
<td colspan='2' style=\"font-size: 90%; font-weight: bold; font-style: italic; color: red\">
{$GLOBALS['message_2']}
</td>
</tr>";
}
foreach($fields_2 as $field => $value)
{ if ($field == "state")
{ echo "<tr>
<td style=\"text-align: right; font-weight: bold\">Pays</td>
<td><select name='state'>";
$stateName=getStateName();
$stateCode=getStateCode();
for ($n=1;n<=50;$n++)
{ $state=$stateName[$n];
$code=$stateCode[$n];
echo "<option value='$code'";
if ($code==@$_POST['state'])
echo " selected";
echo ">$state\n";
}
echo "</select>";
}
else
{ if (ereg("pass",$field))
$type = "password";
else
$type = "text";
echo "<tr>
<td style=\"text-align: right; font-weight: bold\">$value</td>
<td><input type='$type' name='$field' value=\"".@$$field."\" size='{$length_2[$field]}' maxsize='{$length_2[$field]}'></td>
</tr>";
}
}
?>
<tr>
<td colspan="2" style="text-align:center">
<p style="margin-top:.05in">
<input type="submit" name="Button" value="<?php echo $elements_2['submit']?>">
</p>
</td>
</tr>
</table>
</p>
</form>
</p>
</td>
</tr>
</table>
<hr size="10" noshade>
<div style="text-align:center; font-size:75%"><?php echo $page['bottom']?></div>
</body>
</html>


Fichier fields_login.inc :

<?php

$page = array( "title" => "Page d'identification du client",
"top" => "",
"bottom" => "Envoyez vos questions et vos commentaires à Gregg",
);

$elements_1 = array( "top" => "Clients déjà inscrits : <br><span style=\"font-size: 80%; font-weight: 100%\"><i>Identifiez-vous ici</i></span>",
"bottom"=> "",
"submit"=> "Identification"
);

$elements_2 = array( "top" => "Nouveaux Clients : <br><span style=\"font-size: 80%; font-weight: 100%\"><i>Identifiez-vous ici</i></span>",
"bottom"=> "",
"submit"=> "Inscritpion"
);

$fields_1 = array( "fusername" => "Nom d'utilisateur",
"fpassword" => "Mot de passe"
);

$length_1 = array( "fusername" => "10",
"fpassword" => "10"
);

$fields_2 = array( "user_name" => "Nom d'utilisateur",
"password" => "Mot de passe",
"email" => "Email",
"first-name"=> "Prénom",
"last-name" => "Nom",
"street" => "Adresse",
"city" => "Ville",
"state" => "Pays",
"zip" => "Code Postal",
"phone" => "Téléphone",
"fax" => "Fax"
);

$length_2 = array( "user_name" => "20",
"password" => "8",
"email" => "55",
"first-name"=> "40",
"last-name" => "40",
"street" => "55",
"city" => "40",
"state" => "40",
"zip" => "10",
"phone" => "15",
"fax" => "15"
);
?>



Fichier functions_main.inc :
<?php
function Connect_to_db($filename)
{ include($filename);
$connection = mysqli_connect($host,$user,$password) or die ("Connexion impossible au serveur.");
$db = mysqli_select_db($connection,$database) or die ("Connexion impossible à la base de données.");
return $connection;
}
?>


Fichier functions.inc :
<?php
function getStateCode()
{ $stateCode = array(1 => "AL",
"AK",
"AZ",
"FR",
"UK",
"USA" );
return $stateCode;
}

function getStateName()
{ $stateName = array(1 => "Allemagne",
"Italie",
"France",
"Belgique",
"United Kingdom",
"United States of America" );
return $stateName;
}
?>


Fichier Vars.inc :
<?php
$host = "localhost";
$user = "root";
$password = "";
$database = "clients";
?>


Et voilà, je sais que ce n'est pas très bien vu d'afficher des quantités de lignes de code mais là je vois pas trop comment faire.

Meric pour votre aide en tout cas ;-)

Gregg
0
fabrice11901 Messages postés 787 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 12 juillet 2007 64
23 mai 2006 à 18:12
Re...
Ben je n'ai jamais vu un aussi grand script php pour un espace membre !
je t'avous je n'y comprend rien moi je n'utilise même pas ces fonctions ou as-tu trouvé ce script?
Puis ton message d'erreur, as-tu bien vérifier s'il n'y avait pas de message d'erreur l'ors de la connexion à mysql?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bein en fait je l'ai pris du livre "PHP/MySQL pour les Nuls" et il semble super sécurisé donc c'est pour ça, je l'ai carrément recopié puis débuggé car faute de frappe à gauche à droite comme dans tout bouquin !

Bref tu as sûrement plus d'expérience que moi dans le domaine donc si tu me conseilles de l'abonner pour un autre, je suivrai ton conseil !
0
fabrice11901 Messages postés 787 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 12 juillet 2007 64
23 mai 2006 à 18:27
oui c'est vrai il est bien sécurisé c'est le cas de le dire !
tout dépend ce que tu veux faire :
tu veux simplement un script permettant de faire la vérification de pseudo et mot de passe dans la base de donnée mysql ou un script complé avec ensuite la page réservé aux membres...?
0
Bein en fait ce site propose soit de s'enregistrer soit de se connecter si on a déjà un compte et on arrive ensuite soit sur une page de confirmation d'inscription soit sur une page réservée aux membres si on s'est connecté.

Mais peut-être devrais-je différencier ses 2 scripts ? D'un côté un script d'enregistrement et d'un autre un script offrant la possibilité de se connecter à un espace membre...

Merci pour ton aide et tes conseils.

Gregg
0
fabrice11901 Messages postés 787 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 12 juillet 2007 64
23 mai 2006 à 18:34
Oui je pense que le mieu est de séparer les deux scripts comme moi j'ai fais avec mon site...
Tu sais programmer en php/mysql?
0
Bein je m'y suis mis en Janvier donc je commence à bien me débrouiller, mais j'ai encore un peu de mal à partir de zéro... d'où mon reflexe à aller regarder ce qui se fait dans les bouquins ou sur les forums plutôt que de programmer tout en entier !

Bref on propsoe tellement de scripts différents pour un même sujet qu'il est pas souvent facile de choisir l'un et pas l'autre...
0
fabrice11901 Messages postés 787 Date d'inscription dimanche 31 juillet 2005 Statut Membre Dernière intervention 12 juillet 2007 64
23 mai 2006 à 18:47
1° si tu préfère qu'on face ça par mail webmaster(@)freeonthecity.com (j'ai mi le @ entre () pour éviter les envois de mails par les robots)
parce que ce forum me déplait (la navigation)
0