gpt4 book ai didi

php - 跨多个页面的 session 表单数据并插入到mysql中?

转载 作者:行者123 更新时间:2023-11-29 02:29:53 26 4
gpt4 key购买 nike

有人可以帮我吗,我正在尝试提交超过 3 页的表格。每个都有 3 个文本区域字段,我正在使用 session 开始来回显其他页面的表单数据。

所以最后我所要做的就是回显表单数据并将其插入到 mysql 表 ptb_registrations 中。

由于某种原因,虽然它不工作,但我收到更新数据库错误的错误。我已经为此工作了几个小时,我很抱歉地说,我无法弄清楚。请有人帮助我并告诉我哪里可能出错了。

第 1 页:

<?php
session_start();
?>

<form class="" method="post" action="register_p2.php">
<input type="text" id="first_name" name="first_name" placeholder="First Name" />
<input type="text" id="last_name" name="last_name" placeholder="Last Name" />
<input type="email" id="email" name="email" placeholder="Email" />
<input type="submit" value="Next >" />
</form>

第 2 页:

<?php
session_start();
// other php code here

$_SESSION['first_name'] = $first_name;
$_SESSION['last_name'] = $last_name;
$_SESSION['email'] = $email;
?>
<form name="myForm" method="post" action="register_p3.php" onsubmit="return validateForm()" >
<input type="text" id="date_of_birth" name="date_of_birth" placeholder="D.O.B 10/02/1990" />
<input type="text" id="number" name="number" placeholder="Mobile Number" />
<input type="text" id="confirm" name="confirm" placeholder="Are You a UK resident?" />
<input type="submit" value="Next >" />
</form>

第 3 页:

<?php
session_start();
// other php code here

$_SESSION['first_name'] = $first_name;
$_SESSION['last_name'] = $last_name;
$_SESSION['email'] = $email;
$_SESSION['dat_of_birth'] = $date_of_birth;
$_SESSION['number'] = $number;
?>

<form class="" method="post" action="register_p4.php">
<input type="text" id="display_name" name="date_of_birth" placeholder="Display Name" />
<input type="password" id="password" name="password" placeholder="Password" />
<input type="password" id="password2" name="password2" placeholder="Password (Confirm)" />
<input type="submit" value="Next >" />
</form>

第 4 页:(mysql 函数)

<?php
session_start();
// other php code here

$_SESSION['first_name'] = $first_name;
$_SESSION['last_name'] = $last_name;
$_SESSION['email'] = $email;
$_SESSION['dat_of_birth'] = $date_of_birth;
$_SESSION['number'] = $number;
$_SESSION['display_name'] = $display_name;
$_SESSION['password'] = $password;
?>

<?php
////// SEND TO DATABASE


/////////////////////////////////////////////////////////

// Database Constants
define("DB_SERVER", "localhost");
define("DB_USER", "root");
define("DB_PASS", "");
define("DB_NAME", "database");

// 1. Create a database connection
$connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
if (!$connection) {
die("Database connection failed: " . mysql_error());
}

// 2. Select a database to use
$db_select = mysql_select_db(DB_NAME,$connection);
if (!$db_select) {
die("Database selection failed: " . mysql_error());
}
//////////////////////////////////////////////////////////////
$query="INSERT INTO ptb_registrations (ID,
first_name,
last_name,
email,
date_of_birth,
contact_number,
display_name,
password
)
VALUES('NULL',
'".$first_name."',
'".$last_name."',
'".$email."',
'".$date_of_birth."',
'".$number."',
'".$display_name."',
'".$password."'
)";
mysql_query($query) or die ('Error updating database');
?>
<?php
function confirm_query($result_set) {
if (!$result_set) {
die("Database query failed: " . mysql_error());
}
}
function get_user_id() {
global $connection;
global $email;
$query = "SELECT *
FROM ptb_registrations
WHERE email = \"$email\"
";
$user_id_set = mysql_query($query, $connection);
confirm_query($user_id_set);
return $user_id_set;
}
?>
<?php
$user_id_set = get_user_id();
while ($user_id = mysql_fetch_array($user_id_set)) {
$cookie1 = "{$user_id["id"]}";
setcookie("ptb_registrations", $cookie1, time()+3600); /* expire in 1 hour */

}
?>

<?php include ('includes/send_email/reg_email.php'); ?>

<? ob_flush(); ?>

最佳答案

please can someone help me and show me where i might be going wrong.

你的代码本身就很糟糕。 因为:

1) 你混合了 session 和数据库的职责

2) 您使用 mysql_query() 来查询您不希望有结果集的查询。对于 INSERT、UPDATE、DELETE 查询,应使用 mysql_unbuffered_query()

3) 不使用 mysql_real_escape_string() 转义值,这样容易受到 SQL 注入(inject)攻击

4) 你使用过程代码和全局状态

5) 您使用已弃用的 mysql_* 函数而不是 PDOMySQLi

6) 在此处使用字符串连接而不是 sprintf():

 )
VALUES(
'".$first_name."',
'".$last_name."',
'".$email."',
'".$date_of_birth."',
'".$number."',
'".$display_name."',
'".$password."'

7) 您没有验证 $_SESSION$_POST 中的任何内容。如果您设置了变量但它们不存在怎么办?

8) 你的查询验证是错误的,在这里:confirm_query($result_set) {..

我最好就此打住。

因此,与其以这种方式编码,不如真正分离职责。

对于 session ,它应该是这样的:

文件 session.php

function seesion_init(){
if ( session_id() == '' ){
return session_start();
} else {
return true;
}
}

function session_set(array $values){
foreach($values as $key => $val){
$_SESSION[$key] = $val;
}
}

/**
* It will give you a confidence that you get an existing value
* @param string $key
*/
function session_get($key){
if ( isset($_SESSION[$key]) ){
return $_SESSION[$key];
} else {
throw new RuntimeException(sprintf('Accessed to non-existing session variable %s', $key));
}
}

文件:dbconnection.php

<?php

define('HOST', '...');
define('USER', '...');
...


function connect(){

if ( ! mysql_connect(...) ){
die('...');
}

if ( ! mysql_select_db('DB_NAME_HERE') ){
die('...');
}
}


function query($query){
return mysql_query($query); //<- Should only be used for SELECT queries
}


function ub_query($query){
return mysql_unbuffered_query($query); // <- Should only be used for INSERT, DELETE, UPDATE queries
}

function fetch($result){
return mysql_fetch_assoc($result);
}

文件:users.php

require_once('dbconnection.php');

connect();

/**
* Returns user id by his username
*
* @return array on success
* FALSE if email does not exists
*/
function get_user_id_by_email($email) {

$query = sprintf("SELECT `id` FROM `ptb_registrations` WHERE `email` = '$email' LIMIT 1", mysql_real_escape_string($email));

$result = ub_query($query);

if ( $result ){
return fetch($result);
} else {
return false;
}

}

等等。这里的概念是将每个脚本的职责分开,然后使用您需要的“部分”。

回到最初的问题

您想向表中插入一个值吗?然后首先验证这个值。问题是你不这样做。仅此而已。

关于php - 跨多个页面的 session 表单数据并插入到mysql中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com