Notice: Use of undefined constant ...

Répondre
aquievreux
le 15/04/2010 à 11:35
aquievreux
Voici mon code

<?php
/* Programme : Login.php
* Description : Programme de Login pour la section à accés réservé de l'animalerie. Il propose deux options :
* 1 - S'identifier par un couple nom de login/mot de passe
* 2 - Créer un nouveau compte Identificateurs et mots de passe sont conservés dans une base de données MySQL
*
*/

session_start();
include("chiens.inc"); // modifier le nom
switch(@$_POST['do'])
{
case "login":
$cxn = mysqli_connect($host, $user, $password, $database) or die ("Connexion impossible au serveur dans case login");

$sql = "SELECT loginName FROM Member WHERE loginName='$_POST[fusername]'";
$result = mysqli_query($cxn,$sql) or die ("Requête en échec 1.");
$num = mysqli_num_rows($result);

if ($num > 0) // loginname non trouvé
{
$sql = "SELECT loginName FROM Member WHERE loginName='$_POST[fusername]' AND password=md5('$_POST[fpassword]')";
$result2 = mysqli_query($cxn,$sql) or die("Requête en échec2.");
$num2 = mysqli_num_rows($result2);

if ($num2 > 0) // Mot de passe OK
{
$_SESSION['auth'] = "yes";
$logname = $_POST['fusername'];
$_SESSION['logname'] = $logname;
$today = date("Y_m-d h:i:s");
$sql = "INSERT INTO Login (loginName,loginTime) VALUES ('$logname', '$today')";
$result = mysqli_query($cxn,$sql) or die ("INSERT en échec");
header("Location: membre_page.php"); /***** *****/
}
else // mot de passe incorrect
{
$message = "Le nom de Login '$POST[fusername]' existe, mais le mot de passe ne va pas ! Réessayez.<br>";
include("login_form.inc");
}
}
elseif ($num == 0) // Nom de login introuvable
{
$message = "Le nom de login que vous avez saisi n existe pas. Essayez encore.<br>";
include("login_form.inc");
}
break;

case "new":
/* Recherche de champs vide */
foreach($_POST as $field => $value)
{
if ($field != "fax")
{
if ($value == "")
{
$blanks[] = $field;
}
}
}
if (isset($blanks))
{
$message_new = "Champs non saisis. Veuillez les renseigner : ";
foreach($blanks as $value)
{
$message_new = "$value, ";
}
extract($_POST);
include("login_form.inc");
exit();
}

/* Validation des données */
foreach($_POST as $field => $value)
{
if (!empty($value))
{
//if (eregi("name", $field) and !eregi("login", $field))
if (preg_match("/name/i", $field) and !preg_match("/login/i", $field))
//if (stristr($field, "name") and !stristr($field, "login"))
{
//if (!ereg("^[A-Za-z' -]{1,50}$", $value))
if (!preg_match("/^[A-Za-z' -]{1,50}$/i", $value))
//if (!strstr("^[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 (preg_match("/street/i", $field) or preg_match("/addr/i",$field) or preg_match("/city/i", $field))
//if (stristr($field, "street") or stristr($field, "addr") or stristr($field, "city"))
{
//if(!ereg("^[A-Za-z0-9.,' -]{1,50}$",$value))
if(!preg_match("/^[A-Za-z0-9.,' -]{1,50}$/i",$value))
//if(!strstr($value, "^[A-Za-z0-9.,' -]{1,50}$"))
{
$errors[] = "$value est incorrect.";
}
}

//if (eregi("email", $field))
if (preg_match("/email/i", $field))
//if (stristr($field, 'email'))
{
//if (!ereg("^.+@.+\\..+$",$value))
if (!preg_match("/^.+@.+\\..+$/i",$value))
//if (!strstr($value, "^.+@.+\\..+$"))
{
$errors[] = "$value est refusé comme email.";
}
}


} // Fin de if empty
} // Fin de foreach
if (@is_array($errors))
{
$message_new = "";
foreach($errors as $value)
{
$message_new .= $value. " Reessayez<br />";
}
extract($_POST);
include("login_form.inc");
exit();
}

/* Nettoyage des données */
$cxn = mysqli_connect($host, $user, $password, $database);

foreach($_POST as $field => $value)
{
if ($field != "Button" and $field != "do")
{
if ($field == "password")
{
$password = strip_tags(trim($value));
}
else
{
$fields[] = $field;
$value = strip_tags(trim($value));
$values[] = mysqli_real_escape_string($cxn, $value);
$$field = $value;
}
}
}

/* Le nom de login existe t-il deja ? */
$sql = "SELECT loginName FROM Member WHERE loginName = '$loginName'";
$result = mysqli_query($cxn, $sql) or die ("Requete SELECT en echec dans case new");
$num = mysqli_num_rows($result);

if (num > 0)
{
$message_new = "$loginName existe deja. Choisissez en un autre.";
include("login_form.inc");
exit();
}

/* Ajout d un nouveau membre dans la base */
else
{
$today = date("Y-m-d");
$fields_str = implode(",", $fields);
$values_str = implode(",", $values);
$fields_str .=",createDate";
$values_str .='"'.","."md5"."('".$password."')";
$sql = "INSERT INTO Member ";
$sql .="(".$fields_str.")";
$sql .=" VALUES ";
$sql .="(".'"'.$values_str.")";
$result = mysqli_query($cxn, $sql) or die ("Requete INSERT en echec.");
$_SESSION['auth']="yes";
$_SESSION['logname'] = $loginName;

/* Envoyer un email au nouveau membre */
/*
$emess = "Un nouveau compte de membre vient d'être créé.";
$emess .= " Votre identificateur et votre mot de passe sont : ";
$emess .= "\n\n\t$loginName\n\t$password\n\n";
$emess .= "Nous apprecions l interet que vous portez a notre magasin. \n\n";
$subj = Votre nouveau compte :
$mailsnd = mail("$email","$subj","$emess");
header("Location: Nouveau_membre.php");
*/

}
break;

default:
include("login_form.inc");
}
?>


Voici l'erreur qu'il me reste :


Notice: Use of undefined constant num - assumed 'num' in C:\wamp\www\autre\login.php on line 176
Requete INSERT en echec.



Malgrés toute les modifs je ne trouve pas aidez moi svp!!!!!!!!!!!
moogli
le 15/04/2010 à 14:02
moogli
Salut,

Comme ca je ne vois pas trop. Sd serzit bien d'ajouter la requete dans le message d'erreur ligne 174 afin de voir pourquoi la requete echoue.

Le message d'erreur en lui meme indique qu'il n'arrive pas a utiliser du texte comme une constante. En gros cela arrive quand on oublie les ' dans un tableai ou une chaine de caracterz quelconque mais aussi si tu n'a pas mis le $ devant une variable ;)

Donne nous le message d'erreur avec la requete sql que l'on est plus d'infos (a tu d'autre message dans le source html ?)

@+
Il en faut peu pour être heureux !!!!!
aquievreux
le 15/04/2010 à 15:08
aquievreux
C'est bon j'ai trouvé ce n'était pas :

<?php
if (num > 0)
?>


mais :

<?php
if ('num' > 0)
?>
nbourgeo
le 10/06/2010 à 13:57
nbourgeo
Bonjour,

En fait le code que tu devrais avoir est le suivant :

<?php
if ($num > 0)
?>


En effet, tu récupères la variable définie plus haut ($num) pour savoir si ta requête retourne un résultat.

L'erreur que tu avais, venait du fait que comme tu avais marqué :

<?php
if (num > 0)
?>


Php cherchait une constante s'appelant num et qui n'existait pas.

Bye
nbourgeo
nbourgeo
le 10/06/2010 à 14:15
nbourgeo
En relisant ton message, j'ai noté que tu avais une seconde erreur :

Requete INSERT en echec.

Celle-ci vient du code suivant :

$fields_str .=",createDate";  
$values_str .='"'.","."md5"."('".$password."')";
$sql = "INSERT INTO Member ";
$sql .="(".$fields_str.")";
$sql .=" VALUES ";
$sql .="(".'"'.$values_str.")";


Celui-ci devrait être :

$fields_str .="createDate"; // Suppression de la virgule
$values_str .='"'.","."md5"."('".$password."')";
$sql = "INSERT INTO Member ";
$sql .= "(" . $fields_str . ")";
$sql .= " VALUES ";
$sql .= "('" . $values_str . "')";


Il peut encore subsister une erreur dans la définition de $values_str , due à une mauvaise utilisation des simples et doubles quotes. Pour résoudre cela, n'hésites pas à afficher ta requête SQL en faisant par exemple :

echo $sql;


Bye
nbourgeo
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours