IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Notice: undefined offset


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Notice: undefined offset
    Bonjour,
    Je suis débutant en php et on m'aide à faire un bulletin de note. J'ai un problème avec ce scripte. J'obtiens ce message d'erreur quand je l'ouvre:

    Notice: Undefined offset: 5 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 60

    Notice: Undefined offset: 6 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 60

    Notice: Undefined offset: 7 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 60

    Notice: Undefined offset: 8 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 60

    Notice: Undefined offset: 3 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 100

    Notice: Undefined offset: 3 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 100

    Notice: Undefined offset: 3 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 100

    Notice: Undefined offset: 3 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 100
    S'il y a quelqu'un qui peut m'aider, je vous remercie à l'avance.
    Je mets le scripte en entier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    <?php
     
    	$NoCours    = $_REQUEST['NoCours']; 
     
     
    	// connect to database
     
    	include 'DataBaseSettings.php';
     
    	$connection = mysql_connect($server, $username, $password) or die("Error connecting to database");
    	mysql_select_db($database, $connection);
     
    	$query = 'SELECT Periode FROM periodecourante WHERE Rec=999';
    	$rs = mysql_query($query);
    	$row = mysql_fetch_assoc($rs);
     
    	$semestre = '1s';
    	if ($row ['Periode'] == 2) $table = '2s';
     
    	// on compte le nombre d'élèves
    	$Result = mysql_query('SELECT count(*) FROM elevespoints'.$semestre.' WHERE NoCours='.$NoCours);
    	$NbEleves = mysql_result($Result,0,0);
     
    	$query = 'SELECT (@ROW := @ROW + 1) AS NoLigne, nom, prenom, gr, sex, dob, 
    			  PT1, PT2, PT3, PT4, PT5, PT6, PT7, PT8, 
    			  CN1, CN2, CN3, CN4, CN5, CN6, CN7, CN8, 
    			  PX1, PX2, PX3, PX4, PX5, PX6, PX7, PX8
    			  FROM elevespoints'.$semestre.'
     	   	      JOIN elevespointsdesc'.$semestre.' ON elevespointsdesc'.$semestre.'.NoCours = elevespoints'.$semestre.'.NoCours 
     	   	      JOIN (SELECT @ROW := 0) r
     	   	      WHERE elevespoints'.$semestre.'.NoCours='.$NoCours.' ORDER BY nom';
    	$rs = mysql_query($query);	
     
    	$i = 1;
    	$NbNotesV = array();
    	$TableauNotes = array();
    	$JSon = '{"Notes":[';
     
    	while($row = mysql_fetch_assoc($rs)) {
    		$JSon .= '{';
    		$JSon .= '"NoLigne'.'":"'.$i.'", ';
    		$JSon .= '"nom'.'":"'.$row['nom'].'", ';
    		$JSon .= '"prenom'.'":"'.$row['prenom'].'", ';
    		$JSon .= '"gr'.'":"'.$row['gr'].'", ';
    		$JSon .= '"sex'.'":"'.$row['sex'].'", ';
    		$JSon .= '"dob'.'":"'.$row['dob'].'", ';
     
    		$Somme = 0;
    		$Total = 0;
     
    		for ($j=1;$j<9;$j++) {
     
    			$NbPt = $row ['PT'.$j];
    			$PMax = $row ['PX'.$j];
    			if (floatval($NbPt) != 0 and floatval($PMax) != 0) {
    				$Note = number_format((float)round((floatval($NbPt) / floatval($PMax) * 5) + 1,1), 1, '.', '');
    		        $Note = round($Note * 2) / 2;
     
    				// on compte la compte dans le tableau du nombre de notes verticales
    				$NbNotesV [$j] ++;
     
    				// on rempli le tableau de toutes les notes (ligne, colonne)
    				$TableauNotes[$i][$j] = $Note;
     
    			}
    			else $Note = '';
     
    			// calcul de la moyenne
    			$MoyH = '';
    			if ($Note != '') {
    				$Somme = $Somme + $Note * floatval($row['CN'.$j]);
    				$Total = $Total + floatval($row['CN'.$j]);
    			}
     
    			// on rempli le JSon
    			if ($Note != '') $JSon .= '"NT'.$j.'":"'.number_format($Note, 1, '.', '').'", ';
    			else $JSon .= '"NT'.$j.'":"'.$Note.'", ';
    			if ($Somme != 0) {
    				$MoyH  = round($Somme / $Total,1);
    			}
     
    		} // fin de la boucle sur les colonnes (1 à 9)
     
    		$JSon .= '"MoyH'.'":"'.$MoyH.'", ';
     
    		$JSon = substr($JSon,0,-2);
    		$JSon .= '},';
    		$i++;
     
    	} // fin de la boucle sur le recordSet (les 17 élèves)
     
     
    	// calcul des moyennes verticales
    	// on fait d'abord une boucle de 1 à 9 horizontalement
    	// ce qui fait que la boucle intérieure parcourt la colonne 1 pour les 17 élèves, puis la colonne 2 pour les 17 ..
    	$MoyV=array();
    	$Somme = 0;
    	for ($j=1;$j<9;$j++){
    		for ($k=1;$k<=$NbEleves;$k++){
    			$Somme = $Somme + $TableauNotes[$k][$j];
    			//echo 'j='.$j.' k='.$k.' S='.$Somme.' Note'.$TableauNotes[$k][$j];
       		}
     
    	   if ($Somme != 0) $MoyV[$j]=round($Somme/$NbNotesV[$j],1);
    	   else $MoyV[$j] = '-.-';
    	  // echo 'MoyV='.$MoyV[$j].' NbNV='.$NbNotesV[$j].'<br><br>';
    	   $Somme = 0;
     	}
     
    	// on formate les moyennes verticales (qui sont dans un tableau à une dimension) et on calcule la moyenne horizontale des moyennes verticales
    	$Somme  = 0;
    	$NbMoyV = 0;
     
    	for ($j=1;$j<9;$j++){
    		if ($MoyV[$j] != '-.-') {
    			$MoyV[$j] = number_format($MoyV[$j], 1, '.', '');
    			$Somme = $Somme + $MoyV[$j];
    			$NbMoyV ++;
     
    		}
    	}
     
     
    	// on ajoute la dernière ligne au JSon, celle des moyennes
    	$JSon .='{"NoLigne":"", "nom":"MOYENNE TRAVAIL", "prenom":"", "gr":"", "sex":"", "dob":"", 
    			"NT1":"'.$MoyV[1].'", "NT2":"'.$MoyV[2].'", "NT3":"'.$MoyV[3].'", "NT4":"'.$MoyV[4].'", 
    			"NT5":"'.$MoyV[5].'", "NT6":"'.$MoyV[6].'", "NT7":"'.$MoyV[7].'", "NT8":"'.$MoyV[8].'", 
    			"MoyH":"'.number_format(round($Somme/$NbMoyV,1), 1, '.', '').'"}';
     
    	$JSon .= ']}';
     
    	// return response to client
     
    	echo $JSon;
     
    ?>

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Aux lignes concernées (60 et 100) les index indiqués $j n'existent pas (ils sont incrémentés dans ta boucle).

    Mais bon tu devrais le refaire ton script, c'est un vrai casse tête et il existe une fonction json en php plutôt que de faire cette cuisine.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Merci
    Merci beaucoup pour ta réponse.
    Je voulais faire un array pour contenir tout le tableau [$i] [$j] donc contenir toutes les notes, c'est pour ça que j'utilise $j. Mais je ne comprend pas quand tu dis que $j n'existe pas.
    Tu peux m'expliquer un peu plus, comment faire avec la fonction json.
    Je te remercie d'avance, c'est très sympa.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Notice: Undefined offset: 5 in C:\xampp\htdocs\NotesJM5\ElevesNotes.php on line 60
    La ligne 60 étant a priori $NbNotesV [$j] ++;, cela signifie que tu n'as aucun élément dans ton table $NbNotesV pour l'index 5.
    ça marche uniquement parce que PHP gère l'incrémentation des variables ayant une valeur null en renvoyant 1.

    Pour bien faire, il faudrait :
    - soit tu initialises ton tableau avec des 0 partout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // initialisation du tableau :
    $NbNotesV = array_fill(1, 8, 0);
    - soit tu vérifies si il existe une valeur pour l'index avant d'incrémenter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // on compte la compte dans le tableau du nombre de notes verticales
    if (!isset($NbNotesV [$j])) {
        $NbNotesV [$j] = 0;
    }
    $NbNotesV [$j] ++;
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par cristyen Voir le message
    Tu peux m'expliquer un peu plus, comment faire avec la fonction json.
    Je ne connais pas la logique de ton code donc je peux pas te donner des détails.
    L'idée de base est de récupérer les données issues de ta requête dans un ou plusieurs tableaux puis de traiter tes opérations (moyennes) à l'aide des fonctions sur les tableaux et de créer la structure de ton tableau final toujours avec les fonctions sur les tableaux pour pouvoir faire finalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo json_encode($tab);
    Quand on veut faire un tableau, autant utiliser les fonctions sur les tableaux, c'est fait pour ça
    Ensuite json_encode produira le tableau json

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup Celira, ta correction fonctionne super bien, et comment t'aurais fait pour la ligne 100?

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour ta réponse, je dois encore étudier en profondeur json pour faire ce que tu me dis. Je te remercie c'est très sympa.
    Si tu as un site tutoriel pour débutant à me proposer. Merci

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Ce ne serait pas json qu'il faudrait étudier mais les fonctions sur les tableaux. Une fois ton tableau final créé il te suffit de faire "json_encode($mon_tab)" pour avoir la représentation json de "$mon_tab".

    Cela prend un certain temps au début et ce n'est peut-être pas le moment, mais si tu veux poursuivre en php il sera nécessaire de connaître un "minimum" (un gros minimum) la manipulation sur les tableaux. Tu trouveras des tutos en rentrant "tableau php tuto" dans google, et je t'ai mis ci-dessus un lien vers la doc.

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2013
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    C'est super sympa ABCIWEB, je te remercie pour ton aide.

Discussions similaires

  1. [MySQL] Notice: Undefined offset
    Par gaetanc15 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/04/2009, 16h16
  2. [Tableaux] Notice: Undefined offset
    Par KOogar dans le forum Langage
    Réponses: 16
    Dernier message: 02/02/2008, 02h44
  3. [Système] Notice: Undefined offset
    Par noname_971 dans le forum Langage
    Réponses: 2
    Dernier message: 22/01/2008, 14h02
  4. [Tableaux] Notice: Undefined offset: 5 in
    Par fast462 dans le forum Langage
    Réponses: 3
    Dernier message: 30/05/2007, 10h08
  5. erreur: "Notice: Undefined offset:"
    Par Sh1v3r dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2006, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo