Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2790 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Variable dans array()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Variable dans array()

n°1776803
RGeeze
Posté le 24-08-2008 à 20:39:30  profilanswer
 

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.

mood
Publicité
Posté le 24-08-2008 à 20:39:30  profilanswer
 

n°1776862
SICKofitAL​L
misanthrope
Posté le 24-08-2008 à 23:15:36  profilanswer
 

$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...
n°1777021
RGeeze
Posté le 25-08-2008 à 11:34:14  profilanswer
 

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.
 

n°1777028
SICKofitAL​L
misanthrope
Posté le 25-08-2008 à 11:50:19  profilanswer
 

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...
n°1777055
RGeeze
Posté le 25-08-2008 à 12:31:18  profilanswer
 

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());

n°1777063
SICKofitAL​L
misanthrope
Posté le 25-08-2008 à 12:42:05  profilanswer
 

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


---------------
We deserve everything that's coming...
n°1777066
RGeeze
Posté le 25-08-2008 à 12:44:12  profilanswer
 

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

n°1777067
RGeeze
Posté le 25-08-2008 à 12:45:01  profilanswer
 

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

n°1777099
SICKofitAL​L
misanthrope
Posté le 25-08-2008 à 13:22:13  profilanswer
 

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...
n°1777104
RGeeze
Posté le 25-08-2008 à 13:27:24  profilanswer
 

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 ?

mood
Publicité
Posté le 25-08-2008 à 13:27:24  profilanswer
 

n°1777107
SICKofitAL​L
misanthrope
Posté le 25-08-2008 à 13:29:41  profilanswer
 

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...
n°1777118
RGeeze
Posté le 25-08-2008 à 13:52:00  profilanswer
 

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] =>  
        )
 

n°1777126
SICKofitAL​L
misanthrope
Posté le 25-08-2008 à 14:01:45  profilanswer
 

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...
n°1777138
RGeeze
Posté le 25-08-2008 à 14:09:45  profilanswer
 

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'
)
 

n°1777149
SICKofitAL​L
misanthrope
Posté le 25-08-2008 à 14:22:01  profilanswer
 

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


---------------
We deserve everything that's coming...
n°1777154
RGeeze
Posté le 25-08-2008 à 14:28:08  profilanswer
 

Tout juste, exactement la même chose.

n°1777196
RGeeze
Posté le 25-08-2008 à 14:53:10  profilanswer
 

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

n°1777199
RGeeze
Posté le 25-08-2008 à 14:54:07  profilanswer
 

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.

n°1777250
RGeeze
Posté le 25-08-2008 à 15:28:52  profilanswer
 

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 ?
 
 

n°1777350
SICKofitAL​L
misanthrope
Posté le 25-08-2008 à 18:43:49  profilanswer
 

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...
n°1777351
RGeeze
Posté le 25-08-2008 à 18:46:38  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Variable dans array()

 

Sujets relatifs
Enlever un caractère de la valeur d'une variableInterprétation de variable dans un fichier
problem de recuperation du contenu d variable sous perlproblem de recuperation du contenu d variable sous perl
variable array se limiteFonction Array() et variable, possible?
passer une variable de type array en GETPointeur vers une variable (record) de type : array of array of ...
[VB.net] Comment passer un Array String a une fonction sans variable[Win32/OLE] Acceder a une variable complexe (array) avec Win32::OLE ?
Plus de sujets relatifs à : Variable dans array()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR