Fichier vide

Fermé
missjack Messages postés 10 Date d'inscription mercredi 14 mai 2008 Statut Membre Dernière intervention 18 novembre 2013 - 16 mai 2008 à 09:10
missjack Messages postés 10 Date d'inscription mercredi 14 mai 2008 Statut Membre Dernière intervention 18 novembre 2013 - 26 mai 2008 à 14:27
Bonjour,
voila mon code récupère les infos de ma table et selon les différentes informations que j'ai placé dans un switch, j'effectue différentes actions. Une fois cela fais je récupère toutes ces infos, je les mets en forme et je dois écrire toutes ces infos dans un fichier texte. Malheureusement le fichier texte me renvoit des crochets et pas les infos récupérées précedemment. Je ne vois pas tout pourrais venir le problème , si quelqu'un à une solution je suis preneuse.
merci d'avance pour la réponse.
voici mon code :
//Création du fichier
$nomFic = "EDI_{$_SESSION['idUser']}.txt";
unlink ($nomFic);
copy ("vide.txt",$nomFic);
$file = fopen($nomFic,"w");

// Enregistrement d'entête D1
//=======================================================================

$char[] = array();
$cptChar = 0;

//début modif

$req = "SELECT * FROM messagese,oa,societe WHERE MESCODE='$mescode'
AND MESTYPENR='type1' AND OANOA='$noa'";
$res = mysql_query($req) or die ("erreur $req ");
while($mes = mysql_fetch_object($res))
{

// 1°) Remplissage de la valeur du champ
// -----------------------------------------------------------------------
$mesvaleur = $mes->MESVALEUR;
$mescode = $mes->MESCODE;
$socTabEm = array();
$socTabEm = getSociete($chargeur);
$cdeTabEm = array();
$cdeTabEm = getCommande($cdeId);


switch($mescode)
{
case 'siret_emetteur' :
$varw = $socTabEm[6];
break;

case 'nom_emeteur' :
$varw = $socTabEm[0];
break;

case 'siret_transporteur':
$varw = $socTabEm[6];
break;

case 'nom_transporteur':
$varw = $socTabEm[0];
break;

case 'ligne_adresse1' :
$varw = $socTabEm[14];
break;

case 'ligne_adresse2' :
$varw = $socTabEm[15];
break;

case 'cp' :
$varw = $socTabEm[16];
break;

case 'ville' :
$varw = $socTabEm[17];
break;

case 'pays' :
$varw = $socTabEm[18];
break;

case 'ntelephone' :
$varw = $socTabEm[1];
break;

case 'date_enlev_demande' :
$varw = $cdeTabEm[14];
break;

case 'date_enlev_tot' :
$varw = $cdeTabEm[18];
break;

case 'date_enlev_tard' :
$varw = $cdeTabEm[19];
break;


}


if ($mesvaleur = "")
{
$varw = $mesvaleur;
}



// 2°) Mise en forme dans le buffer de sortie
// -----------------------------------------------------------------------
$mesdeb = $mes->MESDEBUT;
$mesfin = $mes->MESFIN;
$meslong = $mes->MESLONG;
for ($i=$mesdeb; $i<=$mesfin; $i++)
{
$j = $i - $mesdeb + 1;
if (substr($varw, $j, 1) != "")
{
$char[$i] = substr($varw, $j, 1);
}
else $char[$i] = " ";
}

$enreg = "";
for ($i=$mesdeb; $i<=$mesfin; $i++)
{
$enreg.=$char[$i];
}
}

fwrite($file,$enreg);
fwrite($file,"\n");
fclose($file);
A voir également:

8 réponses

macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
16 mai 2008 à 09:47
Bonjour.

C'est du php ?

if ($mesvaleur = "")
{
$varw = $mesvaleur;
} 


Le problème est là :
SI (AFFECTER "" à $mesvaleur)
ALORS AFFECTER $mesvaleur (qui vaut donc "") à $varw

