Notice: Undefined index: num_client

Répondre
aquievreux
le 21/04/2010 à 09:47
aquievreux
Voici mon code :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Antivirus</title>

</head>

<body>

<?php
session_start();

if (@$_SESSION['auth'] != "yes")
{
header("Location: login.php");
exit();
}

include("chiens.inc");
$cxn = mysqli_connect($host, $user, $password, $database) or die ("Connexion en échec");
$sql = "SELECT firstName,lastName FROM member WHERE loginName='{$_SESSION['logname']}'";
$result = mysqli_query($cxn,$sql) or die ("Requete SELECT en échec dans Nouveau_Membre");
$row = mysqli_fetch_assoc($result);
extract($row);
echo "<html>
<head><title>Fiche</title></head>
<body>
<h2 style='margin-top: .7in; text-align: left'>
$firstName $lastName</h2>\n";
?>


<h1 align="center"><strong><u>Donnees client pour antivirus :</u></strong></h1>
<p align="center">&nbsp;</p>

<h1><u><strong>Client :</strong></u></h1>
<h3>Numéro : <?php echo $_POST['num_client']; ?> </h3>
<h3>Nom : <?php echo $_POST['nom_client']; ?> </h3>
<h3>Prénom : <?php echo $_POST['prenom_client']; ?> </h3>
<h3>Adresse : <?php echo $_POST['adresse_client']; ?> </h3>
<h3>Téléphone : <?php echo $_POST['tel_client']; ?> </h3>
<h3>Mail : <?php echo $_POST['mail_client']; ?> </h3>
<h3>Date d'achat : <?php echo $_POST['date_achat_client']; ?> </h3>
<h3>Date d'expiration : <?php echo $_POST['date_expir_client']; ?> </h3>


<div id="corps">

<?php

try
{
$bdd = new PDO('mysql:host=localhost;dbname=antivirus','root','');
}
catch(Exception $e)
{
die('Erreur : ' .$e->getMessage());
}

$num_client = $_POST["num_client"];
$nom_client = $_POST["nom_client"];
$prenom_client = $_POST["prenom_client"];
$adresse_client = $_POST["adresse_client"];
$tel_client = $_POST["tel_client"];
$mail_client = $_POST["mail_client"];
$date_achat_client = $_POST["date_achat_client"];
$date_expir_client = $_POST["date_expir_client"];

try
{
$resultat1 = $bdd->prepare("insert into client (num_client, nom_client, prenom_client, adresse_client, tel_client, mail_client, date_achat_client, date_expir_client) values(:num_client, :nom_client , :prenom_client , :adresse_client, :tel_client, :mail_client, :date_achat_client, :date_expir_client)") or die(print_r($bdd->errorInfo()));
$resultat1->execute(array(
'num_client' => $_POST['num_client'],
'nom_client' => $_POST['nom_client'],
'prenom_client' => $_POST['prenom_client'],
'adresse_client' => $_POST['adresse_client'],
'tel_client' => $_POST['tel_client'],
'mail_client' => $_POST['mail_client'],
'date_achat_client' => $_POST['date_achat_client'],
'date_expir_client' => $_POST['date_expir_client'],
)) or die(print_r($bdd->errorInfo()));
}
catch(Exception $e)
{
('Erreur1 : ' .$e->getMessage());
}


?>
</div>


</body>
</html>


Le problème que j'ai c'est qu'il m'affiche le message d'erreur suivant :


Notice: Undefined index: num_client in C:\wamp\www\antivirus\donnees.php on line 61

et ce pour chaque variable.

Merci de m'aider!!!!!!!!
LupusMic
le 21/04/2010 à 10:30
LupusMic
C'est normal. Une erreur de niveau E_NOTICE est déclenchée lorsqu'on tente d'accéder à un indice non-défini d'un tableau.

La solution la plus stupide est d'utiliser l'opérateur silencieux @. C'est stupide pour tout un tas de raisons.

Une première solution correcte est d'initialiser un tableau dont tu garanti qu'il aura les index attendus.

<?php

function array_get(& $array, $key, $default = '')
{
return isset($array[$key]) ? $array[$key] : $default ;
}

function client_reception($requete)
{
$filtre = array() ;

// Récupération des données
$filtre['num_client'] = array_get($requete, 'num_client']) ;

