Erreur de tableau

Résolu
bonjour,

$matrice[$donneeseffect][0] = $donneeseffect;

 if($donneestag==1){
  $matrice[$donneeseffect][1] = $matrice [$donneeseffect] [1] +1;
 }
 if($donneestag==2){
  $matrice[$donneeseffect][2] = $matrice [$donneeseffect] [2] +1;
 }
 if($donneestag==5){
  $matrice[$donneeseffect][3] = $matrice [$donneeseffect] [3] +1;
 }
 if($donneestag==6){
  $matrice[$donneeseffect][4] = $matrice [$donneeseffect] [4] +1;
 }


EDIT : Ajout des balises de code

voici mon code : il m'indique Warning: Illegal offset
mais quesqu'y vas pas
merci de votre attention

4 réponses

Résumé de la discussion

Un problème PHP porte sur l'initialisation et l'incrémentation d'un tableau multidimensionnel lors de l'enregistrement d'indices dans une matrice, et sur l'apparition d'un avertissement 'Warning: Illegal offset'. Des réponses proposées recommandent d'initialiser le tableau avec array_fill, par exemple $matrice = array_fill(1, $nbLignes, array(0, 0, 0, 0)); afin d'éviter des offsets inexistants potentiels. D'autres échanges suggèrent de clarifier l'initialisation et de vérifier la manière dont les indices 1 à 4 sont référencés, et d'utiliser des affichages pour diagnostiquer les valeurs. En complément, une approche avec PDO et gestion des erreurs peut aider à diagnostiquer d'autres cas comme des requêtes non sécurisées et améliorer la robustesse du code.

Bobot (l’IA à votre service)
  1. Modérateur
    Bonjour,

    Où as tu initialisé ton array $matrice ?
    De quelle manière ?

    1. oui : $matrice = array_fill ( 1 , $nbLignes , array(0 , 4 , "0" ));
      1. Modérateur
        Donc... ta matrice ressemble à ça :
        Array
        (
            [1] => Array
                (
                    [0] => 0
                    [1] => 4
                    [2] => 0
                )
        
            [2] => Array
                (
                    [0] => 0
                    [1] => 4
                    [2] => 0
                )
        
            [3] => Array
                (
                    [0] => 0
                    [1] => 4
                    [2] => 0
                )
        
        )
        


        .. comme tu peux le voir .. les "indexes" commencent à ZERO et non à 1 .... (et vont jusqu'à 2 )
        Donc
        if($donneestag==5){
          $matrice[$donneeseffect][3] = $matrice [$donneeseffect] [3] +1;
         }
         if($donneestag==6){
          $matrice[$donneeseffect][4] = $matrice [$donneeseffect] [4] +1;
        

        Ne peuvent pas fonctionner.... 3 et 4 sont en dehors de la dimension de ton array
      2. oups : oky je viens de comprendre un truc merci: mais comment je fait un tableau qui depend de nombre de ligne
    2. Contributeur
      1. je sais pas comment faire avec sublime texte, sinon pour le reste j'ais une matrice qui safiche avec des 0 quand meme a la fin
      2. oups dsl lu un peut tros vite : voici l'erreur maintenant :
        Warning: Illegal offset type in /Users/alainmeo/Desktop/base.php on line 65

        Warning: Illegal offset type in /Users/alainmeo/Desktop/base.php on line 65

        Warning: Illegal offset type in /Users/alainmeo/Desktop/base.php on line 65

        Warning: Illegal offset type in /Users/alainmeo/Desktop/base.php on line 65

        Notice: Undefined offset: 0 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 0 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 0 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 0 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 0 in /Users/alainmeo/Desktop/base.php on line 94
        0

        Notice: Undefined offset: 1 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 1 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 1 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 1 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 1 in /Users/alainmeo/Desktop/base.php on line 94
        0

        Notice: Undefined offset: 2 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 2 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 2 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 2 in /Users/alainmeo/Desktop/base.php on line 94
        0
        Notice: Undefined offset: 2 in /Users/alainmeo/Desktop/base.php on line 94
        0
    3. le script en entier :
       <?php
      
      //$pass = "root";
      //$user = "root";
      //$host = "localhost";
      error_reporting(E_ALL);
      ini_set('display_errors', TRUE);
      ini_set('display_startup_errors', TRUE);
      try
      {
       $bdd = new PDO('mysql:linux_socket=/Applications/MAMP/tmp/mysql/mysql.sock;host=127.0.0.1;port=8889;dbname=teste','root','root');
       //;charset=utf8
      //$user = 'root';
      //$password = 'root';
      //$db = 'teste';
      //$host = 'localhost';
      //$port = 8889;
      
      //$link = mysqli_init();
      //$success = mysqli_real_connect(
         //$link, 
         //$host, 
         //$user, 
         //$password, 
         //$db,
        // $port
      //);
      // $user = 'root';
      //$password = 'root';
      //$db = 'inventory';
      //$host = '127.0.0.1';
      //$port = 8889;
      //$socket = 'localhost:/Applications/MAMP/tmp/mysql/mysql.sock';
      
      //$link = mysqli_init();
      //$success = mysqli_real_connect(
        // $link, 
         //$host,
         //$user, 
         //$password, 
         //$db,
         //$port,
         //$socket
      //);
      }
      catch(Exception $e)
      {
       
            die('Erreur : '.$e->getMessage());
      }
      //$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      //$compteur = 0;
      $nbLignes = $bdd->query('select count(*) from maTable');
      // ou nb d'effect
      $matrice = array_fill ( 1 , $nbLignes , array(0 ,  4  , "0" ));
      
      $reponcetag = $bdd->query('SELECT ID_tag FROM vote_tag_effect');
      $reponceuser = $bdd->query('SELECT ID_user FROM vote_tag_effect');
      $reponseeffect = $bdd->query('SELECT ID_effect FROM vote_tag_effect'); 
      while ($donneeseffect = $reponseeffect->fetch()){
      while ($donneesuser = $reponceuser->fetch()){
      while ($donneestag = $reponcetag->fetch()){
      
      
      $matrice[$donneeseffect][0] = $donneeseffect;
      
       if($donneestag==1){
        $matrice[$donneeseffect][1] = $matrice [$donneeseffect] [1] +1;
       }
       if($donneestag==2){
        $matrice[$donneeseffect][2] = $matrice [$donneeseffect] [2] +1;
       }
       if($donneestag==5){
        $matrice[$donneeseffect][3] = $matrice [$donneeseffect] [3] +1;
       }
       if($donneestag==6){
        $matrice[$donneeseffect][4] = $matrice [$donneeseffect] [4] +1;
       }
      
      
      
      //$compteur = $compteur +1;
      
      
      
      }
      }
      }
      $bdd = null;
      $nbdeffect=3;
      
      for ($i=0;$i<$nbdeffect;$i++) {
       for ($j=0;$j<=4;$j++){
         printf("%b",$matrice[$i][$j]);
         
       }
      print("\n");
      //print_r($matrice)
      }
      
      ?>
      


      EDIT : AJout des balises de code (encore.......!!! )
      1. oups dsl
      2. Modérateur
        Je ne comprend pas l'intéret de faire 3 requêtes sur la même table... alors qu'une seule suffit
        $reponcetag = $bdd->query('SELECT ID_tag FROM vote_tag_effect');
        $reponceuser = $bdd->query('SELECT ID_user FROM vote_tag_effect');
        $reponseeffect = $bdd->query('SELECT ID_effect FROM vote_tag_effect');
        


        $tesDatas = $bdd->query('SELECT ID_tag, ID_user,ID_effect  FROM vote_tag_effect');
        
      3. oky mais dans ce ca comment je diferenci les variable id tag id user et id effect?
      4. Modérateur
        regarde donc ce que fait :
        while ($donnees = $tesDatas->fetch()){
           echo "<br>ID_tag : " . $donnees['ID_tag'];
           echo "  ID_user : " . $donnees['ID_user'];
           echo " ID_effect: " . $donnees['ID_effect'];
        }
        
        
      5. oky merci