C'est une faute courante (quand j'ai un bug, c'est le premier truc que je vérifie :-O )
Pour effectuer une comparaison, il faut un double égal.
if ($mesvaleur == "")
0
merci pour cette réponse aussi rapide mais g fait une bourde :( ce n'est pas
if ($mesvaleurs ="")
{
$var = $mesvaleur;
}
mais if ($valeurs != "")
{
$var = $mesvaleur;
}

et même en mettant un == cela ne fonctionne pas non plus
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
16 mai 2008 à 13:52
Pour débugger, mets des echo régulièrement, pour voir le contenu de tes variables.

Juste avant le 2ème point, affiche la valeur de $varw, et après affiche le contenu de $char et $enreg (voire des autres variables)...

Au niveau de ta Mise en forme, tu essaies de faire quoi, au juste ? J'ai l'impression que tu te compliques la vie, là...
0
missjack Messages postés 10 Date d'inscription mercredi 14 mai 2008 Statut Membre Dernière intervention 18 novembre 2013
20 mai 2008 à 15:35
Voila j'ai trouvé d'ou vient le problème lorsque je fais un echo sur mon switch, ma variable $varw récupère bien les infos dans la table et les affiche mais lorsque je fais un echo sur $varw dans mon if : là ma variable $varw est vide ; elle ne renvoie rien du tout . Je ne vois pas d'ou vient le problème , peut etre manque-t-il un bout de code qui permettrait de récupérer les infos de ma variable $varw dans mon switch?
Pour répondre à ta question macgawel , ma fonction est censée afficher les infos les unes en dessous des autres selon la longueur qui est indiquée dans ma table en gros cela donne :
1 nom de l'emmeteur
2 siret de la societe
.....
et ce n'est pas moi qui veut le faire comme ca c'est mon patron .
voila si quelqu'un à une solution ce serait vraiment géniale , pendant ce temps la je continue de chercher.
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
20 mai 2008 à 15:48
Essayes de faire :

if ($mesvaleur != "")
{
   echo $mesvaleur;
   $varw = $mesvaleur;
   echo $varw;
} 


Tout ton code est bien dans le même fichier ?
0
missjack Messages postés 10 Date d'inscription mercredi 14 mai 2008 Statut Membre Dernière intervention 18 novembre 2013 > macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008
26 mai 2008 à 10:21
le problème vient de ma variable $varw , elle est remplie dans mon switch mais elle est vide dans mon if.
0

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

Posez votre question
Oui tout mon code est bien dans le même fichier ; de plus je précise une petite chose dans ma table j'ai une colonne MESVALEUR et une MESCODE . Dans la colonne MESVALEUR , je n'ai qu'une seule valeur D1 et dans la colonne MESVALEUR j'ai toutes les valeurs qui sont dans le switch. Le but de mon ficher est que selon les infos de mon switch je récupère des infos par rapport à celle-ci dans d'autre table.
J'ai tester ce que tu m'a dis mais j'avais déjà essayer et il me retourne seulement la valeur D1 qui est dans la colonne MESVALEUR et $varw est vide.
Voila en espérant que cela t'éclaire un peu car moi je sèche.
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
26 mai 2008 à 10:33
Est-ce que tu peux faire un copier-coller de ton code, histoire d'avoir ce qui est vraiment demandé ?
Parce que tu donnes :
if ($mesvaleur = "")
{
$varw = $mesvaleur;
} 

puis
mais if ($valeurs != "")
{
$var = $mesvaleur;
} 


Sinon, rajoute dans ton code des echo et donne le résultat:
$req = "SELECT * FROM messagese,oa,societe WHERE MESCODE='$mescode'
AND MESTYPENR='type1' AND OANOA='$noa'";
$res = mysql_query($req) or die ("erreur $req ");
while($mes = mysql_fetch_object($res))
{

// 1°) Remplissage de la valeur du champ
// -----------------------------------------------------------------------
$mesvaleur = $mes->MESVALEUR;
$mescode = $mes->MESCODE;
$socTabEm = array();
$socTabEm = getSociete($chargeur);
$cdeTabEm = array();
$cdeTabEm = getCommande($cdeId);


switch($mescode)
{
...
}
echo "varw après le switch = ".$varw.". ";

if ($mesvaleur != "")
{
echo "varw dans le IF = ".$varw." Et mesvaleur = '.$mesvaleur.". ";
$varw = $mesvaleur;
echo "varw après l'affectation = ".$varw.". ";
}
echo "varw après le IF = ".$varw.". ";
0
missjack Messages postés 10 Date d'inscription mercredi 14 mai 2008 Statut Membre Dernière intervention 18 novembre 2013
26 mai 2008 à 11:04
merci beaucoup pour ta patience :)

voila ce que j'obtient en mettant les echo que tu suggère :

varw après le switch = . varw dans le IF = Et mesvaleur = D1. varw après l'affectation = . varw après le IF = .

et voila le code avec les echos que tu m'as suggèré de mettre(désolé je viens de me rendre compte que je l'ai pas recopié comme il faut : )

