【问题标题】:Fetching information from the database从数据库中获取信息
【发布时间】:2012-10-31 11:10:02
【问题描述】:

我的更新问题在这里:

Fetching information from the database MYSQL & Codeigniter

请看:)


我只是想问一下这段代码有什么问题。从昨晚开始,我一直在努力解决这个问题。我再次发布这个问题。我猜我的语法有问题。

function member_here()
{
    $this->db->select('');
    $this->db->from('membership');
    $this->db->where('username',$this->input->post('username'));
    $q=$this->db->get('');

    if($q->num_rows() > 0) {
        $data = array();
        foreach($q->result() as $row) {
            $data=$row;
        }
        return $data;
    }
}

无论如何。其输出将是从数据库中选择的信息。

但是

我认为代码的某些部分是正确的,因为它给出了输出。但还是不对。

假设我有这些数据:

|-------Name-----|-----Username-----|---------Email Address----------|
|     Marishka   |   marishkapv     |    marishka@email.com          |
|     John       |   johndoe        |   john@doe.com                 |
|     Dennis     |   dennisv        |     dennis@v.com               |

所以,我使用 Marishka 登录。 登录成功后,我在首页看到的信息是dennis的信息

如果我登录 john

也一样

从数据库中获取的数据是最后存储的数据。如何从属于我登录的特定用户名的数据库中进行选择

请回答。非常感谢!

这里有更新

这是我的视图表单中的代码

<?php
$CI =& get_instance();
$CI->load->model('membership_model');
$result = $CI->membership_model->member_here();
?>


User Information:

</br></br></br>
Name: &nbsp;<?php echo $result->first_name; echo " ";   echo $result->last_name;?><br/></br>
Email Address: &nbsp;<?php echo $result->email_address; ?><br/></br>
Date of Birth: &nbsp;<br/></br>
Gender: &nbsp;<?php echo $result->gender;   ?><br/></br>
</br></br></br>
Account Information:<br/></br></br>

Username:<?php echo $this->session->userdata('username'); ?><br/></br>
Security Question: <?php echo $result->security_question;   ?>&nbsp;<br/></br>
Security Answer: <?php echo $result->security_answer;   ?>&nbsp;<br/></br>

【问题讨论】:

  • 你知道,你应该使用一些缩进。使您的代码可读。
  • 您的登录用户信息,如用户名在帖子中吗?不是应该在CI 会话中吗?
  • 您也可以使用$q=$this-&gt;db-&gt;get();,而quotes$data=$row; 应该是$data[]=$row; 在循环中。
  • @bažmegakapa 抱歉 :) 下次会做
  • @SheikhHeera 是的。对于我正在使用会话的用户名。但是对于电子邮件和名称,我希望它出现,这就是我使用它的原因。

标签: php mysql database codeigniter xampp


【解决方案1】:

在 codeigniter 中通常是这样,除非您使用的是不同的自定义身份验证库。

$user_id = $this->session->userdata('account_id');

所以你应该使用

$this->db->where('user.id',$this->session->userdata('account_id'));

我将查找字段从名称更改为 id,因为您应该对 ID 执行查找,因为两个人可能具有相同的名称等。查找 INT 的速度也更快。

【讨论】:

  • 我让它独一无二。但如果我仍然这样使用它可以吗?为了安全?
  • 您的表将有一个 ID 列和一个主键,它是唯一的。你为什么不想使用它?
  • 您还说您通过$this-&gt;input-&gt;post('username') 获取有关用户名的信息,如果是这样,您应该在以 john 身份登录后执行此操作,就在 where 子句执行此操作之前die($this-&gt;input-&gt;post('username')); 这将打印的值post 值,如果该值是 john 等,您可以这样做。
  • 我可以。但我不能使用会话来获取名称和电子邮件等其他信息。我会更新我的问题并在我的视图表单中发布代码。请检查。太感谢了! :)
  • 好吧,首先你没有在你的代码中使用$this-&gt;load-&gt;view('viewname, $data);是有原因的吗?您正在使用 CI 超级对象,如果您只是将数据从控制器传递给查看,则无需这样做。试试这种方式,然后告诉我们。
【解决方案2】:

您的数据库查询有问题 - 您的描述表明正在返回每一行(或者至少总是返回丹尼斯的行)。

您的代码只是遍历所有返回的行并打印最后一行。

添加一些调试代码以在循环之前转储返回的数据集并优化您的查询。

【讨论】:

  • 进一步考虑 - 您显然没有在 POST 数据中为用户名传递任何值。因此,你的sql可能是:SELECT FROM members WHERE username like '%%'
  • 哦.. 所以我应该把 ('username') 放在那里?
【解决方案3】:

你有

$data = array();
foreach($q->result() as $row) {
    $data=$row; // every time $data variable is being updated with new value
}

它将返回最后一条记录,因为每次循环都会使用新值更新$data,如果您将其更改为跟随

$data = array();
foreach($q->result() as $row) {
    $data[]=$row;
}

然后它将所有行作为数组保存在$data中。

或者,您可以使用以下代码而不使用 foreach 循环

$data['result']=$q->result();

在你看来,你可以像这样循环

foreach($result as $row) {
    echo $row->name;
     ...
}

更新:您应该正确使用模型、视图、控制器。您在 view 中使用了 model,但您不应该这样做。在您的controller 中加载和使用model,然后从控制器加载view 并传递类似的数据,

$this->load->view('your_view_name', $data);

如上所述,view 中的loop。这是另一个similar answer

【讨论】:

  • 发生了错误。那么,我的命令在视图表单中会是什么?错误说:严重性:通知消息:尝试获取非对象文件名的属性:views/members_area.php 许多行受到影响。
  • 对不起。我糊涂了。我认为我没有循环。仅在模型中。
  • 我只是想知道为什么这个$data[]=$row; 会发出一条错误消息:尝试获取非对象的属性
  • @Marishka,你能用 Sheikth 在此处发布的详细信息更新 member_here() 函数吗?
  • @manix 我会在得到结果后立即更新。 :) 我仍在尝试这样做:) 仍然有点困惑。哈哈!
猜你喜欢
  • 2016-09-03
  • 1970-01-01
  • 2017-01-02
  • 1970-01-01
  • 2014-06-14
  • 2014-07-19
  • 2012-10-31
  • 2023-04-06
相关资源
最近更新 更多