Array to string conversion

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 : Array to string conversion

par bimini » 13 oct. 2006, 15:09

Super !

Ça marche comme sur des roulettes.

Voici le code de la fonction :
function rangement($donnees,$nomtable,$variable,$id)
{	
	$query = "update $nomtable set ";
	$query2 = " where $variable="."'"."$id"."'";
	$compteur = 0;
	$i=0;
	foreach ($donnees as $cle => $valeur)
		{
		if (is_array($donnees[$cle]))
			{$valeur = implode(', ',$valeur);}
		$donnees[$cle] = trim($valeur);
		$donnees[$cle] = strip_tags($valeur);
		$compteur++;
			if($compteur==sizeof($donnees)) // si dernier champs
				{$query = $query.$cle."='".addslashes($valeur)."'";
				}
			else // si ce n'est pas le dernier champs
				{$query = $query.$cle."='".addslashes($valeur)."', ";
				}
		}
	$query=$query.$query2;
	$result = mysql_query($query);
	if (!$result)
	 	{echo "Exécution de la requête <b>$query</b> impossible".mysql_errno()." : ".mysql_error()."<br>"; //pour la mise au point
	 	}
}
Donc il fallait donc appliquer le implode() dans la fonction.
En revanche, si le gettype() et le var_dump() m'indiquent des strings dans ma page d'origine, je ne comprend pas pourquoi la variable redevient un array en arrivant dans la fonction.

Merci Ouckileou pour ton aide.

A plus,

Bimini.

par bimini » 13 oct. 2006, 14:53

Ah oui...
Effectivement ça me retourne

array(2) { [0]=> string(3) "Son" [1]=> string(5) "Vidéo"}

Je vais donc tenter d'inclure le implode() dans la fonction.

Si tu as une meilleure suugestion, je suis preneur.

Merci,

Bimini.

par ouckileou » 13 oct. 2006, 14:33

fais un var_dump() de $valeur, ainsi tu verras ce que c'est comme variable.

par bimini » 13 oct. 2006, 14:16

Bonjour Oukileou,

La Notice pour la ligne 181 est en plus des deux autres.

Je redonne mon code :
foreach($HTTP_POST_VARS as $cle => $valeur) 
{ 
... 

if ($cle == "cat") 
    {if (is_array($valeur)) 
        {$valeur = implode(', ',$valeur); 
         } 
    } 

... 
} 

