Php Mysql\u fetch\u行未使用多个结果填充会话数组

Php Mysql\u fetch\u行未使用多个结果填充会话数组,php,mysql,session-variables,Php,Mysql,Session Variables,您好,这是我的解决方案,因为我听取了一些关于SQL语句的建议。。。谢谢大家 $connection = ConnectionBD(); $tag = $_SESSION['nomUtilisateur']; $panier= array(); $requete = mysql_query("SELECT * FROM cours INNER JOIN elevecours ON cours.idcours = elevecours.IDCours WHERE elevecours.IDEleve

您好,这是我的解决方案,因为我听取了一些关于SQL语句的建议。。。谢谢大家

$connection = ConnectionBD();
$tag = $_SESSION['nomUtilisateur'];
$panier= array();
$requete = mysql_query("SELECT * FROM cours INNER JOIN elevecours ON cours.idcours = elevecours.IDCours WHERE elevecours.IDEleve= '$tag'",$connection);
$H = 0;
        if(mysql_num_rows($requete) != 0)
        {
            while($row = mysql_fetch_row($requete))
            {
                //$panier[] = $row;
                $_SESSION['Panier']['Id'][$H]        = $row[0];
                $_SESSION['Panier']['CodeCours'][$H] = $row[1];
                $_SESSION['Panier']['Titre'][$H]     = $row[2];
                $_SESSION['Panier']['Prealable'][$H] = $row[3];
                $_SESSION['Panier']['NbHeure'][$H]   = $row[4];
                $_SESSION['Panier']['Session'][$H]   = $row[5];
                $_SESSION['Panier']['Credit'][$H]    = $row[6];
                $H ++;
            }
        }
        mysql_close($connection);

您需要在循环中的每个迭代中获取一次行

for($i = 0; $i < mysql_num_rows($req); $i++) {
     $resultat = mysql_fetch_row($req);
     //the rest of your code goes here
}
for($i=0;$i
在第二个foreach循环中设置$H=0;然后$H++在同一个循环中,这将不会正确增加,因为下次它再次经过循环时,$H=0;语句将导致该值变为0,因此会一直覆盖数据,直到循环完成,并且最后只剩下一个$\u会话值

                for($j = 0; $j < count($panier); $j++)
                { 

                        if($resultat[$i] == $panier[$j][0])
                        {
                            $H = 0; <-- sets to zero on every interation 
                            $_SESSION['Panier']['Id'][$H] = $result[0];
                            $_SESSION['Panier']['CodeCours'][$H] = $result[1];
                            $_SESSION['Panier']['Titre'][$H] = $result[2];
                            $_SESSION['Panier']['Prealable'][$H] = $result[3];
                            $_SESSION['Panier']['NbHeure'][$H] = $result[4];
                            $_SESSION['Panier']['Session'][$H] = $result[5];
                            $_SESSION['Panier']['Credit'][$H] = $result[6];
                            $H++;
                        }
                }
for($j=0;$j$H=0;这些是我的测试变量

   $session = array(); 
   $panier = array(array(1,'one'),array(2,'two'),array(3,'three'),);

   $req = array(
         array(1,'one','Titre1','Prealable1','NbHeure1','Session1','Credit1'),
         array(2,'two','Titre2','Prealable2','NbHeure2','Session2','Credit2'),
         array(3,'three','Titre3','Prealable3','NbHeure3','Session3','Credit3'),
         array(4,'four','Titre4','Prealable4','NbHeure4','Session4','Credit4'),
         array(5,'five','Titre5','Prealable5','NbHeure5','Session5','Credit5'),);
我写的代码不完全依赖于数据库和数据,因为我不知道它是什么…不知道。切换这些代码行以使用数据库的东西

   // $req = mysql_query("SELECT * FROM cours", $connection);  uncomment this line for your code

   if ($req!==false) 
   {
      foreach( $req as $i => $resultat )             // testing row, remove for real
      // while( $resultat = mysql_fetch_row($req) )  // real row, uncomment for you 
      {
         $compare = $resultat[0];  
         // we will be using $compare to see if this row
         // matches one in $panier.. this needs to be changed
         // appropriately.  I don't have enough info to define it....
         // this needs to be a unique field, or it should be 
         // it is going to be used like this:  if($resultat[$i] == $panier[$j][0])

         $result[ $compare ] = $resultat;
      } 

      $hi = 0;  
      foreach( $panier as $index => $panier_row )
      {                        
         $compare = $panier_row[0]; 

         if (isset($result[$compare]))
         {
            $H = 0;

            // change $session to $_SESSION for your code...  
            $session['Panier']['Id'][$hi][$H]        = $result[$compare][0];
            $session['Panier']['CodeCours'][$hi][$H] = $result[$compare][1];
            $session['Panier']['Titre'][$hi][$H]     = $result[$compare][2];
            $session['Panier']['Prealable'][$hi][$H] = $result[$compare][3];
            $session['Panier']['NbHeure'][$hi][$H]   = $result[$compare][4];
            $session['Panier']['Session'][$hi][$H]   = $result[$compare][5];
            $session['Panier']['Credit'][$hi][$H]    = $result[$compare][6];
            $H++;
            $hi++;  
         }
      }        
   }   
我的结果显示,
$session['Panier']['Credit']
为1、2、3而不是4或5设置了三个对象,因为它们不匹配
$Panier

在所有这些结束时,
$session
中有什么内容:

array (
  'Panier' => 
  array (
    'Id' => 
    array (
      0 => 
      array (
        0 => 1,
      ),
      1 => 
      array (
        0 => 2,
      ),
      2 => 
      array (
        0 => 3,
      ),
    ),
    'CodeCours' => 
    array (
      0 => 
      array (
        0 => 'one',
      ),
      1 => 
      array (
        0 => 'two',
      ),
      2 => 
      array (
        0 => 'three',
      ),
    ),
    'Titre' => 
    array (
      0 => 
      array (
        0 => 'Titre1',
      ),
      1 => 
      array (
        0 => 'Titre2',
      ),
      2 => 
      array (
        0 => 'Titre3',
      ),
    ),
    'Prealable' => 
    array (
      0 => 
      array (
        0 => 'Prealable1',
      ),
      1 => 
      array (
        0 => 'Prealable2',
      ),
      2 => 
      array (
        0 => 'Prealable3',
      ),
    ),
    'NbHeure' => 
    array (
      0 => 
      array (
        0 => 'NbHeure1',
      ),
      1 => 
      array (
        0 => 'NbHeure2',
      ),
      2 => 
      array (
        0 => 'NbHeure3',
      ),
    ),
    'Session' => 
    array (
      0 => 
      array (
        0 => 'Session1',
      ),
      1 => 
      array (
        0 => 'Session2',
      ),
      2 => 
      array (
        0 => 'Session3',
      ),
    ),
    'Credit' => 
    array (
      0 => 
      array (
        0 => 'Credit1',
      ),
      1 => 
      array (
        0 => 'Credit2',
      ),
      2 => 
      array (
        0 => 'Credit3',
      ),
    ),
  ),
)
但就个人而言……您应该使用
mysql\u fetch\u assoc
并这样做:

   $session = array(); 
   $panier = array(array(1,'one'),array(2,'two'),array(3,'three'),);

   $req = array(
        array('id'=>1,'var'=>'one','Titre'=>'Titre1','Prealable'=>'Prealable1','NbHeure'=>'NbHeure1','Session'=>'Session1','Credit'=>'Credit1'), 
        array('id'=>2,'var'=>'two','Titre'=>'Titre2','Prealable'=>'Prealable2','NbHeure'=>'NbHeure2','Session'=>'Session2','Credit'=>'Credit2'), 
        array('id'=>3,'var'=>'thr','Titre'=>'Titre3','Prealable'=>'Prealable3','NbHeure'=>'NbHeure3','Session'=>'Session3','Credit'=>'Credit3'), 
        array('id'=>4,'var'=>'fou','Titre'=>'Titre4','Prealable'=>'Prealable4','NbHeure'=>'NbHeure4','Session'=>'Session4','Credit'=>'Credit4'), 
        array('id'=>5,'var'=>'fiv','Titre'=>'Titre5','Prealable'=>'Prealable5','NbHeure'=>'NbHeure5','Session'=>'Session5','Credit'=>'Credit5'),); 


   // $req = mysql_query("SELECT * FROM cours", $connection); 

   if ($req!==false) 
   {
      foreach( $req as $i => $resultat )             // testing row, remove for real
      // while( $resultat = mysql_fetch_assoc($req) )  // real row, uncomment for you 
                                                       //  mysql_fetch_assoc !!
      {
         $compare = $resultat['id'];  
         // we will be using $compare to see if this row
         // matches one in $panier.. this needs to be changed
         // appropriately.  I don't have enough info to define it....
         // this needs to be a unique field, or it should be 

         $result[ $compare ] = $resultat;
      } 

      foreach( $panier as $index => $panier_row )
      {                        
         $compare = $panier_row[0]; 

         if (isset($result[$compare]))
         { 
            $session[] = $result[$compare];  
         }
      }        
   }   
这是
$session

array (
  0 => 
  array (
    'id' => 1,
    'var' => 'one',
    'Titre' => 'Titre1',
    'Prealable' => 'Prealable1',
    'NbHeure' => 'NbHeure1',
    'Session' => 'Session1',
    'Credit' => 'Credit1',
  ),
  1 => 
  array (
    'id' => 2,
    'var' => 'two',
    'Titre' => 'Titre2',
    'Prealable' => 'Prealable2',
    'NbHeure' => 'NbHeure2',
    'Session' => 'Session2',
    'Credit' => 'Credit2',
  ),
  2 => 
  array (
    'id' => 3,
    'var' => 'thr',
    'Titre' => 'Titre3',
    'Prealable' => 'Prealable3',
    'NbHeure' => 'NbHeure3',
    'Session' => 'Session3',
    'Credit' => 'Credit3',
  ),
)

你的问题是什么?你可以不增加
$R
而只做
$panier[]=…
,它会在数组上给你一个连续的数字索引。你发现
while($row=mysql\u fetch\u row($requete))
$resultat=mysql\u fetch\u row($req)之间的明显区别了吗
?这是两项…?您希望得到两个结果,对吗?
$panier[0]
是第一项,
$panier[1]
是第二行/result/thing…
//这就是显示var_dump:array(2){[0]=>array(1)
(我很困惑这里的目标是什么…)
mysql.*
函数不再维护,不应在任何新的代码库中使用。它正在被淘汰,取而代之的是更新的API。相反,您应该与或一起使用。
if($resultat!==false){while($resultat=mysql.\u fetch_row($req)){…}
更好…
$result
在他上面的代码中没有定义。(我很沮丧)…不要给出包含它的解决方案。
$result
为空。
$resultat
是单行,而不是2D数组(顺便说一句)考虑到$resultat应该是$result这一疑问,代码在当前状态下根本不应该工作。不管怎样,问题是为什么只填充了一个会话值。答案指出他在for循环中重置了索引。但这不是问题所在。在最内部的代码中,
$result
不是递增的,而
\u会话
是递增的,所以最终的计划只是让
计数($panier)
$result
的副本复制到
\u会话
?根据一篇评论文章(我想)说,
$panier
,在我们知道之前,任何人都无法回答这个问题,他们希望返回许多行,希望与
$panier
进行比较,并将至少一行从数据库复制到
\u会话中
。问题是…他们的变量有一半未定义。他们没有返回多个结果,因为他们只执行一次
mysql\u获取行
,我不知道他们实际拥有多少数据ant在
\u session
…是的,就像有人说的,他们应该在查询中过滤,而不是使用PHP数组。但是谁知道呢…在问题$panier=array();的代码的第二部分中,通过引用传递到saveBasket(&$panier,$connection)。所以让我们假设$result=mysql\u fetch\u行。然后$result[0]将在索引0处收集当前行数组的值,以此类推。不确定误解是什么?他没有问“为什么我的代码不起作用”,而是问“为什么我的会话只存储一个值”。您很好地指出,这个问题无法从“修复我的代码”中得到回答透视图,但他没有问这个问题。你好,我找到了解决方案,并编辑了我的帖子。非常感谢你。