Notice: Array to string conversion in ...Database.php on line 18

Résolu/Fermé
JxSDev Messages postés 13 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 10 mai 2016 - 26 avril 2016 à 12:53
 DevMan - 28 avril 2016 à 18:42
Salut à tous ^^ , je viens vers vous car je me bloque sur un problème que j'ai du mal à identifier , c'est la première fois que je rencontre ce type d'erreur.
lorsque j'utilise ma requête j'ai bien le bon résultat mais j'ai un retour de notice concernant la conversion de tableau.
Si quelqu'un a une idée afin de régler cela sans cacher l'erreur cela me permettrait d'avancer dans mon travail.
je vous montre le code avec toutes les lignes qui sont apparues dans la notice :
CLASS Database.php qui contient la fonction de ma query :
 public function query($query, $params = false){ 
		try { if($params){
			$req = $this->bdd->prepare($query); 
			$req->execute($params); // c'est la ligne 18
	}else{
		$req = $this->bdd->query($query);
	}
		return $req;} catch(Exception $e) { 
			echo 'Exception -> ';
			var_dump($e->getMessage());
		}
		


ma page mailCtrl.php je vous montre juste les lignes qui concernent la requête
if($validator->isValid()){
    App::getAuth()->estimate($db, $_POST['qtePdt'],$_POST['namePdt'],$_POST['refPdt'], $_POST['suggestedPrice'], $_POST['message'], $_FILES['fileUpload']);
      Session::getInstance()->setFlash('success', "Votre demande a ete bien envoyée");


ma class Auth.php ou se trouve la function estimate de la requete :
 public function estimate($db, $qtePdt, $namePdt, $refPdt, $suggestedPrice, $message, $fileUpload){
            $db->query("INSERT INTO estimate SET qtePdt = ?, namePdt = ?, refPdt = ?, suggestedPrice = ?, message = ?, fileUpload = ?",[
                $qtePdt,
                $namePdt, 
                $refPdt, 
                $suggestedPrice, 
                $message, 
                $fileUpload
                ]); // on m'indique aussi que l'erreur vient de cette ligne 
        }


Merci d'avnce pour votre aide, je serai très reconnaissante ^^

3 réponses

Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016 21
26 avril 2016 à 13:56
Bonjour,

Sans regarder ton code, cette erreur signifie que tu essaye d'utiliser un tableau dans un objet/fonction qui attends une string, et cette utilisation erronée se trouve à la ligne 18 de ton fichier database.php, et comme tu ne nous fournis pas le code de cette ligne 18 ^^ dur d'en dire plus.

Cdlt.
0
JxSDev Messages postés 13 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 10 mai 2016
26 avril 2016 à 13:58
bah si je l'ai mis :/ c'est dans la function query
$req->execute($params); // c'est la ligne 18
0
Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016 21
Modifié par Xavierdu34 le 26/04/2016 à 14:07
En effet ^^ pas regardé les commentaires .. pour moi c'était la ligne 4 ...
0
Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016 21
26 avril 2016 à 14:15
Un conseil que je peux te donner pour tenter de résoudre ce problème, c'est d'ajouter juste avant
$req->execute($params);
, le code suivant :
file_put_contents('debug.txt', gettype($params));

puis tu édites le fichier debug.txt, si le fichier contient autre chose que array, ça te donnera une grosse information sur le problème.

Cdlt.
0
JxSDev Messages postés 13 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 10 mai 2016 > Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016
26 avril 2016 à 15:35
ah , et je mets quoi dans le fichier debug.txt
0
Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016 21
27 avril 2016 à 16:33
tu ne met rien, il va se remplir tout seul avec le type de la variable $params, celà te permettra de savoir si cette variable est bien un array.
0
Il ne faut tout simplement pas faire de "echo" sur un array...

Si tu as un tableau et que tu fais un echo sur celui ci, php ne saura pas quelle case du tableau t'afficher donc voila d'ou viens ton erreur.

Si tu veux afficher quelque chose en particulier tu devrais faire plutôt
du echo $nomDuTableau['case_du_tableau'];
0
Xavierdu34 Messages postés 216 Date d'inscription lundi 2 décembre 2013 Statut Membre Dernière intervention 10 octobre 2016 21
28 avril 2016 à 09:48
où vois tu un echo d'un tableau dans son code ?
0
JxSDev Messages postés 13 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 10 mai 2016
28 avril 2016 à 12:22
Tu parles de quel echo là ?
0
C'etait le matin et j'ai pas regardé le code haha, Desolé :)
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
28 avril 2016 à 12:24
Salut,

L'erreur vient surement de la variable $_FILES['fileUpload'] qui est un tableau, il n'est donc pas possible de l'utiliser directement en tant que paramètre d'une requête préparée.

Bonne journée,
0
JxSDev Messages postés 13 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 10 mai 2016
28 avril 2016 à 12:39
Mais je peux pas mettre un $_POST['fileUpload'] ce ne devrai pas marcher

merci pour votre aide btw ^^
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 28/04/2016 à 14:02
Il faut bien utiliser la variable $_FILES['fileUpload'] pour récupérer les informations du fichier uploadé, mais il faut extraire de ce tableau la chaine que tu souhaite insérer en base de donnée, le nom du fichier par exemple.
0
JxSDev Messages postés 13 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 10 mai 2016
28 avril 2016 à 14:07
ah je comprend ^^
et comment puis-je l'extraire ?
désolé si je demande trop de questionsmais je ne suis qu'une débutante en php
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
28 avril 2016 à 14:11
Tout dépend de l'info que tu veux récupérer :
$_FILES['fileUpload']['name'] pour le nom original du fichier
$_FILES['fileUpload']['tmp_name'] pour le nom temporaire du fichier
$_FILES['fileUpload']['size'] pour la taille du fichier
etc...
L'utilisation de la superglobale $_FILES est expliqué ici : https://www.php.net/manual/fr/features.file-upload.post-method.php

Au passage il faudra également utiliser la fonction move_uploaded_file() pour stocker le fichier uploadé temporaire dans le dossier de ton choix, sinon le fichier uploadé temporaire sera supprimé à la fin de l’exécution de ton script (plus d'info sur le lien de la doc ci-dessus).
0
JxSDev Messages postés 13 Date d'inscription lundi 25 avril 2016 Statut Membre Dernière intervention 10 mai 2016
28 avril 2016 à 14:16
Merci pour l'info :D je vais voir la doc et essayer de fixer mon code ! je reviendrai vers vous si je me plante
0