begin process at 2012 05 28 23:07:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Fatal error: Cannot use object of type search as array in /home/...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fatal error: Cannot use object of type search as array in /home/...

mercredi 4 mars 2009 à 17:42:45 | Fatal error: Cannot use object of type search as array in /home/...

sebshiva

Bonjour! Première fois que je poste une question...
Je débute en POO et tente de passer une fonction de recherche dans une classe avant de la développer d'avantage et pouvoir l'utiliser ailleurs (le but de l'objet non?)
J'ai cherché la réponse à mon problème en vain...

Voici ma "classe".. (ma première, soyez indulgents )

<?php
require('fonctions_gepo.php');
class search
{
   var $MotifSearch;
   var $IfSearch=0;
   var $VewType;
   var $word_sound;
   var $meta=array();
   function find($MotifSearch) 
   {
      connect();
      $sql = "SHOW TABLES";
      $tables = mysql_query($sql);
      if (!$tables)
      {
     echo "Erreur DB, impossible de lister les tables\n";
     echo 'Erreur MySQL : ' . mysql_error();
     exit;
      }
      $i=0;;$f=0;
      while ($table_name = mysql_fetch_row($tables))
      {
     $req_fields_name="select * from ".$table_name[0];
     $result_fields_name[$i]=mysql_query($req_fields_name);    
     for ($for=0;$for<mysql_num_fields($result_fields_name[$i]);$for++)
     {
        $meta = mysql_fetch_field($result_fields_name[$i], $for);            
        if ((!strpos($meta->name, "id_"))&& ($meta->table!="admin")     &&($meta->type=="blob")||($meta->type=="string")||($meta->type=="timestamp"))
        {
           $word_sound = soundex($MotifSearch);
           $req_r_find="select ".$meta->name.",id_".$meta->table." from ".$meta->table." where ".$meta->name." like '%".$MotifSearch."%' or soundex($meta->name) = '" . $word_sound . "'";
           $res_req_r_find=mysql_query($req_r_find);
           if (!empty($res_req_r_find))
           {
          while ($ligne_req_r_find = mysql_fetch_array($res_req_r_find))
            {
             $result_find[$f][0]=$ligne_req_r_find[$meta->name];
             $result_find[$f][1]=$meta->name;
             $result_find[$f][2]=$meta->table;
             $result_find[$f][3]=$ligne_req_r_find["id_".$meta->table];
             if ($meta->table=="contact") $result_find[$f][4]="details_contact";
             if (($meta->table=="client")||($meta->table=="fournisseur"))
             $result_find[$f][4]="details";
             if ($meta->table=="dd") $result_find[$f][4]="details_dd";
             $f++;
          }
            }
           }    
        }
        $i++;
     }
     return($result_find);
      }
   }
?>

et dans mon script :


$result_find = new search;
$result_find->find($_POST['mcle']);

count($result_find) me donne 1...
et Fatal error: Cannot use object of type search as array in /home/...

Je pense que le soucis vient de $meta->... mais je ne vois pas pourquoi... bein oui, débutant... Merci de vos lumières...

mercredi 4 mars 2009 à 17:44:59 | Re : Fatal error: Cannot use object of type search as array in /home/...

sebshiva

Désolé pour la mise en page...
jeudi 5 mars 2009 à 10:03:05 | Re : Fatal error: Cannot use object of type search as array in /home/...
jeudi 5 mars 2009 à 10:13:19 | Re : Fatal error: Cannot use object of type search as array in /home/...

sebshiva

bon, personne...

Je test et cherche toujours...
Si je remplace $meta->table par $meta['table'] (il me semble que le problème vient de là...) J'obtiens :

Fatal error
: Cannot use object of type stdClass as array in /...

Pas d'idée? J'ai rien compris aux classes???
vendredi 6 mars 2009 à 19:15:47 | Re : Fatal error: Cannot use object of type search as array in /home/...

malalam

Administrateur CodeS-SourceS
Hello,

tu sais, si tu acceptes tes messages comme des réponses validés, ton post passe en "résolu", et donc personne ne vient le voir...j'ai donc retiré tes "réponses acceptées".

Le message d'erreur est clair : count() est une fonction qui attend un tableau (type array donc), et tu lui passes un objet. Donc, ça plante.
Tu peux utiliser les itérateurs, mais si tu débutes...tu vas galérer.
Ou créer une méthode search::count() qui te renverra le résultat désiré, tout simplement. Et tu l'appeleras ainsi :
$iCount = $monInstanceDeSearch->count();
samedi 7 mars 2009 à 01:28:04 | Re : Fatal error: Cannot use object of type search as array in /home/...

sebshiva

Merci malalam de te préoccuper de mon cas!
Désolé pour le "réponse acceptée", c'est la première fois que je post sur un forum...
J'ai trouvé la réponse à ce problème depuis.
ça me fait plaisir que ce soit toi qui me réponde, je vois ton niveau et suis honoré que tu te penches sur mon cas!

J'ai un nouveau soucis depuis...
Je vais mettre tout mon code pour que tu puisses comprendre et m'éclairer sur la manière de coder ma classe. Je crée cette classe pour apprendre et maîtriser la POO, je suis autodidacte.

J'ai fini, a force de recherche et de réflexions à faire tourner mon objet, j'essaie de l'améliorer en lui donnant la possibilité de trier par champs son résultat.
Là, je rame pour le tri...Pendant toute une journée, j'ai cherché à utiliser "array_multisort" en vain... et mon problème de session... ou utiliser serialize...
Bref, je rame...

Voici mon code:
la classe:
<?php
require('fonctions_gepo.php');
session_start();
class search
{
    var $ResultFind=array();
    var $ResultFindTot=array();
    var $Mcle;

function find($MotifSearch)
{
    connect();
    $sql = "SHOW TABLES";
    $tables = mysql_query($sql);
    if (!$tables)
    {
        echo "Erreur DB, impossible de lister les tables\n";
        echo 'Erreur MySQL : ' . mysql_error();
        exit;
    }
    $i=0;;$f=0;
    while ($table_name = mysql_fetch_row($tables))
    {
        $req_fields_name="select * from ".$table_name[0];
        $result_fields_name[$i]=mysql_query($req_fields_name);   
        for ($for=0;$for<mysql_num_fields($result_fields_name[$i]);$for++)
        {
            $meta = mysql_fetch_field($result_fields_name[$i], $for);
       if ((!strpos($meta->name, "id_")) && ($meta->table!="admin")     &&(($meta->type=="blob")||($meta->type=="string")||($meta->type=="timestamp")))
            {
                $WordSound = soundex($MotifSearch);
                $req_r_find = "select ".$meta->name.",id_".$meta->table;
                   if (($meta->name != "nom_".$meta->table)&&($meta->table!="msg"))
                  $req_r_find .= " ,nom_".$meta->table;
                $req_r_find .= " from ".$meta->table." where ".$meta->name." like '%".$MotifSearch."%' or soundex($meta->name) = '" . $WordSound . "'";
                $res_req_r_find=mysql_query($req_r_find);
                if (!empty($res_req_r_find))
                {
                    while ($ligne_req_r_find = mysql_fetch_array($res_req_r_find))
                    {
                        $this->ResultFind[$f]['val']=stripslashes($ligne_req_r_find[$meta->name]);
                        $this->ResultFind[$f]['nom']=stripslashes($ligne_req_r_find["nom_".$meta->table]);
                        $this->ResultFind[$f]['field']=$meta->name;
                        $this->ResultFind[$f]['table']=$meta->table;
                        $this->ResultFind[$f]['id']=$ligne_req_r_find["id_".$meta->table];
                        if ($meta->table=="contact") $this->ResultFind[$f]['type']="details_contact";
                        if (($meta->table=="client")||($meta->table=="fournisseur"))
                        $this->ResultFind[$f]['type']="details";
                        if ($meta->table=="dd") $this->ResultFind[$f]['type']="details_dd";
                        $f++;
                    }
                }
            }   
        }
        $i++;
    }
    close_db();
    $this->Mcle=$MotifSearch;
    $_SESSION['Mcle']=$this->Mcle;
    return($this->ResultFind);
}

function tri($ActArg) {
    $this->ResultFindTot=$_SESSION['ResultFind'];
    $this->ResultFind=$_SESSION['ResultFind'];
    $ResultFindTemp=array();
    $temp=0;
     for ($t=0;$t<count($this->ResultFind);$t++)
    {
        if ($this->ResultFind[$t]['table']==$ActArg)
        {
            $ResultFindTemp[$temp]=$this->ResultFind[$t];
            $temp++;
        }
    }
    $this->ResultFind=$ResultFindTemp;
    return($this->ResultFind);
}

function order($ActArg) {
    $this->ResultFindTot=$_SESSION['ResultFind'];
    $this->ResultFind=$_SESSION['ResultFind'];
    $ResultFindTemp=array_multisort($this->ResultFind[0], SORT_STRING, SORT_ASC);
// var_dump($this->ResultFind);
    $this->ResultFind=$ResultFindTemp;
      return ($this->ResultFind);
}
}

et ou je l'utilise :

$FindObject = new search();
if (empty($_GET['ObAct']))
{
    $FindObject->find($_POST['mcle']);
    $_SESSION['ResultFind'] = $FindObject->ResultFind;
}
else if ($_GET['ObAct']=="tri")
{
    $FindObject->tri($_GET['ArgAct']);
}

else if ($_GET['ObAct']=="order")
{
    $FindObject->order($_GET['ArgAct']);
//    print_r($FindObject->ResultFind);
}
echo "<span class=\"med aff_lien\">Trouv&eacute; : <a href=\"".$FindObject->ResultFind[$a]['type'].".php?id=".$FindObject->ResultFind[$a]['id']."&type=".$FindObject->ResultFind[$a]['table']."\"> ".$FindObject->ResultFind[$a]['val']."</a></span>\n";
    echo "<span class=\"med\">dans le champs ".$FindObject->ResultFind[$a]['field']."</span>\n";...
samedi 7 mars 2009 à 09:44:11 | Re : Fatal error: Cannot use object of type search as array in /home/...

malalam

Administrateur CodeS-SourceS
Prends les problèmes un après l'autre.
Le tri d'abord : donne moi un exemple de tableau (fait un var_dump mis en forme et copie le ici), et le tri que tu veux obtenir.

samedi 7 mars 2009 à 10:11:12 | Re : Fatal error: Cannot use object of type search as array in /home/...

sebshiva

bonjour! :)