return $filtre ;
}


$filtre = client_reception($requete) ;


Bien sûr, on a pas encore géré les problèmes liés à la sécurité.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
aquievreux
le 21/04/2010 à 10:40
aquievreux
Merci mais malgrés le code que t m'as donné il y a une erreur revoici le code :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Antivirus</title>

</head>

<body>

<?php
session_start();

if (@$_SESSION['auth'] != "yes")
{
header("Location: login.php");
exit();
}

include("chiens.inc");
$cxn = mysqli_connect($host, $user, $password, $database) or die ("Connexion en échec");
$sql = "SELECT firstName,lastName FROM Member WHERE loginName='{$_SESSION['logname']}'";
$result = mysqli_query($cxn,$sql) or die ("Requete SELECT en échec dans Nouveau_Membre");
$row = mysqli_fetch_assoc($result);
extract($row);
echo "<html>
<head><title>Fiche</title></head>
<body>
<h2 style='margin-top: .7in; text-align: left'>
$firstName $lastName</h2>\n";
?>


<form action="deco.php" method="POST">
<input type="submit" value="Deconnexion">
</form>

<?php

function array_get(& $array, $key, $default = '')
{
return isset($array[$key]) ? $array[$key] : $default ;
}

function client_reception($requete)
{
$filtre = array() ;

// Récupération des données
$filtre['num_client'] = array_get($requete, 'num_client']) ;
$filtre['nom_client'] = array_get($requete, 'nom_client']) ;
$filtre['prenom_client'] = array_get($requete, 'prenom_client']) ;
$filtre['adresse_client'] = array_get($requete, 'adresse_client']) ;
$filtre['tel_client'] = array_get($requete, 'tel_client']) ;
$filtre['mail_client'] = array_get($requete, 'mail_client']) ;
$filtre['date_achat_client'] = array_get($requete, 'date_achat_client']) ;
$filtre['date_expir_client'] = array_get($requete, 'date_expir_client']) ;

return $filtre ;
}


$filtre = client_reception($requete) ;
?>

<h1 align="center"><strong><u>Donnees client pour antivirus :</u></strong></h1>
<p align="center">&nbsp;</p>

<h1><u><strong>Client :</strong></u></h1>
<h3>Numero : <?php echo $_POST['num_client']; ?> </h3>
<h3>Nom : <?php echo $_POST['nom_client']; ?> </h3>
<h3>Prenom : <?php echo $_POST['prenom_client']; ?> </h3>
<h3>Adresse : <?php echo $_POST['adresse_client']; ?> </h3>
<h3>Téléphone : <?php echo $_POST['tel_client']; ?> </h3>
<h3>Mail : <?php echo $_POST['mail_client']; ?> </h3>
<h3>Date d'achat : <?php echo $_POST['date_achat_client']; ?> </h3>
<h3>Date d'expiration : <?php echo $_POST['date_expir_client']; ?> </h3>


<div id="corps">

<?php

try
{
$bdd = new PDO('mysql:host=localhost;dbname=antivirus','root','');
}
catch(Exception $e)
{
die('Erreur : ' .$e->getMessage());
}


$num_client = $_POST["num_client"];
$nom_client = $_POST["nom_client"];
$prenom_client = $_POST["prenom_client"];
$adresse_client = $_POST["adresse_client"];
$tel_client = $_POST["tel_client"];
$mail_client = $_POST["mail_client"];
$date_achat_client = $_POST["date_achat_client"];
$date_expir_client = $_POST["date_expir_client"];

try
{
$resultat1 = $bdd->prepare("insert into client (num_client, nom_client, prenom_client, adresse_client, tel_client, mail_client, date_achat_client, date_expir_client) values(:num_client, :nom_client , :prenom_client , :adresse_client, :tel_client, :mail_client, :date_achat_client, :date_expir_client)") or die(print_r($bdd->errorInfo()));
$resultat1->execute(array(
'num_client' => $_POST['num_client'],
'nom_client' => $_POST['nom_client'],
'prenom_client' => $_POST['prenom_client'],
'adresse_client' => $_POST['adresse_client'],
'tel_client' => $_POST['tel_client'],
'mail_client' => $_POST['mail_client'],
'date_achat_client' => $_POST['date_achat_client'],
'date_expir_client' => $_POST['date_expir_client'],
)) or die(print_r($bdd->errorInfo()));
}
catch(Exception $e)
{
('Erreur1 : ' .$e->getMessage());
}