rangement($HTTP_POST_VARS,"fournisseur","id_fournisseur",$id_fournisseur);  
(J'ai enlevé un if qui ne me servait plus à rien mais qui ne change pas le résultat.)

Et pour la page fonction.php :
function rangement($donnees,$nomtable,$variable,$id) 
{     
    $query = "update $nomtable set "; 
    $query2 = " where $variable="."'"."$id"."'"; 
    $compteur = 0; 
    foreach ($donnees as $cle => $valeur) 
        { 
        $donnees[$cle] = trim($valeur);//(180)// 
        $donnees[$cle] = strip_tags($valeur);//(181)// 
        $compteur++; 
            if($compteur==sizeof($donnees)) // si dernier champs 
                {$query = $query.$cle."='".addslashes($valeur)."'";//(184)// 
                } 
            else // si ce n'est pas le dernier champs 
                {$query = $query.$cle."='".addslashes($valeur)."', "; 
                } 
        } 
    $query=$query.$query2; 
    $result = mysql_query($query); 
    if (!$result) 
         {echo "Exécution de la requête <b>$query</b> impossible".mysql_errno()." : ".mysql_error()."<br>"; //pour la mise au point 
         } 
}
Ça me retourne les lignes

Notice: Array to string conversion in ..\...\fonctions.pfp on line 180
Notice: Array to string conversion in ..\...\fonctions.pfp on line 181
Notice: Array to string conversion in ..\...\fonctions.pfp on line 184

J'en déduis qu'il me dit que je suis en train de transformer un array en string, mais à ce niveau du code, $cat est déjà un string et je n'ai aucun problème sur les autre string.

A plus,

Bimini

par ouckileou » 13 oct. 2006, 13:35

Redonnes ton code modifié

Est-ce que l'erreur ligne 181 est la seule qui te reste ou elle est en + des premères ?

par bimini » 13 oct. 2006, 08:48

Bonjour Oukileou,

Désolé pour le balises...

J'ai corrigé le code comme tu me l'as dit. Maintenant j'ai la même notice sur pour une troisième ligne (la 181).
Quant au reste du code, pour les autres couples $cle/$valeur, ça fonctionne toujours.

J'espère que quelqu'un aura la solution. Je continue de chercher en attendant d'autres conseils.

A plus,

Bimini

par ouckileou » 12 oct. 2006, 20:35

Les balises
 c'est mieux pour insérer du PHP dans le forum

Déjà quand tu parcours un tableau avec foreach(), tu récupères la clé de chaque cellule dans $cle, et la valeur dans $valeur. Tu peux donc utiliser $valeur directement, sans passer par $donnees[$cle]


[php]foreach ($donnees as $cle => $valeur)
        {
        $donnees[$cle] = trim($donnees[$cle]);
}
devient :
foreach ($donnees as $cle => $valeur)
        {
        $donnees[$cle] = trim($valeur);
}

Array to string conversion

par Invité » 12 oct. 2006, 20:09

Bonjour à tous,

J'ai un super gros problème dans mon code et je ne trouve pas la solution. Je ne vais donc pas développer tous les tests que j'ai fait vu qu'ils ne mènent à rien mais vous exposer la situation telle qu'elle m'est posée :

J'ai ma page fournisseursmodif.php avec un formulaire et tout et tout et j'ai ce passage qui vérifie mes champs. Dans ce passage, j'en profite pour transformer un array en string :
foreach($HTTP_POST_VARS as $cle => $valeur)
{
...

if ($cle == "cat")
	{if ($valeur == "")
		{$valeur = "sans";}
	elseif (is_array($valeur))
		{$valeur = implode(', ',$valeur);
	        }
	}

...
}

rangement($HTTP_POST_VARS,"fournisseur","id_fournisseur",$id_fournisseur);

Ensuite j'ai mon fichier fonctions.php qui est appelé dans le premier fichier. Là, j'ai cette fonction qui me permet de tout updater dans la base de données.
function rangement($donnees,$nomtable,$variable,$id)
{	
	$query = "update $nomtable set ";
	$query2 = " where $variable="."'"."$id"."'";
	$compteur = 0;
	foreach ($donnees as $cle => $valeur)
		{
		$donnees[$cle] = trim($donnees[$cle]);//(180)//
		$donnees[$cle] = strip_tags($donnees[$cle]);
		$compteur++;
			if($compteur==sizeof($donnees)) // si dernier champs
				{$query = $query.$cle."='".addslashes($valeur)."'";//(184)//
				}
			else // si ce n'est pas le dernier champs
				{$query = $query.$cle."='".addslashes($valeur)."', ";
				}
		}
	$query=$query.$query2;
	$result = mysql_query($query);
	if (!$result)
	 	{echo "Exécution de la requête <b>$query</b> impossible".mysql_errno()." : ".mysql_error()."<br>"; //pour la mise au point
	 	}
}

Voilà pour les codes... Maintenant quand je lance l'application j'obtiens ça :
Notice: Array to string conversion in d:\www\ctiweb\site6\alexma2\fonctions.php on line 180

Notice: Array to string conversion in d:\www\ctiweb\site6\alexma2\fonctions.php on line 184

(Je vous ai ajouté les numéros des lignes 180 et 184 sur le code).

$cat[] récupère des valeurs via des checkbox et je tente d'en faire une string avec le implode().

Quand je fais un gettype($cat) j'obtiens un "string" et avec un var_dump($cat) j'obtiens "string(nombre de caractères)chaîne".

Donc je ne pige pas.

Si quelqu'un peut m'aider ça serait cool.

Merci d'avance,

Bimini