Page 1 sur 1

Des erreurs sur l'affiche

Posté : 12 mars 2013, 03:48
par Tricepha
Bonjour à toutes et tous,
Impossible de résoudre mon problème depuis quatre jours. En effet, j'ai l'erreur suivante quand je lance mon programme
Notice: Undefined offset: 1 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 46

Voici le fichier entier:
<?php
// Création d’un nom abrégé de variable
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
?>
<html>
<head>
<title>Le garage de Bob - Commandes clients</title>
</head>
<body>
<h1>Le garage de Bob</h1>
<h2>Commandes clients</h2>
<?php
// Lecture du fichier complet.
// Chaque commande devient un élément du tableau
$commandes = file("$DOCUMENT_ROOT/dossier_source/orders.txt");
// Compte le nombre de commandes dans le tableau
$nbre_de_cdes = count($commandes);

if ($nbre_de_cdes == 0) {
echo "<p><strong>Aucune commande en attente.
Réessayez plus tard.</strong></p>";
}
echo "<table border=\"1\">\n";
echo "<tr><th bgcolor=\"#CCCCFF\">Date commande</th>
<th bgcolor=\"#CCCCFF\">Pneus</th>
<th bgcolor=\"#CCCCFF\">Huiles</th>
<th bgcolor=\"#CCCCFF\">Bougies</th>
<th bgcolor=\"#CCCCFF\">Total</th>
<th bgcolor=\"#CCCCFF\">Adresse</th>
<tr>";


for ($i = 0; $i < $nbre_de_cdes; $i++) {
// Découpage de chaque ligne
$ligne = explode("\t", $commandes[$i]);
// On ne conserve que le nombre d’articles commandés
$ligne[1] = intval($ligne[1]);
$ligne[2] = intval($ligne[2]);
$ligne[3] = intval($ligne[3]);
// Affiche chaque commande
echo "<tr>
<td>".$ligne[0]."</td>
<td align=\"right\">".$ligne[1]."</td>
<td align=\"right\">".$ligne[2]."</td>
<td align=\"right\">".$ligne[3]."</td>
<td align=\"right\">".$ligne[4]."</td>
<td>".$ligne[5]."</td>
</tr>"
;
}
echo "</table>";
?>
</body>
</html>

Merci de votre aide

Re: Des erreurs sur l'affiche

Posté : 12 mars 2013, 08:21
par frsw194
Bonjour,

L'erreur provient du fait que dans la boule "for", tu utilises la variable $nbre_de_cdes pour déterminer le nombre de commandes. or, ta boucle "for" commence à 0. Si tu as 1 commande, la variable $nbre_de_cdes sera à 1 et dont tu bouclera 2 fois : 1 fois pour 0 et une fois pour 1. A ce moment, l'offest dépassera le nombre d'entrées. Il faut boucler de 0 à ($nbre_de_cdes-1) pour que ça fonctionne.

Bon courage.

Olivier

Re: Des erreurs sur l'affiche

Posté : 12 mars 2013, 14:19
par Tricepha
Bonjour Olivier,
Merci pour votre réponse. J'avoue que je n'ai rien pigé. J'ai essayé de remplacer 0 par -1 j'ai toujours 5 erreurs:
1- Notice: Undefined offset: 1 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 46
2- Notice: Undefined offset: 2 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 47
3- Notice: Undefined offset: 3 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 48
4- Notice: Undefined offset: 4 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 56
5- Notice: Undefined offset: 5 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 57

Voici comment mon navigateur affiche l'erreur:

Le garage de Bob

Commandes clients


Date commande Pneus Huiles Bougies Total Adresse
( ! ) Notice: Undefined offset: 1 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 46
Call Stack
# Time Memory Function Location
1 0.0007 254816 {main}( ) ..\vieworders2.php:0

( ! ) Notice: Undefined offset: 2 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 47
Call Stack
# Time Memory Function Location
1 0.0007 254816 {main}( ) ..\vieworders2.php:0

( ! ) Notice: Undefined offset: 3 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 48
Call Stack
# Time Memory Function Location
1 0.0007 254816 {main}( ) ..\vieworders2.php:0

( ! ) Notice: Undefined offset: 4 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 56
Call Stack
# Time Memory Function Location
1 0.0007 254816 {main}( ) ..\vieworders2.php:0

( ! ) Notice: Undefined offset: 5 in C:\wamp\www\Test\Chapitre_3\vieworders2.php on line 57
Call Stack
# Time Memory Function Location
1 0.0007 254816 {main}( ) ..\vieworders2.php:0
20:30, le 31-03-03 4 pneus 1 bidon d'huile 6 bougies 434.00€ 7 place du parc aux lièvres 91000 evry 0 0 0

Re: Des erreurs sur l'affiche

Posté : 12 mars 2013, 14:23
par xTG
Ce qu'il faut faire était écrit en toute lettre :
Il faut boucler de 0 à ($nbre_de_cdes-1) pour que ça fonctionne.

Re: Des erreurs sur l'affiche

Posté : 12 mars 2013, 14:47
par Tricepha
Merci beaucoup Olivier,
Vous êtes amour. Ça fonctionne. Je n'ai plus l'erreur. Seulement le tableau n'est pas rempli dynamiquement.

Re: Des erreurs sur l'affiche

Posté : 12 mars 2013, 16:31
par xTG
Va falloir debugguer.
Regardes ce qu'il y a dans $ligne et dans $commandes[$i] à chaque itération de la boucle.
Voire même regarder ce qu'il y a dans $commandes tout court. Car si file() ne te renvois rien => pas de données et c'est normal. :mrgreen:

Re: Des erreurs sur l'affiche

Posté : 13 mars 2013, 01:15
par Tricepha
Bonsoir 0livier,
Je tenais vraiment à te remercier infiniment de ton aide, car tu m'as permis de voir un peu claire sur le sujet. En fait ma boucle for était correcte:
for ($i = 0; $i < $nbre_de_cdes; $i++)
{
//Découpage de chaque ligne
$ligne = explode("\t", $commandes[$i]);

//On ne conserve que le nombre d'articles commandées
$ligne[1] = intval($ligne[1]);
$ligne[2] = intval($ligne[2]);
$ligne[3] = intval($ligne[3]);

//Affiche chaque commande
echo "<tr>
<td>".$ligne[0]."</td>
<td align=\"right\">".$ligne[1]."</td>
<td align=\"right\">".$ligne[2]."</td>
<td align=\"right\">".$ligne[3]."</td>
<td align=\"right\">".$ligne[4]."</td>
<td>".$ligne[5]."</td>
</td>";
}

En fait l'erreur venait de l'instruction if($nbre_de_cdes ==0)
au lieu de if($nbre_de_cdes ===0)

Enfin pour que: $commandes = file("$DOCUMENT_ROOT/dossier_source/orders.txt"); charge automatiquement le fichier orders.txt dans le tableau ainsi créé, il fallait tabuler les données.

En tout merci encore pour ta disponibilité et au plaisir.