Notice: Array to string conversion in

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

Re: Notice: Array to string conversion in

par moogli » 14 oct. 2016, 09:29

alors le problème vient du fait que getidTournoi ne doit pas retourner un tableau mais une seule donnée et que getData ne doit pas prendre en paramètre un tableau.
public function getidTournoi($Nomtournoi) {
         $bdd = new PDO('mysql:host=localhost;dbname=bdd','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));         
         $requete = $bdd -> prepare ('SELECT id_tournoi FROM tournoi WHERE tournoi.Nom_tournoi='.$Nomtournoi.'');
         $requete -> execute();
         $data= $requete -> fetch();
         if($data !== false){
            return $data['id_tournoi']; // en supposant fetch_assoc
         }else {
// traitement de l'erreur (throw exception ?) tu as l'erreur possible avec la méthode [url=http://php.net/manual/fr/pdostatement.errorinfo.php]errorInfo()[/url]
        }
      }
aller au passage on utilise du SQL un poil plus normé (et récent c'est sql 99, pour 1999 :-) ) en utilisant le clef join ;)
<?php
public function getData($idTournoi)
    {
        $bdd = new PDO('mysql:host=localhost;dbname=bdd', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
        $sql = <<<sql
        SELECT id_joueur, prenom_joueur FROM joueur
        join joue using(id_joueur)
        WHERE joue.id_tournoi=:idtournoi
sql;
        $requete = $bdd -> prepare($sql);
        // si l'id est bien un entier sinon change le type ou enlève le 3ème paramètre si c'est une chaine de caractères
        $requete->bindParam(':idtournoi', $idTournoi, PDO::PARAM_INT);
        $requete -> execute();
        $dataTable = $requete -> fetchAll();
        // bonne pratique
        $requete->closeCursor();
        return $dataTable;
    }
Pense que tu peux ne faire qu'une seule connexion et passer l'objet "PDO" aux classe qui en ont besoin (au pire fait un singleton). Le but c'est ne pas à avoir à chercher cette connexion partout dans le code pour changer les info d'accès (donc évite les emmerde) et tu va aussi éviter de créer plein de connexion concurente et te faire bouler par le sgbd parce que tu ne pas en ouvrir une infinité.


@+

Re: Notice: Array to string conversion in

par suguro_kun » 13 oct. 2016, 17:45

ah ben enfait mon problème remonte à plus haut car quand je fais des var_dump sur la fonction qui est supposé renvoyer idtournoi , le tableau est vide...

Code : Tout sélectionner

public function getidTournoi($Nomtournoi) { $dataTable= []; var_dump($Nomtournoi); $bdd = new PDO('mysql:host=localhost;dbname=bdd','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $requete = $bdd -> prepare ('SELECT id_tournoi FROM tournoi WHERE tournoi.Nom_tournoi='.$Nomtournoi.''); $requete -> execute(); $dataTable = $requete -> fetchAll(); var_dump($dataTable); return $dataTable; } public function getData($idTournoi) { $dataTable = []; $bdd = new PDO('mysql:host=localhost;dbname=bdd','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $requete = $bdd -> prepare ('SELECT joueur.id_joueur, joueur.prenom_joueur FROM joueur ,joue WHERE joue.id_joueur=joueur.id_joueur AND joue.id_tournoi='.$idTournoi.''); $requete -> execute(); $dataTable = $requete -> fetchAll(); return $dataTable; }

Re: Notice: Array to string conversion in

par suguro_kun » 13 oct. 2016, 17:25

Bonjour ! merci pour ta réponse.

Oui , idTournoi est bien un tableau !

Re: Notice: Array to string conversion in

par moogli » 13 oct. 2016, 16:03

salut,

$idTournoi est un tableau ?
pour le savoir ajoute un var_dump($idTournoi); en début de méthode.

pour info tu peux avantageusement remplacer
while($resultat = $requete -> fetch()) {
array_push($dataTable, $resultat);
}

par $dataTable = $requete -> fetchAll()

@+

Notice: Array to string conversion in

par suguro_kun » 13 oct. 2016, 15:52

Bonjour !

J'ai cette erreur là et je ne sais pas d'où elle vient , c'est vraiment bizarre car juste dans la fonction d'avant , je fais pareil mais ça ne le fait pourtant pas :

Code : Tout sélectionner

public function getData($idTournoi) { $dataTable = []; $bdd = new PDO('mysql:host=localhost;dbname=bdd','root','',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")); $requete = $bdd -> prepare ('SELECT joueur.id_joueur, joueur.prenom_joueur FROM joueur ,joue WHERE joue.id_joueur=joueur.id_joueur AND joue.id_tournoi='.$idTournoi.''); $requete -> execute(); while($resultat = $requete -> fetch()) { array_push($dataTable, $resultat); } return $dataTable; }
la ligne concernée est la 4iéme ! j'ai cherché partout et j'ai tout essayé , rien :(