【发布时间】:2013-10-08 01:42:59
【问题描述】:
我对 php 和 mysql 还很陌生,但在过去的几周里我已经取得了很多成就。我目前有一个用户填写的表单,它存储了他们提供的类别和内容。
此外,为了创建用户,我遵循了本教程 (http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL) 并拥有与页面链接的有效用户帐户和安全性。这可能是一个简单的问题,但我对如何链接我需要的功能有点困惑。
简而言之,我希望 send_post.php 中的插入行能够检测当前登录的用户并将其存储在名为“contributor”之类的行中。
mysqli_query($connect,"INSERT INTO mytable (category, contents, date)
VALUES ('$_POST[category]', '$_POST[contents]', NOW())");
所以它显然需要(类别、内容、日期、贡献者),但我不确定如何提取当前登录的用户名并将其定义为我的 send_post.php 中的“贡献者”
[通过本教程,用户名连同他们的数字 ID、电子邮件、散列密码和 salt 存储在一个名为“members”的单独表中。我知道如何调用该信息,但不知道如何获取当前用户。]
这里是完整的 send_post.php
<?php
include 'db_connect.php';
include 'functions.php';
sec_session_start();
if(login_check($mysqli) == true) {
//Connecting to sql db.
$connect=mysqli_connect("localhost","mydbusername","mydbpass","mysqldb");
header("Location: http://mysite.com/1.php");
if (mysqli_connect_errno()) { echo "Fail"; } else { echo "Success"; }
//Sending form data to sql db.
mysqli_query($connect,"INSERT INTO mytable (category, contents, date)
VALUES ('$_POST[category]', '$_POST[contents]', NOW())");
} else {
echo 'Access denied. <br/>';
}
?>
如果有任何帮助,我将不胜感激并投赞成票。谢谢
编辑,当前 send_post.php
<?php
include 'db_connect.php';
include 'functions.php';
sec_session_start();
if(login_check($mysqli) == true) {
//Connecting to sql db.
$connect=mysqli_connect("localhost","myusername","mypassword","mysqldb");
header("Location: http://mysite.com/1.php");
if (mysqli_connect_errno()) { echo "Fail"; } else { echo "Success"; }
$stmt = $mysqli -> prepare('INSERT INTO mytable (category, contents, date, userid)
VALUES (?,?,NOW(),?)');
$stmt -> bind_params('ssi', $_POST['category'], $_POST['contents'], $_SESSION['user_id']);
$stmt -> execute();
} else {
echo 'Access denied. <br/>';
}
?>
编辑 2,错误:(实际上我得到了 3)
[07-Oct-2013 21:05:54] PHP 致命错误:在第 22 行调用 /home2/mememe/public_html/mysite/send_post.php 中未定义的方法 mysqli_stmt::bind_params()
[2013 年 10 月 7 日 21:05:54] PHP 警告:session_start() [function.session-start]:无法发送会话缓存限制器 - 标头已发送(输出开始于 /home2/mememe/public_html/mysite /index_3.php:7) 在第 12 行的 /home2/mememe/public_html/mysite/functions.php 中
[2013 年 10 月 7 日 21:05:54] PHP 警告:session_regenerate_id() [function.session-regenerate-id]:无法重新生成会话 ID - 标头已在 /home2/mememe/public_html/mysite/functions 中发送.php 在第 13 行
编辑 3:回声返回
阵列([USER_ID] => 3 [用户名] => THEUSERNAME [login_string] =>吨散列的Infor像4eb86947c8007ef1d0bb658168a76affa5c666518d3b58d76bf3040dc36d7a399c6c110a8c7f0d9f03d2b4d63271bd1335c61311edb152670f010f04583e7578) P>
【问题讨论】:
-
首先,您对 SQL 注入持开放态度。第二:我没有听说过 sec_session_start() 函数。它能做什么?第三: header("Location: mysite.com/1.php"); 将您重定向到另一个页面,因此下面的代码不会永远运行。
-
一方面,您需要将
sec_session_start();替换为session_start();- 我从来没有听说过sec_session_start();并且“IT”需要在您的所有文件中,包括文件为好吧。 -
我还没有学会理智,一旦我了解了其中一些核心概念,我就会去追求。 sec_session_start 是一种自定义安全方式来启动位于我链接的教程中的 php 会话。标题链接到表单所在的同一页面。当用户提交类别和内容时,页面会刷新,并在提交后立即显示在同一页面上的表格中。它..工作正常吗?在我询问的问题上仍然需要帮助
-
以及如何处理
header("Location: http://mysite.com/1.php"); -
再一次,“sec_session_start”只是一个自定义安全会话函数,在我发布的教程中的 big functions.php 中创建。