Variable dans array()

Variable dans array() - PHP - Programmation

Marsh Posté le 24-08-2008 à 20:39:30    

Salut, je suis nouveau venu sur ce forum.
 
Une question simple pour programmeur émerite : je souhaite inclure une variable dans un array. Voilà une partie du code avec quelques explications :
 
$Fields_xml = substr($FieldsArray,0,strlen($FieldsArray)-1);
echo $Fields_xml;
$Fields_Query = substr($FieldsQry,0,strlen($FieldsQry)-2);
$xml = lit_xml("UploadedFiles/DeliveryNotes.xml","Record",array($Fields_xml));
 
Voilà donc le cauchemard de mes trois dernières nuits.
 
Si je récupère le résultat de mon echo et que je le cole dans dans mon array() à la place de la variable $Fields_xml, tout fonctionne à merveille. Par contre, en l'état, c'est l'enfer....
 
Au secours...
 
Pour information, c'est une partie de scripte qui me permet de reprendre un fichier xml de backup de table mysql quel qu'il soit dans une base php. Si ça interresse quelqu'un, j'ai le script de creation du xml.

Reply

Marsh Posté le 24-08-2008 à 20:39:30   

Reply

Marsh Posté le 24-08-2008 à 23:15:36    

$Fields_xml est un string ? et le dernier params de "lit_xml" doit être un array à priori ?
 
Pk ne pas faire tt simplement :
$tabl[] = $Fields_xml;
$xml = lit_xml ("UploadedFiles/DeliveryNotes.xml", "Record", $tabl);


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 25-08-2008 à 11:34:14    

Exactement, $Fields_xml est un string qui renvoie la liste des champs d'une table. Et puis effectivement aussi, le dernier param de la fonction lit_xml est un array....
 
Par contre, ta proposition ne passe pas. Je ne m'explique vraiment pas pourquoi. Cela devient vraiment difficile d'avancer sur ce projet dans la mesure ou je dois maintenant ecrire d'une main seulement, l'autre tenant un pistolet sur ma tempe ;-)
 
Voilà le résultat de l'echo:
'Index','DeliNoteNumber','OrderNumber','OrderDate','ClientCode','ClientRef','ShipToCode','EmployeeCode','PartCode','OrderQuantity','Quantity','ShippingDate'
 
Bref, un string tout ce qu'il y'a de plus normal.
De nouveau, je place ta proposition et j'obtient un résultat vide. PAr contre, avec le string complet, j'ai bien ce que je veux.
 

Reply

Marsh Posté le 25-08-2008 à 11:50:19    

en fit il te faut un tableau des champs à renvoyer à partir d'une source XML ?
As-tu déjà essayé avec un :
$tabl = explode (",", $Fields_xml);


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 25-08-2008 à 12:31:18    

C'est plus compliqué que ça. J'ai déjà joué avec explode.
 
voilà le script complet (tout fonctionne, manque juste cete s....ie de variable dans mon array).
 
 // ---- XML reading ----
function lit_xml($fichier,$item,$champs) {  
   // on lit le fichier  
   if($chaine = @implode("",@file($fichier))) {  
      // explode sur <item>  
      $tmp = preg_split("<".$item.">",$chaine);  
      // pour chaque <item>  
      for($i=1;$i<sizeof($tmp)-1;$i+=2)  
         // lecture des champs demandés <champ>  
         foreach($champs as $champ) {  
            $tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);  
            // ajout au tableau  
            $tmp3[$i-1][] = utf8_decode(@$tmp2[1]);  
         }  
      // retour du tableau  
      return $tmp3;  
   }  
}  
 
 // ---- Transfer to sql ----
 
$query_table = "SELECT * FROM `DeliveryNotes`;";
$Tablefile = mysql_query($query_table, $groupelcd) or die(mysql_error());
$FieldNames = mysql_query("SHOW FIELDS FROM DeliveryNotes;", $groupelcd) or die(mysql_error());  
$NumRows = mysql_num_rows ($FieldNames);
 
 while($Field = mysql_fetch_array($FieldNames)) {
  $FieldsArray .="'".$Field['Field']."',";
  $FieldsQry .='`'.$Field['Field'].'` ,';
  }
$Fields_xml = substr($FieldsArray,0,strlen($FieldsArray)-1);
$tabl[] = $Fields_xml;
 
