[RESOLU] Mauvais arguments implode???

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Mauvais arguments implode???

Re: Mauvais arguments implode???

par fitnopk » 20 sept. 2016, 17:17

au passage tu connais fputcsv ? (a priori non ;) )
tu te feras moins chi** et ce sera plus clair.

et la même chose sous forme objet avec SPL http://php.net/manual/fr/splfileobject.fputcsv.php
Y a vraiment des fonctions pour tout en PHP ça change du C :D Thanks o/
EDIT: je viens de tester avec fputcsv, ça marche bien sauf qu'il ne met pas d'enclosure sur les champs vides :/
et vu que tu débute je t"invites a te conformer aux standards psr-1 et psr-2 pour ce qui est du "formatage" du code ;)

@+
Uuuurh je savais qu'une norme finirait par arriver xD

Re: Mauvais arguments implode???

par moogli » 20 sept. 2016, 16:43

au passage tu connais fputcsv ? (a priori non ;) )
tu te feras moins chi** et ce sera plus clair.

et la même chose sous forme objet avec SPL http://php.net/manual/fr/splfileobject.fputcsv.php

et vu que tu débute je t"invites a te conformer aux standards psr-1 et psr-2 pour ce qui est du "formatage" du code ;)

@+

Re: Mauvais arguments implode???

par fitnopk » 20 sept. 2016, 15:46

... j'aurai du afficher le n° des lignes dès le début je suis vraiment c** xD
Ca ne concerne que les 25 premiers $val qui sont en fait des chaines de caractères pour le nom de chaque champs csv des tableaux qui suivent...

Bon bah merci xD C'est la première fois que je touche au PHP et je dois retaper et peaufiner le code d'un stagiaire en tant que stagiaire o/

Du coup je vais garder ce "is_array", c'est pas mal :D

Code : Tout sélectionner

function writeCSV($fileName, $tab) { $fileFd = fopen($fileName, "w"); foreach ($tab as $key => $val) { if (is_array($val)) fputs($fileFd, "\"" . implode("\",\"", $val) . "\"\n"); } fclose($fileFd); }

Re: Mauvais arguments implode???

par moogli » 20 sept. 2016, 15:39

malheureusement php te dit le contraire.

tu as forcément un argument de foireux et comme ce n'est la "glue" c'est forcément le tableau.
As-tu un deboggeur ? (genre eclipse + xdebug) cela te permettra de suivre pas a pas ton code et regarder ce qui ne vas.
c'est peux qu'une seule ligne de $tab qui n'est pas un tableau.
ajout un if(is_array($val) avant l'insertion pour voir si tu as toujours le même message d'erreur (et un else pour afficher les lignes qui cause problème).

@+

Re: Mauvais arguments implode???

par fitnopk » 20 sept. 2016, 15:34

du coup est tu certain de ce que les données que tu indiques sont bien celle avant le fputs ?
Oui j'ai fais un var_dump pour vérifier
je pense donc que ton foreach parcourt le tableau que tu indiques ?
si oui tu peux réduire un peu ta fonction
<?php
function writeCSV($fileName, $tab)
{
    file_put_contents($fileName, implode('","', $tab), FILE_APPEND | LOCK_EX);
}
oui ça le parcourt mais $tab est un tableau de tableau :) c'est pour ça que j'implode chaque $val de $tab
@Ryle : en fait elle top cette fonction elle fonctionne dans les deux sens ;)
Oui, j'ai essayé dans les deux sens de toutes façons j'ai le même message

Re: Mauvais arguments implode???

par moogli » 20 sept. 2016, 15:21

salut,

code test simple à partir de tes données
<?php
$val  = [0=> "",1=> "",2=> "",3=> "",4=> "",5=> "2MoRO Solutions",6=> "",7=> "",8=> "",9=> "",10=> "",11=> "",12=> "",13=> "",14=> "",15=> "",16=> "",17=> "",18=> "",19=> "",20=> "",21=> "",22=> "",23=> "",24=> "Qualified",25=> "34"];
echo implode('","', $val);
résultat
","","","","","2MoRO Solutions","","","","","","","","","","","","","","","","","","","Qualified","34

du coup est tu certain de ce que les données que tu indiques sont bien celle avant le fputs ?

J'ai le même message d'erreur que toi si je ne passe pas un tableau en paramètre (pour info les paramètres c'est $glue, $array dans la doc il est conseillé d'utiliser le sens de la doc).

je pense donc que ton foreach parcourt le tableau que tu indiques ?
si oui tu peux réduire un peu ta fonction
<?php
function writeCSV($fileName, $tab)
{
    file_put_contents($fileName, implode('","', $tab), FILE_APPEND | LOCK_EX);
}

@Ryle : en fait elle top cette fonction elle fonctionne dans les deux sens ;)

@+

Re: Mauvais arguments implode???

par Ryle » 20 sept. 2016, 15:15

Bonjour,

Vérifies l'ordre dans lequel tu passes les arguments à la fonction implode(), le séparateur est en premier, le tableau en second :)

Mauvais arguments implode???

par fitnopk » 20 sept. 2016, 14:55

Hai hai

Donc ça fait 24h que je me torture à comprendre ce
Warning: implode(): Invalid arguments passed in /home/kpontif/Téléchargements/php/comptes.php on line 26
PHP Warning: implode(): Invalid arguments passed in /home/kpontif/Téléchargements/php/comptes.php on line 26
Voilà l'usage que j'en fais

Code : Tout sélectionner

function writeCSV($fileName, $tab) { $fileFd = fopen($fileName, "w"); foreach ($tab as $key => $val) { /* sleep(3); */ /* var_dump($val); */ fputs($fileFd, '"'.implode($val, '","')."\"\n"); } fclose($fileFd); }
Et voici la forme du contenu d'un $val
array(26) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
[3]=>
string(0) ""
[4]=>
string(0) ""
[5]=>
string(15) "2MoRO Solutions"
[6]=>
string(0) ""
[7]=>
string(0) ""
[8]=>
string(0) ""
[9]=>
string(0) ""
[10]=>
string(0) ""
[11]=>
string(0) ""
[12]=>
string(0) ""
[13]=>
string(0) ""
[14]=>
string(0) ""
[15]=>
string(0) ""
[16]=>
string(0) ""
[17]=>
string(0) ""
[18]=>
string(0) ""
[19]=>
string(0) ""
[20]=>
string(0) ""
[21]=>
string(0) ""
[22]=>
string(0) ""
[23]=>
string(0) ""
[24]=>
string(9) "Qualified"
[25]=>
string(2) "34"
}
Je comprends vraiment pas le problème :roll: