使用Submit按钮通过PHPBB更新MySQL数据库?
我将phpbb集成到我的网站中,我需要做一些更改。我正试图通过“提交”按钮从另一个数据库更新我的数据库条目。 在我的数据库中,我有两个表。第一个名为“用户”的表 第二个名为“服务器”,我有以下内容:使用Submit按钮通过PHPBB更新MySQL数据库?,php,mysql,phpbb3,Php,Mysql,Phpbb3,我将phpbb集成到我的网站中,我需要做一些更改。我正试图通过“提交”按钮从另一个数据库更新我的数据库条目。 在我的数据库中,我有两个表。第一个名为“用户”的表 第二个名为“服务器”,我有以下内容: id name 1 USA 2 EUROPE 3 GLOBAL 现在,因为我改为phpbb(我以前有一个普通的php系统登录),所以我必须改变这一点: if (isset($_POST['joinglobal'])) { /* * -----------
id name
1 USA
2 EUROPE
3 GLOBAL
现在,因为我改为phpbb(我以前有一个普通的php系统登录),所以我必须改变这一点:
if (isset($_POST['joinglobal'])) {
/*
* -------------------------------------------------------------------------------
* Securing against Header Injection
* -------------------------------------------------------------------------------
*/
foreach($_POST as $key => $value){
$_POST[$key] = _cleaninjections(trim($value));
}
require '../../assets/setup/db.inc.php';
/*
* -------------------------------------------------------------------------------
* User Joins
* -------------------------------------------------------------------------------
*/
$sql = "UPDATE phpbb5u_users AS u CROSS JOIN server AS s SET u.server = s.id WHERE u.user_id = ? AND s.name = 'GLOBAL'";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
$_SESSION['ERRORS']['scripterror'] = 'SQL ERROR';
header("Location: ../");
exit();
}
else {
mysqli_stmt_bind_param($stmt, "i", $_SESSION['user_id']); }
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$_SESSION['STATUS']['joinstatus'] = 'Joined to GLOBAL';
header("Location: ../");
exit();
mysqli_stmt_close($stmt);
mysqli_close($conn);
}
else {
header("Location: ../");
exit();
}
我的标题中已包含此内容:
<?php
define('IN_PHPBB', true);
$phpbb_root_path = 'forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>
注意:该接口明显不太冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u查询
接口混淆,因为缺少单个i
可能会导致问题。使用这种风格:$db=newmysqli(…)
和$db->prepare(“…”)
过程接口是PHP4时代的产物,不应在新代码中使用。此外,过程接口没有那么严格的错误检查和报告,阻碍了调试工作。此外:这种“针对头注入的安全保护”代码可能是垃圾。在100个案例中,有99个只是在你的价值观上挥舞着魔杖,并称之为“安全”,但没有任何用处。看到交叉连接是不寻常的。通常,您会看到左连接
或右连接
或在极少数情况下外部连接
,但交叉连接
仍然是一种罕见的情况。如果您想在更新之前拒绝无效的服务器名称,这看起来像是左连接
或右连接
的直接例子。提示:许多问题都可以通过检测和解决,因此简单错误导致的错误不容易被忽略。毫无例外,您必须密切关注返回值,其中许多表示您必须解决或向用户报告的问题。异常允许更复杂的流控制,因为它们可以“冒泡”到代码的其他部分,以便更方便地处理它们。如果服务器名称有一个占位符值,并且输入值一致,例如数据库中的EUROPE
和value=“EUROPE”,则解决这一问题会容易得多
在表单上。这是一种选择吗?如果是这样,只需将该列绑定到该值即可。
<?php
define('IN_PHPBB', true);
$phpbb_root_path = 'forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>
<button class="btn btn-primary btn-lg" type="submit" value="joineurope" name='joineurope'>Join NOW!</button>
$submit = request_var('submit', '');
if($submit)
{
$serverid = $user->data['server'];
$sql_ary = array (
"server" => 3 );
$sql = 'UPDATE ' . phpbb5u_users . '
SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
WHERE user_id = ' . (int) $user_id;
$db->sql_query($sql);
}