Php:获取当前会话ID或mysqli_insert_id()的问题

时间:2014-09-25 10:16:16

标签: php mysql

大家好,我到处搜索答案,没有什么能满足代码:/

这是我的数据库表:

1   Form_ID int(11)     AUTO_INCREMENT  
2   identifiant varchar(10) 
3   Ch  varchar(6)  
4   Date    date            
5   Unite   varchar(10)     
6   Catsoin varchar(30)         
7   Soin    varchar(30)     
8   Duree   varchar(10)     
9   Debutsoin   time        
10  Finsoin     time

我通过php Form在我的数据库中进行注射,我的Insert工作得非常好。 但为了提高效率,我需要检索用户当前的Session_id

这是我创建的形式:' $ _SESSION [' ID'] = $ _ POST [' Identifiant'];' 这种用法的问题在于,当重新加载页面时,浏览器会创建一个新会话,然后松开会话ID,因此这种方法对我来说不起作用。

mysqli_insert_id()的用武之地。 在数据库表中,我创建了AUTO_INCREMENT属性Form_ID,这是唯一的。 因此,我需要使用 mysqli_insert_id()来捕获客户端进行插入时创建的唯一Form_ID。 那是我尝试失败的原因: file: InsertionBD.php

<?php

include('include/connexion.php');

$query = "Insert into `formulaire`";
$id = mysqli_insert_id($connexion);

IF(isset($_POST['UnitList'])... and so on


 ?>

并试图重新抓住这个插入的Id。 If(isset())函数对输入类型Button做出反应,因此当用户点击它时会在php服务器端创建一个反应,并且在这种特殊情况下我需要 mysqli_insert_id( )**工作 档案:** Form.php     

session_start();
include('include/config.php');
include('include/connexion.php');
$id=mysqli_insert_id($connexion);

$result = mysqli_query($connexion,"SELECT `identifiant`,`Ch`,`Date` FROM `formulaire` where 
                                    `Form_ID` = '".$id."'
                                     "); 

If(isset($_POST['SelectID']))

    {

        //$_SESSION['id'] = mysqli_insert_id($connexion); -> not working since Session reload
        echo "processing...<br/>";
        echo "ID of last inserted record is: ".mysqli_insert_id($connexion);
        while($row = mysqli_fetch_array($result)) 
        {
                 $Recupid = $row['identifiant'] ;
                $RecupCh = $row['Ch'] ;
                $RecupDate = $row['Date'];
            echo "<br><b>Votre identifiant :</b>". $Recupid. 
                 "<br><b> Le code horaire choisi :</b> ".$RecupCh.
                 "<br><b> La date de la prestation : </b>".$RecupDate. 
                 "<br><b> L'horaire de la prestation : </b>".$debut." <b>à</b> ".$fin ;
            echo "<br>";

        }
    }
 else
     {
        //I used superglobal $_Sessions before this code on this page but I did not show the code to simplify the view but session works fine 
        echo "<b>Your ID :</b>".$_SESSION['id']."<br />";
        echo "<b>Your Code horaire  :</b>".$_SESSION['Code']."<br />";
        echo "<b>Your Date  : </b>".$_SESSION['Date']."<br />";
        echo "<b>Your First Plage horaire :</b>".$_SESSION['Debut']."<br />";
        echo "<b>Your Second Plage horaire :</b>".$_SESSION['Fin']."<br />";
     }

返回值为:

...处理 最后插入记录的ID为:0

所以我明白我的mysqli_insert_id()函数指向什么? 我该如何收回特定的Form_ID?

提前感谢您的帮助

2 个答案:

答案 0 :(得分:0)

来自手册http://php.net/manual/en/mysqli.insert-id.php

  

mysqli_insert_id()函数返回查询生成的ID   包含具有AUTO_INCREMENT属性的列的表。如果是最后一个   查询不是INSERT或UPDATE语句,也不是修改后的表   没有具有AUTO_INCREMENT属性的列,这个   函数将返回零。

您在使用mysqli_insert_id()之前运行的最后一个查询是选择

$result = mysqli_query($connexion,"SELECT `identifiant`,`Ch`,`Date` FROM `formulaire` where 
                                    `Form_ID` = '".$id."'
                                     "); 

所以预期回报为0

在运行插入后,您需要立即获得mysqli_insert_id()的值。

修改

  

If(isset())函数对输入类型Button做出反应,以便何时   用户点击它会在php服务器端创建一个反应

也许您可以查看将id添加到输入按钮提交的表单中,以便您可以访问其发布到的页面上的值?

也许使用隐藏的字段,如:

<input type="hidden" name="formulaire_id" value="<?php echo $id;?>" />

答案 1 :(得分:0)

哦,我的G. 我不得不做出一个简单的选择

真正的问题是当用户在Form.php中插入所有数据时,他有一个选择: 要选择重做另一个表单插入 - &gt;我把他送回Form.php 要结束这个过程,因为他不需要插入任何其他内容 - &gt;我把他送到主页

问题在于,当您使用Sessions时,如果您将用户重定向到同一页面,在我的案例中Form.php会创建一个新的sesison,然后所有数据都将消失。 所以解决方案:我创建了第二个Form2.php,这里是重用所需数据的代码: form.php的     

session_start();

include('include/config.php');
include('include/connexion.php');

$_SESSION['id']=$_POST['Identifiant'];
$_SESSION['Code']=$_POST['CodeHoraire'];
$_SESSION['Date']=$_POST['the_date'];
....
?>

然后文件InsertionBD.php做一个基本的INSERT INTO ....,在这个页面中我用Header.Location重定向到一个重定向页面,用户在其中选择:返回主页或执行另一次插入。 如果他选择&#34;另一次插入&#34; : - &GT;用户重定向到Form2.php:

<?php

session_start();



include('include/config.php');
include('include/connexion.php');

echo "Your id: ".$_SESSION['id'];
echo "<br>Your Code: " .$_SESSION['Code'];
echo "<br>Your Date: ".$_SESSION['Date'];

&GT;

这是一个基本的(我不得不说的)会话故事,我的问题确实存在于概念中而不是技术中。我希望在这种情况下帮助其他人。

我感谢Ian Kenney和Andrew的关注:)