php - 将数据从一个表插入到另一个表几乎可以正常工作

标签 php mysql

我的数据库中有两个表,第一个表名为 users,它包含: id, firstname, lastname, email, password, hash, active.

第二个表名为listing,它包含: user_id、user_email、listing_id、listing_title、list_description、listing_country、listing_city、listing_image。

我想确保当用户登录网站并创建新列表时,该列表将通过 ID 和电子邮件识别。

所以基本上我想从 users 表中的 id 和 email 中获取信息,并将其插入到 listing 表中的 user_id 和 user_email 列中。

我做到了,有点。

问题是,如果我登录网站并创建列表,数据库会在列表 表中显示错误的 user_id 和 user_email。 例如:

如果我以 john@johndoe.com 身份登录,用户 ID 为 1,我将创建一个新列表,当我转到列表表时,我可以看到 user_id 和 user_email 不同,它会提取数据来自 users 表的最新行,而不是实际登录的用户。

希望我说清楚了。

代码如下:

这是一个名为“new-listing-functions.php”的文件

<?php 
error_reporting(E_ALL);
require 'db.php';

if(!isset($_SESSION)) {
session_start();
}



$result = $mysqli->query("SELECT * FROM users");
$query = "SELECT id, email FROM users";


if ($result = $mysqli->query($query)) {
/* Fetch associative array */ 
while ($row = $result->fetch_assoc()) {
    $user_id_from_users_table = $row['id'];
    $user_email_from_users_table = $row['email'];
}
$result->free();
}


$_SESSION['id'] = $_POST['user_id'];
$_SESSION['email'] = $_POST['user_email'];
$_SESSION['listing_title'] = $_POST['listing_title'];
$_SESSION['listing_description'] = $_POST['listing_description'];
$_SESSION['listing_country'] = $_POST['listing_country'];
$_SESSION['listing_city'] = $_POST['listing_city'];
$_SESSION['listing_image'] = $_POST['listing_image'];


$listing_title = $mysqli->escape_string($_POST['listing_title']);
$listing_description = $mysqli>escape_string($_POST['listing_description']);
$listing_country = $mysqli->escape_string($_POST['listing_country']);
$listing_city = $mysqli->escape_string($_POST['listing_city']);
$listing_image = $mysqli->escape_string($_POST['listing_image']);



$sql = "INSERT INTO listing (user_id, user_email, listing_title, 
listing_description, listing_country, listing_city, listing_image)".
"VALUES('$user_id_from_users_table','$user_email_from_users_table',
'$listing_title', '$listing_description', '$listing_country', 
'$listing_city', '$listing_image')";




    if($mysqli->query($sql)) {
    $_SESSION['message'] = "Thank you for creating a listing " 
    .$_SESSION['firstname'];
    //header("location: home.php"); 
}



?>

这是来自具有表单 ('new-listing.php') 的页面的代码:

<?php 

require 'db.php';
session_start();


if(!$_SESSION['logged_in']) {
header("location: home.php");
}

require 'head.php';


?>

<?php 

if($_SERVER['REQUREST_METHOD'] = 'POST') {
if(isset($_POST['post_listing'])) {
    require 'new-listing-functions.php';
}
}


?>



<body id="new-listing">



<div class="new-listing-container">
    <form action="#" method="post">
        <input type="hidden" name="user_id">
        <input type="hidden" name="user_email">
        <input type="text" name="listing_title" placeholder="Listing Title">
<br>
        <textarea name="listing_description" id="" cols="30" rows="20" placeholder="Listing Description"></textarea>
        <input type="text" name="listing_country" placeholder="Country"><br>
        <input type="text" name="listing_city" placeholder="City"><br>
        <input type="file" name="listing_image""><br>
        <button name="post_listing">Proceed</button>
    </form>
</div><!-- new-listing-container -->

</body>
</html>

在此先感谢您的帮助!

最佳答案

首先,您应该考虑使用准备好的语句(查找 mysqli::preparepdo),而不是尝试清理和转义输入。

除此之外,在您的insert 中,您正在使用$user_id_from_users_table$user_email_from_users_table 来填充您的列表详细信息。

根据您的代码,您应该改用 $_SESSION['id']$_SESSION['email'],尽管这些需要清理或者您需要在将原始发布数据放入 INSERT

之前切换到准备好的语句

这是因为 $_user_*_from_users_table 值看起来像是从您的用户表中最后获得的值:

$result = $mysqli->query("SELECT * FROM users");
$query = "SELECT id, email FROM users";


if ($result = $mysqli->query($query)) {
/* Fetch associative array */ 
while ($row = $result->fetch_assoc()) {
    $user_id_from_users_table = $row['id'];
    $user_email_from_users_table = $row['email'];
}
$result->free();
}

话虽这么说,我对这应该实现什么感到有点困惑,或者为什么您希望这是任何类型的 session 特定数据?

关于php - 将数据从一个表插入到另一个表几乎可以正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46595680/

相关文章:

javascript - 通过ajax调用发送php变量

php - 直接浏览器上传到 Amazon S3

PHP + MySQL : creating queries

php - 非加密用途的最快哈希?

php表单不将日期保存到数据库中

php - 使用多个 php 文件中的同一个临时表

php - Bootstrap 主题样式到 wordpress 转换

mysql - 在表中创建单个字段的最佳方法是什么旨在保持不同表字段的计算

php - 如何实现嵌套评论系统?

php - 如何在php中从服务器连接数据库?