我正在尝试设置一个简单的多页表单,使用会话稍后存储在多个表的数据库中。
然而,我似乎遇到了一个问题。当最后一页的值发布到数据库时,会话变量不会。请注意..我和我的项目合作伙伴都是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中有多可怕 - 谢谢你......我们已经想到了这一点。我们的截止日期只有三天......
但是为什么会话变量没有保存到数据库中。我们究竟在俯瞰什么?
提前非常感谢..
答案 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”中的任何信息'表。如果这就是你想要的那么它就好了,否则你可能想要研究它。