【问题标题】:Php / Mysql how to insert current user with postPhp / Mysql如何使用帖子插入当前用户
【发布时间】: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 中创建。

标签: php mysql login insert


【解决方案1】:

按照该教程,您当前的用户 ID 存储在

$_SESSION['user_id']

教程的登录功能是here

您需要在 MySQL 表中添加一个名为“mytable”的用户 ID 字段

然后像这样执行一条 SQL 语句。

$stmt = $mysqli -> prepare('INSERT INTO mytable (category, contents, date, userid) 
                            VALUES (?,?,NOW(),?)');
$stmt -> bind_param('ssi', $_POST['category'], $_POST['contents'], $_SESSION['user_id']);
$stmt -> execute();

编辑

在阅读了更多教程之后,他们在执行login_check($mysqli) 时清除了$_SESSION['user_id'],所以在你调用插入之前

$userId = $_SESSION['user_id'];

你的代码应该是这样的

<?php
include 'db_connect.php';
include 'functions.php';
sec_session_start();

$userId = $_SESSION['user_id'];
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.
$stmt = $mysqli -> prepare('INSERT INTO mytable (category, contents, date, userid) 
                            VALUES (?,?,NOW(),?)');
$stmt -> bind_param('ssi', $_POST['category'], $_POST['contents'], $userId);
$stmt -> execute();
$stmt -> close();

} else {
   echo 'Access denied. <br/>';
}

?>

【讨论】:

  • 谢谢,我正在测试这个!
  • 这似乎破坏了我实现系统的方式。用您的代码完全替换我的插入语句是错误的吗?现在它只是刷新,没有任何东西放入表中。
  • 确保在 MySQL 中添加一个新字段。您必须将userid 添加到数据库中的表中
  • 我有,我正在尝试粘贴我当前的代码,但评论部分不允许那么多字符。 (堆栈溢出有点新意)
  • 添加了编辑,新的用户 ID 字段也在 mysql 中/现在正在阅读您的编辑(我非常感谢您的帮助)
猜你喜欢
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多