Variable dans array() - PHP - Programmation
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);
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.
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);
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());
Marsh Posté le 25-08-2008 à 12:42:05
$Fields_xml est censé être envoyé sous quelle forme ?
"blabla1", "blabla2" ou (à priori) "<blabla1>", "<blabla2>" ?
Marsh Posté le 25-08-2008 à 12:44:12
'blabla1','blabla2'. Le script que je viens de copier fonctionne correctement a
Marsh Posté le 25-08-2008 à 12:45:01
vec les valeurs de $Fields_xml tels que 'index','Delinotenumber'.....
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
Ceci dit, je ne comprends pas pourquoi ceci ne fonctionne pas alors :
Code :
|
car dans table on aura alors bien les différents elements de la chaine explosés en tableau, comme dans ton exemple
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 ?
Marsh Posté le 25-08-2008 à 13:29:41
damn
Juste apres l'appell à la fonction maudite, fait un
Code :
|
C'est moche, mais au moins on saura ce qu'il retourne (car à priori il boucle sur les vals de retour)
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] =>
)
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 :
|
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'
)
Marsh Posté le 25-08-2008 à 14:22:01
en supposant que les "params qui merdent pas" affichent bien la meme chose pas vrai ?
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... ;-)
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.
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 ?
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"
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 , 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"
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.