?>
</div>


</body>
</html>


et voici l'erreur :

Parse error: parse error in C:\wamp\www\antivirus\donnees.php on line 50

la ligne 50 correspond à :

$filtre['num_client'] = array_get($requete, 'num_client']) ;
LA GLOBULE
le 21/04/2010 à 10:53
LA GLOBULE
Vire le crochet dans $filtre['num_client'] = array_get($requete, 'num_client') ;
aquievreux
le 21/04/2010 à 10:57
aquievreux
Merci j'avais pas fais attention donc désormais voici mes erreurs :

Notice: Undefined variable: requete in C:\wamp\www\antivirus\donnees.php on line 63

avec la ligne 63 qui correspond à :

$filtre = client_reception($requete) ;

Notice: Undefined index: num_client in C:\wamp\www\antivirus\donnees.php on line 70

avec la ligne 70 qui correspond à :

<h3>Numero : <?php echo $_POST['num_client']; ?> </h3>

Et cette erreur se répéte a chaque variable.
aquievreux
le 21/04/2010 à 14:03
aquievreux
En remplacant comme tu me le dis je garde la même erreur initiale :

Notice: Undefined index: num_client in C:\wamp\www\antivirus\donnees.php on line 70

avec la ligne 70 qui correspond à :

<h3>Numero : <?php echo $_POST['num_client']; ?> </h3>

Et cette erreur se répéte a chaque variable.
dark_nemo
le 21/04/2010 à 19:02
dark_nemo
Tu cherches à afficher $_POST['num_client']; alors que celui-ci n'a pas été définit. Donc php te le dit.

Juste un truc en passant. C'est super dangereux d'afficher les données non filtré comme ça. Tu t'exposes à pas mal de problèmes.

Je t'invite à regarder du coté de filter_var et filter_array pour filtrer un minimum tes données.

Tu peux aussi utiliser le bon vieux strip_tags qui élimine les balises.

Regarde aussi du coté de htmlentities avant d'afficher tes données, ça transforme les caractères spéciaux en entitiés html.
ça devrait t'aider un peu
LupusMic
le 21/04/2010 à 20:42
LupusMic
(aquievreux) Au temps pour moi, je n'ai pas testé, et j'ai oublié d'expliquer.

Je vais repaster en ajoutant quelques commentaires :
<?php

/**
* \param array& $array Référence sur le tableau inspecté
* \param (string|int) $key Clé ou index du tableau
* \param mixed $default Valeur à retourner en cas d'absence de la valeur
* \return mixed Valeur associée à la clé dans le tableau, ou la
* valeur par défaut.
*/
function array_get(& $array, $key, $default = '')
{
return isset($array[$key]) ? $array[$key] : $default ;
}

/** Requerche les données associées à un client dans un tableau.
* \param array& $array Référence sur le tableau issu de la requête du
* formulaire de soumission.
* \return array Le tableau contenant les données pertinentes.
*/
function client_reception(& $requete)
{
$filtre = array() ;

// Récupération des données
$filtre['num'] = array_get($requete, 'num_client') ;
$filtre['prenom'] = array_get($requete, 'prenom_client') ;
/* ... la suite des attributs à récupérer */
$filtre['date_expir'] = array_get($requete, 'date_expir_client') ;


return $filtre ;
}


// La fonction client_reception garanti que l'ensemble des attributs nécessairent au
// concept de client sont définis, et initialisés.
$client = client_reception($_POST) ;

// À partir de là, tu utilises $client pour afficher et manipuler les données issues du
// formulaire.

export($client) ;
echo $nom ;

export($client, EXTR_OVERWRITE | EXTR_PREFIX_ALL, 'client_') ;
echo $client_nom ;


(dark_nemo) strip_tags n'est pas une bonne idée, ça introduit plus de bogues que ce n'est pratique. La seule solution qui vaille le coup, à mon sens, c'est htmlentities (auquel tu as fait référence) et htmlspecialchars. Quand à filter_var, ce n'est pas destiné à sécuriser les données, mais je crois que c'est un problème qui sort du cadre de la question de notre amie.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

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