Page 1 sur 1

Fonction ok en "production" mais pas sous EasyPHP1

Posté : 23 juin 2008, 23:16
par romca
Salut à tous,
Voilà j'ai un script de tableau dynamique qui ne fonctionne pas avec EasyPHP1.8 mais qui fonctionne avec les composants Apache, MySQL, Php et Phpmyadmin installés séparément, plus exactement
Apache Tomcat version 2.0.63, version pour Windows (x.32).
MySQL version 5.0.51b-win32.
module de Php version 5-2.5-win32
PhPMyAdmin version 2.6.11

C'est peut être une erreur de version mais j'aimerais que cela fonctionne aussi avec easyPhp1.8 pour faire une demo.

Avec la EasyPHP j'ai une erreur d'index à la ligne 37
Notice: Undefined index: in c:\program files\easyphp1-8\www\scriptsp\TableauDynamique.php on line 37
La ligne 37 est celle ci:
$tableau=$tableau.'<td>'.$ligneResult[$NomChamp[$j]].'</td>';// On créé toutes les cellules dans la même ligne 
+ une erreur de Warning mais je pense qui est du à la 1ère erreur:
Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\scriptsp\recherche4_zonegestion.php:4) in c:\program files\easyphp1-8\www\scriptsp\recherche4_zonegestion.php on line 25
Le code entier de la fonction du tableau dynamique est :
<?php
// Fonction du tableau dynamique qui se cré tout seul en fonction des attributs données dans la requetes et du nombre de lignes	
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function Affichtab($var_result)
{	
	// Echo de test: echo " Test ok de la fonction Affichtab()".'<br>';
	$nbreLignes=mysql_num_rows($var_result);// On compte le nombre de lignes du résultat de la requete pour vérifier s'il y a des résultats
	if($nbreLignes=="0") { // S'il n'y a pas de résultats on affiche un message
	$tableau1='<font color="red">'." Il n'y aucuns résultats a votre demande".'<font>';
	return $tableau1;
	exit();
	}	
	// Echo de test: echo $nbreLignes.'<br>';
	$nbreChamps=mysql_num_fields($var_result);	// On compte le nombre de champs dans la BDD (le nbre de colonnes)
	// echo de test: echo $nbreChamps.'<br>';
	
	$tableau='<table border=1>'; // Construction du début du tableau
	// On va créér la 1ère ligne du tableau avec le nom des colonnes de la table obtenue par la requete
	$tableau=$tableau.'<tr>';
		for ($j=0;$j<=$nbreChamps;$j++)// Sur la i ème ligne on va insèrer le nom des champs de la table
		{	
			$Champ=mysql_fetch_field($var_result);//mysql_fetch_field récupére des paramètres divers comme le nom des champ
			$NomChamp[$j]=$Champ->name; // recupération du nom des champs da la table obtenue après la requete 
			$tableau=$tableau.'<td><b>'.$NomChamp[$j].'<b></td>';
					
		}
		$tableau=$tableau.'</tr>';// On vient de  créér la 1ère ligne avec le nom des champs
			
	// Création du tableau des résultats
	// A chaque ligne "ligneResult" on va insérer les valeurs des colonnes "j" récupérées dans la BDDD
	while ($ligneResult=mysql_fetch_assoc($var_result))// On charge le pointeur de la ligne de résultat.
	//mysql_fetch_assoc permet d'adresser le tableau à partir de nom du champ de la colonne.
	{
		$tableau=$tableau.'<tr>'; 
		for ($j=0;$j<=$nbreChamps;$j++) // On boucle sur la j ème colonnes 
        {
            $tableau=$tableau.'<td>'.$ligneResult[$NomChamp[$j]].'</td>';// On créé toutes les cellules dans la même ligne 
        } 
		$tableau=$tableau.'</tr>';// Fin de la jème ligne complète		
	}	
	$tableau=$tableau.'</table>';
	//echo de test: echo $tableau;
	return $tableau; // renvoi da la fonction du tableau complet		
	mysql_free_result ($var_result);
	exit();
	
}	
?>
Si quelqu'un pourrait m'aider, merci.

Posté : 23 juin 2008, 23:24
par mcorgnet
juste avant ta ligne, mets :
$tableau = "";

Posté : 23 juin 2008, 23:27
par Ryle
D'après php, tu fais appel ligne 37 à un index d'un tableau alors que celui-ci n'existe pas ($NomChamp[$j] ou $ligneResult[$NomChamp[$j]]).

Tu dois probablement avoir le même problème en production (y a pas de raison), si cette dernière ne t'en informe pas, c'est très probablement parce que les avertissements sont désactivés.

Deux solutions s'offrent donc à toi, configurer ton easyphp pour qu'il garde sous silence les avertissement (modifier dans le php.ini la propriété error_reporting, ou la modifier avec la fonction éponyme de php), ou bien, corriger ton code pour que cela n'arrive pas ;)

La deuxième solution étant vraissemblablement la meilleure, il faut essayer de voir quel index est appelé alors qu'il n'existe pas... à première vu, je pencherais pour le dernier $j. En effet, si tu boucle de $j=0 à $j<=$nbreChamps, alors tu vas avoir $nbreChamps+1 itération.. et c'est une de trop :)
Un "inférieur strictement" ($j=0;$j<$nbreChamps) devrait te débarasser du message :)

Posté : 24 juin 2008, 00:00
par romca
Salut,
je préfère aussi la 2ème solution...
Merci oui en effet il y avait une itération en trop, j'ai enlevé le = de <= et c'est nickel.
J'ai résolu également le Warning... J'avais mis avant la balise "<?php" les balises <html><body> qui ne servaient en plus à rien (dans le script de recherche "recherche4_zonegestion.php:4").

merci aussi pour les autres infos.

A+