echo "varw après le switch = ".$varw.". ";
if ($mesvaleur != "")
{
echo "varw dans le IF = ".$varw." Et mesvaleur = ".$mesvaleur.". ";
$mesvaleur = $varw ;
echo "varw après l'affectation = ".$varw.". ";
}
echo "varw après le IF = ".$varw.". ";
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
26 mai 2008 à 11:17
Déjà, la variable $varw n'est pas affectée dans ton SWITCH, vu que tu as :
varw après le switch = .

Mets, avant le SWITCH un echo :
echo 'mescode = '.$mescode;
switch($mescode)
{...

Soit ta variable $mescode n'a pas de correspondance dant ton SWITCH CASE, soit l'affectation ($varw = $socTabEm[6]; ) est foireuse.

Et tu as bien copié/collé le code ? Parce que là :
$mesvaleur = $varw ;

c'est encore autre chose que tu fais...
0
missjack Messages postés 10 Date d'inscription mercredi 14 mai 2008 Statut Membre Dernière intervention 18 novembre 2013
26 mai 2008 à 11:33
ok j'essaie ca et oui j'ai inverser c'est bien $varw = $mesvaleur; et non pas $mesvaleur = $varw;
comme j'ai faits des tests j'avais inverser les deux pour voir si cela changer quelque chose.
0
missjack Messages postés 10 Date d'inscription mercredi 14 mai 2008 Statut Membre Dernière intervention 18 novembre 2013
26 mai 2008 à 11:38
j'ai essayer et j'obtient ceci :

mescode = varw

donc je suppose que ma variable $mescode est égale à $varw mais c'est pas logique vu que dans ma table ma colonne $mescode à des valeurs de saisies , ca devrait me renvoyer les valeurs de ma table logiquement?
0
macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
26 mai 2008 à 11:59
Si tu as bien codé echo 'mescode = '.$mescode; et que tu obtiens mescode = varw , ça veut dire que $mescode = 'varw' (la variable $mescode contient la chaîne de caractères 'varw') ?!

Donc, on reprend les chose dans l'orde :

1. Regarde comment est faite ta requête, et passe-la dans phpMyAdmin :
$req = "SELECT * FROM messagese,oa,societe WHERE MESCODE='$mescode'
AND MESTYPENR='type1' AND OANOA='$noa'"; 
echo $req.'<br />';

Vérifie dans phpMyAdmin que ta requête rend bien le résultat que tu veux.
Il y a peut-être un problème dessus (auquel cas tu ne passerais pas dans ta boucle WHILE).
J'aurais tendance à l'écrire plutôt :
$req = "SELECT * FROM messagese,oa,societe WHERE MESCODE='".$mescode."'
AND MESTYPENR='type1' AND OANOA='".$noa."'"; 


2.
$mesvaleur = $mes->MESVALEUR;
echo $mesvaleurs.'<br />';
$mescode = $mes->MESCODE; 
echo $mescode.'<br />';
0
missjack Messages postés 10 Date d'inscription mercredi 14 mai 2008 Statut Membre Dernière intervention 18 novembre 2013
26 mai 2008 à 14:27
allelua je commence à voir le bout du tunnel grace à toi en fait cela vient de $mescode car dans ma table sql dans la colonne $mescode les champs ne sont pas tous remplis, en changeant de colonne dans ma table ca m'affiche ce que je veux.
Le seul soucis qu'il me reste c'est qu'il ne prend en compte que la première ligne de ma table , il ignore les autres .
Et quand je fait un echo sur ma requête il ne prend pas en compte la valeur $mescode , j'obtient ceci:

SELECT * FROM messagese,oa,societe WHERE MESCODE='' AND MESTYPENR='type1' AND OANOA='16770'D1

il faudrait peut être que j'enlève ma condition MESCODE='$mescode' dans ma requête pour qu'il prenne toutes les lignes de ma table?
0