// c'est ici même que je me gratte le bulbe depuis des jours... voilà la version string complet qui tourne rond
echo $Fields_xml;
$Fields_Query = substr($FieldsQry,0,strlen($FieldsQry)-2);
$xml = lit_xml("UploadedFiles/DeliveryNotes.xml","Record",array('Index','DeliNoteNumber','OrderNumber','OrderDate','ClientCode','ClientRef','ShipToCode','EmployeeCode','PartCode','OrderQuantity','Quantity','ShippingDate','InvoiceQuantity','CatalogPrice','SellPrice','InvoiceDate','WarrantyExchange','Active'));
 
 // Insert record in db  
$QryDel="TRUNCATE DeliveryNotes;";
mysql_query($QryDel, $groupelcd) or die(mysql_error());
 
  //Query insert setup
$FieldNames = mysql_query("SHOW FIELDS FROM DeliveryNotes;", $groupelcd) or die(mysql_error());  
$NumRows = mysql_num_rows ($FieldNames);
$QryPart1 = "INSERT INTO `DeliveryNotes` (".$Fields_Query." )";  
 foreach($xml as $Record) {  
  for ($i=0; $i !=$NumRows; $i++)
  {
   $Values .= "'".mysql_real_escape_string($Record[$i])."', ";
  }
 $Values_Concatenate .="(".substr($Values,0,strlen($Values)-2)." ), ";
 $Values="";
 }
$QryPart2 = " VALUES (".substr($Values_Concatenate,0,strlen($Values_Concatenate)-2)." ),";
echo $QryPart1.$QryPart2;
mysql_query($QryPart1.$QryPart2, $groupelcd) or die(mysql_error());

Reply

Marsh Posté le 25-08-2008 à 12:42:05    

$Fields_xml est censé être envoyé sous quelle forme ?
"blabla1", "blabla2" ou (à priori) "<blabla1>", "<blabla2>" ?


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 25-08-2008 à 12:44:12    

'blabla1','blabla2'. Le script que je viens de copier fonctionne correctement a

Reply

Marsh Posté le 25-08-2008 à 12:45:01    

vec les valeurs de $Fields_xml tels que 'index','Delinotenumber'.....

Reply

Marsh Posté le 25-08-2008 à 13:22:13    

Autant pour moi, je n'ai lu que la fonction lit_xml et pas vu la suite :jap:
 
Ceci dit, je ne comprends pas pourquoi ceci ne fonctionne pas alors :

Code :
  1. $tabl = explode (",", $Fields_xml);
  2. $xml = lit_xml ("UploadedFiles/DeliveryNotes.xml", "Record", $tabl);


car dans table on aura alors bien les différents elements de la chaine explosés en tableau, comme dans ton exemple :??:


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 25-08-2008 à 13:27:24    

Je ne comprends pas non plus pour être franc avec toi. Si je copie les deux lignes, voilà le résultat d'un echo final
 