le var_dump() avec test comme MotifSearch et ->tri:

array(3) { [0]=> array(6)
{ ["id"]=> string(1) "1" ["nom"]=> string(7) "Boulard" ["val"]=> string(63) "Description du projet... C'est le test de ma demande de devis!" ["table"]=> string(2) "dd" ["type"]=> string(10) "details_dd" ["field"]=> string(21) "projet_description_dd" }
[1]=> array(6) 
{ ["val"]=> string(4) "test" ["nom"]=> string(9) "Lucarelli" ["field"]=> string(21) "projet_description_dd" ["table"]=> string(2) "dd" ["id"]=> string(1) "6" ["type"]=> string(10) "details_dd" }
[2]=> array(5)
{ ["val"]=> string(198) "et encore un!!! ;) re petit test histoire de voire les ascenseurs et le nombre de message non lu, surtout s'il met bien les s!!! Voila voila, Je reviens à la ligne pour voire mon foreach Seb" ["nom"]=> string(0) "" ["field"]=> string(3) "msg" ["table"]=> string(3) "msg" ["id"]=> string(1) "6" } }

J'espère que c'est ce que tu attendais pour le "mis en forme"

Merci!
samedi 7 mars 2009 à 10:28:39 | Re : Fatal error: Cannot use object of type search as array in /home/...

