Variable PHP

Résolu/Fermé
DAG - 17 juil. 2008 à 10:17
 DAG - 17 juil. 2008 à 11:16
Bonjour,

J'ai un problème avec un tableau en PHP. J'ai écris le code suivant :

$lignes = split("\n", $content);

$last_line = 1;

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) 
{
	 $last_line++;
}
echo "Derniere ligne = ".$last_line;
echo $lignes[0]."<br><br>";

echo "\$last_line : ".$lignes[$last_line];


Le echo "Derniere ligne = ".$last_line; m'affiche bien le numéro de la dernière ligne.
Le echo $lignes[0]."<br><br>"; m'affiche bien la première ligne.
Par contre le echo "\$last_line : ".$lignes[$last_line]; n'affiche rien du tout. Alors
que si fait un echo "\$last_line : ".$lignes[50402]; (50402 est la derniere ligne) il
m'affiche le bon résultat...

Quelqu'un sait pourquoi ?

Merci d'avance

9 réponses

Passarinho44 Messages postés 963 Date d'inscription mercredi 28 mai 2008 Statut Contributeur Dernière intervention 13 juin 2012 132
17 juil. 2008 à 10:23
Bonjour,

Il faut que tu affiches $last_ligne-1 car la première ligne est 0 et non pas 1.
0
Si j'essais d'afficher :
echo "\$last_line : ".$lignes[($last_line - 1)];

Rien ne s'affiche...
Je ne comprend vraiment pas. Car si je fais :
echo "\$last_line : ($last_line - 1);

Il m'affiche bien un numéro.
0
Passarinho44 Messages postés 963 Date d'inscription mercredi 28 mai 2008 Statut Contributeur Dernière intervention 13 juin 2012 132
17 juil. 2008 à 10:32
Essaie d'enlever les parenthèses.

Tu es sûr que ton tableau contient bien quelque chose à afficher à la dernière ligne?
Tu sais le résultat que tu veux obtenir?
0
Actuellement je connais le résultat que je veux obtenir car j'ai le fichier Excel sous les yeux. Il y a environs 50000 lignes. Et je doit mettre ce fichier dans une base MySQL. Mais ce fichier est appelé à changer...
Donc j'arrive bien a créer ma table avec la premiere ligne du fichier Excel pour créer mes champs. Et ensuite j'arrive bien a parcourir le fichier Excel en effectuant un foreach pour former ma requete SQL.
Le probleme, c'est qu'il y a une ligne : la derniere de tous les fichier qui est en gros le résumé du tableau que je voudrais virer.
Donc je cherche a trouver cette ligne pour lui faire un :
unset($lignes[$DERNIERE_LIGNE]);

Donc pour résumer :

En gros si je fais :
echo "\$last_line : ".$lignes[($last_line - 1)];
Il ne m'affiche pas le contenu de la ligne -> il ne m'affiche rien (a part "$last_line :")

Si je fais :
echo "($last_line - 1);
Il m'affiche bien le numéro de la ligne. Il y a donc bien le numéro de ligne dans la variable...

Et si je fais :
echo "\$last_line : ".$lignes[50203];
Il m'affiche bien le contenu de ma ligne !

Je ne comprend rien ! Si le numéro de ligne est contenu dans $last_line, alors $lignes[($last_line - 1)]; devrait bien contenir la ligne numéro $last_line (50203) et m'afficher le contenu de la ligne $last_line !? non ?

Ou alors, y a-t-il quelque chose que je n'est pas compris ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Passarinho44 Messages postés 963 Date d'inscription mercredi 28 mai 2008 Statut Contributeur Dernière intervention 13 juin 2012 132
17 juil. 2008 à 10:46
Essaie en enlevant les parenthèses (même si je n'y crois pas vraiment mais on ne sait jamais ... )

Sinon ça me parait vraiment bizarre comme problème.

Sinon essaie :
$last_line_def = ($last_line - 1);
puis :
echo lignes[$last_line_def];
0
Ouais, ça marche comme tu me dis de faire... C'est fou ! Je ne comprend pas pourquoi !

echo ($last_line-1);
echo "<br><br>";
echo ($last_line-2);

$last_line_def = $last_line-1;
echo $lignes[$last_line_def];
echo "<br><br>";
$last_line_def = $last_line-2;
echo $lignes[$last_line_def];


A la ligne $last_line-1 : ça ne m'affiche rien, car c'est une ligne blanche je pense. Ou alors parce que lui commence a 0 et du coup il y a un décalage.
Et la ligne $last_line-2 m'affiche bien ma dernière ligne.

Donc je vais faire comme tu me dis. Mais j'aurais bien aimé comprendre !

En tous cas merci beaucoup pour le coup de main ! A+
0
Passarinho44 Messages postés 963 Date d'inscription mercredi 28 mai 2008 Statut Contributeur Dernière intervention 13 juin 2012 132
17 juil. 2008 à 10:59
Essaie tout simplement

echo $lignes[$last_line-2];

Ca devrait marcher!
0
Oui... ça marche !
Pourtant j'avais déjà fait ce test : c'est l'objet de mon post sur ce forum...!
Je ne dois pas être bien réveillé !

Merci à toi !
0
Passarinho44 Messages postés 963 Date d'inscription mercredi 28 mai 2008 Statut Contributeur Dernière intervention 13 juin 2012 132
17 juil. 2008 à 11:10
Ouais, il est encore un peu tôt ! :p

Content d'avoir pû t'aider !

Bonne continuation pour ton PHP =)

A+



EDIT : Pense à cocher "problème résolu" ;)
0
Oui ! :-)

Si ça intéresse quelqu'un je dépose le code :

<?php
include 'connexion_bdd.php';

$file = $_FILES['file']['tmp_name'];

$content = file_get_contents($file,'r');
$lignes = split("\n", $content);

$handle = fopen($file, "r");

$last_line = 1;

while (($data = fgetcsv($handle, 0, ";")) !== FALSE) 
{
	 $last_line++;
}

unset($lignes[0]);
unset($lignes[$last_line-1]);
unset($lignes[$last_line-2]);


foreach($lignes as $ligne)
{
	$values = explode(";",$ligne);
	$statement = "INSERT INTO tabletampon_rh_file ($champs1, $champs2, $champs3, $champs4) VALUES(";
	foreach($values as $value){
		$value = trim($value); // suppression des espaces au début et à la fin
		$value = str_replace("'","\'",$value); // echappement devant les simples quotes
		$statement .= "'$value',";
	}
	$statement = substr($statement,0,strlen($statement)-1);
	$statement.= ");";
	echo $statement."<br>";
}
fclose($handle);
mysql_query($statement) or die('<br>Erreur SQL !<br>'.$sql1.'<br>'.mysql_error());
?>



Il permet de rentrer toutes les valeurs d'un fichier Excel, sans la première ligne de celui ci (car je m'en sert pour créer la base dans une autre fonction). Et sans les 2 dernières lignes.
Il faut savoir combien il y a de champs...Eh oui tout n'est pas automatique...!
0