INSERT INTO `DeliveryNotes` (`Index` ,`DeliNoteNumber` ,`OrderNumber` ,`OrderDate` ,`ClientCode` ,`ClientRef` ,`ShipToCode` ,`EmployeeCode` ,`PartCode` ,`OrderQuantity` ,`Quantity` ,`ShippingDate` ,`InvoiceQuantity` ,`CatalogPrice` ,`SellPrice` ,`InvoiceDate` ,`WarrantyExchange` ,`Active`) VALUES ('', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''), ('', '', '', '', '', '', '
 
Du coup pas de valeurs en retour.... et moi qui vait appuyer sur la détente.....
 
Incroyable n'est-ce pas ? Tu comprends maintenant les trois jours passés sur quelques lignes ?

Reply

Marsh Posté le 25-08-2008 à 13:27:24   

Reply

Marsh Posté le 25-08-2008 à 13:29:41    

damn :/
Juste apres l'appell à la fonction maudite, fait un

Code :
  1. print ("<pre>" );
  2. print_r ($xml);
  3. print ("</pre>" );
 

C'est moche, mais au moins on saura ce qu'il retourne (car à priori il boucle sur les vals de retour)


Message édité par SICKofitALL le 25-08-2008 à 13:29:52

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 25-08-2008 à 13:52:00    

Bon, voilà l'affaire.... je l'avais un peu prévu . Pour ton info, il y'a 17 champs dans ma table et donc 17 'enregistrements' dans mon XML.
 
Array
(
    [0] => Array
        (
            [0] =>  
            [1] =>  
            [2] =>  
            [3] =>  
            [4] =>  
            [5] =>  
            [6] =>  
            [7] =>  
            [8] =>  
            [9] =>  
            [10] =>  
            [11] =>  
            [12] =>  
            [13] =>  
            [14] =>  
            [15] =>  
            [16] =>  
            [17] =>  
        )
 

Reply

Marsh Posté le 25-08-2008 à 14:01:45    

Dans la fonction "lit_xml", fait la même chose mais pour la variable $champs. Une fois avec les params qui marchent, et une fois avec les params qui merdent.

 
Code :
  1. // ---- XML reading ----
  2. function lit_xml($fichier,$item,$champs) { 
  3.    // on lit le fichier
  4. print ("<pre>" );
  5. print_r ($champs);
  6. print ("</pre>" );
  7.    if($chaine = @implode("",@file($fichier))) { 
  8. ...
  9. ...


Message édité par SICKofitALL le 25-08-2008 à 14:02:47

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 25-08-2008 à 14:09:45    

Je te mets juste la version 'param. qui merdent', vu que ça merde pas...
Array
(
    [0] => 'Index'
    [1] => 'DeliNoteNumber'
    [2] => 'OrderNumber'
    [3] => 'OrderDate'
    [4] => 'ClientCode'
    [5] => 'ClientRef'
    [6] => 'ShipToCode'
    [7] => 'EmployeeCode'
    [8] => 'PartCode'
    [9] => 'OrderQuantity'
    [10] => 'Quantity'
    [11] => 'ShippingDate'
    [12] => 'InvoiceQuantity'
    [13] => 'CatalogPrice'
    [14] => 'SellPrice'
    [15] => 'InvoiceDate'
    [16] => 'WarrantyExchange'
    [17] => 'Active'
)
 

Reply

Marsh Posté le 25-08-2008 à 14:22:01    

:crazy:
en supposant que les "params qui merdent pas" affichent bien la meme chose pas vrai ?


---------------
We deserve everything that's coming...
Reply

Marsh Posté le 25-08-2008 à 14:28:08    

Tout juste, exactement la même chose.

Reply

Marsh Posté le 25-08-2008 à 14:53:10    

Et puis le titre 'The Right Way', son proche de Blink 182. Quel changement de tonalité entre 1er et 2em album... ;-)

Reply

Marsh Posté le 25-08-2008 à 14:54:07    

juste parce-que c'est une histoire de fous cette affaire de variable, je te promets avoir passé des heures avec une paire d'échos et de print_r.

Reply

Marsh Posté le 25-08-2008 à 15:28:52    

Je suis arrivé au bout.... une histoire de '
 
while($Field = mysql_fetch_array($FieldNames)) {  
  $FieldsArray .="'".$Field['Field']."',";  
 
 est devenu
 
while($Field = mysql_fetch_array($FieldNames)) {  
  $FieldsArray .=$Field['Field'].",";  
 
Tout roule maintenant
 
SickOfItAll, merccciiii pour tout, c'est ton dernier print_r que tu m'as poussé à controler qui m'a ouvert les yeux. Encore une question : Basse ,batterie, Guitarre ou chant ?
 
 

Reply

Marsh Posté le 25-08-2008 à 18:43:49    

Aahh ben tant mieux ! :) Je me doutais bien qu'il s'agissait d'un truc à la con du genre "à force de le voir tu le vois plus" :D
 
Sinon je fais basse et "chant", et le changement de tonalité entre les deux albums vient justement du changement de chanteur. On a jarté l'ancien qui avait atteind un niveau respectable dans le jmenfoutisme absolu :D, et puis perso je préfere quand c'est hardcore ;)
 
Bref comme tu es Mosellois (ca se dit ?), on se croisera ptetre (je suis d'alsace) et je te dédicacerais un morceau super violent que j'appellerais "print_r" :lol:
 
:hello:


Message édité par SICKofitALL le 25-08-2008 à 18:44:32

---------------
We deserve everything that's coming...
Reply

Marsh Posté le 25-08-2008 à 18:46:38    

Je suis preneur.... mais alors violent le print_r :bounce:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed