大家好,我到处搜索答案,没有什么能满足代码:/
这是我的数据库表:
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?
提前感谢您的帮助
答案 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的关注:)