sebshiva

Oups, j'ai oublié...
Je veux pouvoir trier par 'nom' .
count($FindObject->ResultFind) me donne 1, même s'il y a 10 résultats, je ne comprends pas pour quoi je n'arrive plus à accéder aux valeurs alors qu'elles y sont bien! (var_dump)
samedi 7 mars 2009 à 10:28:40 | Re : Fatal error: Cannot use object of type search as array in /home/...

malalam

Administrateur CodeS-SourceS
ca va pour la mise en forme :-) Par contre, je n'ai pas compris l'ordre de tri désiré, en fonction de la recherche ?

1 2 3

Cette discussion est classée dans : table, name, find, result, meta


Répondre à ce message

Sujets en rapport avec ce message

trier un tableau [ par jchbt ] Salut,j'ai le code suivant qui me sert a afficher un tableau, et je cherche a faire en sorte que les colonnes se trient automatiquement (uniquement or recherche d une id sur 3 tables [ par Teclis01 ] voici l'erreurParse error: parse error, unexpected T_ELSE voici le code!$table="etcitem";  $query = "SELECT * FROM $table WHERE item_id= $item";  $res Probleme Récursivité [ par Grogan ] Bonjour,Je suis entrain d'écrire une fonction qui me permet d'afficher tout les liens contenu dans une de mes tables de base de données. Ces liens son selectionner les enregistrements d'une base de données mysql [ par lucky82 ] svp aidez moi, j'ai beau essayé de trouver le pb de ce code php qui cherche à selectionner les enregistrements d'une table appelé 'groupe' , cette tab meta name personnalisée avec un site dynamique [ par deud5 ] Bonjour,J'ai créé un site dynamique PHP/SQL et j'aimerai faire un referencement naturel optimal.J'ai donc fais de l'URL Rewriting pour que chaques pag validation date formulaire connexion php filemaker [ par johnchahine ] Bonjour,  je fais un petit point sur le contexte :je travail sur de la publication web de base de données avec filemaker et dreamweaver via un API php urgent svp [ par anistabbabi ] salut tousmon problème ce que je suis en train de faire une suppression multiple avec des checkbox:mais lorsque j'execute mon code il m'affiche le mes aide comment faire des autres tableau dans cette base qui est crée automatiquement [ par anissaied ] Principale GESTIONDECLIENT <?php $connect=mysql_connect("localhost", "root", "") or information_shema + valeur de la ligne [ par Annadrill ] Bonsoir,j'essaie de faire un script, qui aille chercher les différents champs dans une table d'une BDDet qui me crée un formulaire en rapport a ma tab executer commande [ par loyousse ] Resalut je voudrais savoir comment faire pour dans un programme php executer une commande DOS comme "find / -name .......", je veux récupérer tous le


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales