【问题标题】:Adding table row value into a variable using PHP and MySQL使用 PHP 和 MySQL 将表行值添加到变量中
【发布时间】:2015-05-25 00:48:51
【问题描述】:

这需要一些例子:

例如这是我的 MySql dump.sql 文件:

CREATE TABLE IF NOT EXISTS `user` (
`id` int(10) unsigned NOT NULL,
`email` varchar(30) NOT NULL,
`username` varchar(30) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

INSERT INTO `user` (`id`, `email`, `username`) VALUES
(1, 'test1@test.com', 'test1'),
(2, 'test2@test.com', 'test2'),
(3, 'test3@test.com', 'test3');

ALTER TABLE `user`
ADD PRIMARY KEY (`id`);

ALTER TABLE `user`
MODIFY `id` int(10) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;

然后我有一个包含数据库连接和函数的 db.php 文件:

<?php
 define('DB_HOST','localhost');
 define('DB_USER','test');
 define('DB_PASS,'test');

 $conn = mysql_connect(DB_HOST, DB_USER, DB_PASS);
 if(!$conn) {
    die('Could not connect: ' . mysql_error());
 }
 mysql_select_db(DB_USER, $conn);

function get_all($sql)
{
  @$db = new mysqli(DATABASE_HOSTNAME, DATABASE_USERNAME, DATABASE_PASSWORD);
  global $db;
  $q = mysqli_query($db, $sql);
  while (($result[] = mysqli_fetch_assoc($q)) || array_pop($result)) {
    ;
  }
  return $result;
}

之后我有一个如下所示的 sql 查询:

$users = get_all("SELECT * FROM test.user ORDER BY id");

这为我提供了“用户表”中的所有项目。

之后我有一个 index.php 文件,它使用 require_once('db.php') 并具有以下代码来调用数据库表中的所有项目,如下所示:

<form>
  <table>
    <thead>
      <tr>
        <th>ID</th>
        <th>Email</th>
        <th>Username</th>
      </tr>
    </thead>
    <tbody>
      <?php if (!empty($users)) foreach ($users as $user) { ?>
       <tr>
         <td><?= $user["id"]; ?></td>
         <td><?= $user["email"]; ?></td>
         <td><?= $user["username"]; ?></td>
       </tr>
      <?php } ?>
    </tbody>
  </table>
</form>

所有这些都可以打印出一个包含所有用户列表的表格。 现在我的问题是:如何将“id”、“email”或“username”添加到某种全局变量中,以便稍后使用“id”。

例如,我尝试将 id 添加到 $_SESSION:

<td><?= $_SESSION["user_id"] = $user["id"]; ?></td>

如果我回显它,那只会显示最后一个 id:

 <?php echo $_SESSION["user_id"]; ?>

...这给了我“3”

我要问的是:有没有办法从每个表行中获取“ID”、“电子邮件”或“用户名”并将其添加到变量中,以便稍后在其他 sql 查询中使用它使用“ID”更新或删除行?

例如,如果我想从“用户”表中删除 2nd 用户,我可以使用类似:

DELETE FROM test.user WHERE ID = $user_id;

我如何获得 $user_id?

【问题讨论】:

  • 将所有变量存储到会话中有什么问题? (旁注:你一直在mysqlmyqli 之间来回跳转。不要那样做。mysql_ 并且你的大部分代码都已弃用。

标签: php mysql foreach


【解决方案1】:

在每个 foreach 循环中,您可以按如下方式存储会话数据:

$_SESSION[$user['id']]['email'] = $user['email'];
$_SESSION[$user['id']]['username'] = $user['username'];

那么当你想找回邮箱或者用户名的时候,直接把ID传进去就行了。

例如,如果 ID 是 7,要获取电子邮件地址,您可以这样写:

$_SESSION[7]['email'] 

这将返回 ID 为 7 的用户的电子邮件地址。

这应该会有所帮助。

$_SESSION['user_id'] 只显示最后一个 ID 的原因是因为每次 foreach 循环运行时,它都会覆盖这个,直到你到达循环的最后一次迭代,然后你就会回显出来。

【讨论】:

  • 你的意思是这样的:&lt;td&gt;&lt;?= $_SESSION[$user['id']]['email'] = $user['email']; ?&gt;&lt;/td&gt;。您将如何在另一个 .php 网页中调用它? echo $_SESSION['email'] 还是别的什么?我的大问题是如何将“id”数字添加到变量中,以便我可以使用它从表中删除单行。
  • 您需要知道要查找电子邮件的 ID。正如我所说,您可以使用 $_SESSION[7]['email']... 获取 ID 为 7 的电子邮件
  • 哦,我明白你的意思了。试过了,它奏效了。 Ofc 我需要对会话本身进行一些处理,因为我有很多其他形式的项目。 session_destroy、session_unset 和 session_start 以及不同的页面帮助我解决了这个问题。
  • 很高兴能帮上忙 :) 请记住,当您循环数据并想将其写入其他地方时,您需要某种类型的计数来增加!
猜你喜欢
  • 2021-04-14
  • 2012-12-17
  • 1970-01-01
  • 2013-03-29
  • 2014-08-13
  • 2016-01-30
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多