Fichier vide

missjack Messages postés 10 Statut Membre -  
missjack Messages postés 10 Statut Membre -
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 676 Statut Membre 89
 
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
missjack
 
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 676 Statut Membre 89
 
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 Statut Membre
 
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 676 Statut Membre 89
 
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 Statut Membre > macgawel Messages postés 676 Statut Membre
 
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
missjack
 
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 676 Statut Membre 89
 
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 Statut Membre
 
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 676 Statut Membre 89
 
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 Statut Membre
 
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 Statut Membre
 
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 676 Statut Membre 89
 
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 Statut Membre
 
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