存储在数据库中的多页会话

时间:2012-11-23 23:20:50

标签: php sql database session-variables

我正在尝试设置一个简单的多页表单,使用会话稍后存储在多个表的数据库中。

然而,我似乎遇到了一个问题。当最后一页的值发布到数据库时,会话变量不会。

请注意..我和我的项目合作伙伴都是php / sql的新手,可能没有像我们应该的那样在课堂上付出太多的关注。大多数代码都是随机抛出的。并且发现问题似乎并不是我们的强项。

第一页/ b_tickets.php (简单的html表单,其值为'ticket_a','ticket_k'和'ticket_vip')

第二页/ b_rooms.php

    <?php
session_start();

$_SESSION['ticket_a'] = $_POST['ticket_a'];
$_SESSION['ticket_k'] = $_POST['ticket_k'];
$_SESSION['ticket_vip'] = $_POST['ticket_vip'];
?>

第三页/ b_ucp.php

<?php
session_start();

$_SESSION['room_s'] = $_POST['room_s'];
$_SESSION['room_s_extra'] = $_POST['room_s_extra'];
$_SESSION['room_d'] = $_POST['room_d'];
$_SESSION['room_d_extra'] = $_POST['room_d_extra'];
$_SESSION['room_3'] = $_POST['room_3'];
$_SESSION['room_3_extra'] = $_POST['room_3_extra'];
$_SESSION['room_10'] = $_POST['room_10'];
$_SESSION['room_10_extra'] = $_POST['room_10_extra'];
$_SESSION['pension'] = $_POST['pension'];
?>

导致

insert_ucp.php

(此时前面变量的回声§_SESSION显示它们实际上仍然存储。)

<?php
session_start();

$con = mysql_connect("localhost","XX","XX");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("fatcity", $con);



$sql="INSERT INTO tickets (ticket_a, ticket_k, ticket_vip)
VALUES
('$_SESSION[ticket_a]','$_SESSION[ticket_k]','$_SESSION[ticket_vip]')";

$sql="INSERT INTO rooms (room_s, room_s_extra, room_d, room_d_extra, room_3, room_3_extra, room_10, room_10_extra, pension)
VALUES
('$_SESSION[room_s]','$_SESSION[room_s_extra]','$_SESSION[room_d]','$_SESSION[room_d_extra]','$_SESSION[room_3]','$_SESSION[room_3_extra]','$_SESSION[room_10]','$_SESSION[room_10_extra]','$_SESSION[pension]')";


$sql="INSERT INTO ucp (title, name, n_family, adress, a_housenumber, continent, country, province, region, city, telephone, email, password,  payment, client, comment)
VALUES
('$_POST[title]','$_POST[name]','$_POST[n_family]','$_POST[adress]','$_POST[a_housenumber]','$_POST[continent]','$_POST[country]','$_POST[province]','$_POST[region]','$_POST[city]','$_POST[telephone]','$_POST[email]','$_POST[password]','$_POST[payment]','$_POST[client]','$_POST[comment]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con);
?>

此时问题实际上并不是关于我们在php / sql中有多可怕 - 谢谢你......我们已经想到了这一点。我们的截止日期只有三天......

但是为什么会话变量没有保存到数据库中。我们究竟在俯瞰什么?

提前非常感谢..

3 个答案:

答案 0 :(得分:1)

每次运行查询!!!

您创建变量,然后将其覆盖2次而不是执行它

应该是:

$sql = 'smth';
mysql_query($sql);
$sql = 'smth';
mysql_query($sql);
$sql = 'smth';
mysql_query($sql);

你有

$sql = 'smth';
$sql = 'smth';
$sql = 'smth';
mysql_query($sql);

正如我所说,不要使用mysql_ *。并且您的代码允许sql注入

答案 1 :(得分:0)

我看到的第一个问题是,$sql变量在最后一段代码中被覆盖了2次。因此,只有最后一个查询被执行。

其次,您应该使用此语法将非tribial vars注入字符串:"INSERT ... ${someArray[someKey]} ..." - 注意花括号。这不是必需的,但它可以帮助您避免将来遇到麻烦。

第三,清理所有输入数据!在最后一个代码示例中,您将有SQL injection

最后,不需要在每个文件中session_start() - 只需将其放在引导文件中require_once即可。

答案 2 :(得分:0)

我同意E_p,因为只有一个查询会被执行。做他建议的事情将允许你的所有查询都执行。

您可能还想查看一下您的表格,只需查看您的查询结构我发现它们没有任何问题,但您最终可能很难获得想要的信息。我可能是错的,因为你没有发布你的表格结构,也不是你的问题,但它只是我注意到并想到我会分享的东西。您的表看起来不像是通过任何外键相互连接。您的项目可能不需要这样做,但是如果您需要提取与所有ticket_a条目相关的所有表单数据,那么您将只获得与ticket_a列对应的sessionID列表,而不包含“rooms”或“upc”中的任何信息'表。如果这就是你想要的那么它就好了,否则你可能想要研究它。