【问题标题】:PHP - Display image based on emailPHP - 基于电子邮件显示图像
【发布时间】:2018-09-16 11:40:50
【问题描述】:

我正在寻求帮助。 需要创建一个品牌页面,在登录时将根据存储在数据库中的用户电子邮件显示图像。 创建 cookie 和会话 id 就可以了。只是找不到根据用户电子邮件选择图像的方法。 仅粘贴实际处理用户 ID 的部分代码,因为我的 index.php 文件中的其他任何内容都是纯 html。

到目前为止:

<?php
include 'function.php';
include 'sqlconnect.php';

//User Check
$adminid = "1";

$company1= "@gmail.com";
$company2= "@yahoo.com";

$gmail= mysqli_query($connection, "SELECT Email FROM Users WHERE Email='$company1'");
$yahoo= mysqli_query($connection, "SELECT Email FROM Users WHERE Email='$company2'");

if(loggedin()){
    $checkid = $_SESSION['user_id'];
    if ($adminid == $checkid){ //if user id is 1 then display img of administrator
        echo '<img src="images/admin.png" title="Administrator" width:"75px" height="75px">';
        echo "<li><a href='logout.php'>Logout</a></li>";
    } elseif(filter_var($company1, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\.gmail/', $company1)) {
        echo "<li><a href='logout.php'>Logout</a></li>";
        echo '<img src="images/google.png">';
    } elseif (filter_var($company2, FILTER_VALIDATE_EMAIL) && preg_match('/@.+\.yahoo/',$company2)) {
        echo "<li><a href='logout.php'>Logout</a></li>";
        echo '<img src="images/yahoo.png>';
    }
}

?>

提前谢谢你!

【问题讨论】:

  • 所以您需要基于域的用户页面,例如 Yahoo 或 Gmail,对吗?所以如果它的雅虎应该是这样的雅虎标志
  • 计划就是这样。如果@gmail.com 则显示google 徽标,否则如果@yahoo.com 则显示yahoo 徽标。但这必须基于存储在 sql 数据库中的用户电子邮件。
  • 什么究竟还没有工作?
  • 更具体地说,我的代码似乎不明白我希望@google 电子邮件用户显示图像,雅虎电子邮件位也是如此。
  • 可能是您的 select 语句正在使用 Email='@yahoo.com'Email='@gmail.com' 查询值。我很确定您正在寻找 Email like '%@yahoo.com%'Email like '%@gmail.com%' 的值

标签: php image session mysqli display


【解决方案1】:

这应该会根据会话的user_id 获取您的用户,然后按预期显示图像。以下是一些注意事项:

  1. 我不确定您的 id 字段是什么,所以如果它不同,请将 UserId 替换为 $results = 行中的列名称。

  2. 在它是管理员的情况下,我没有运行查询,因此如果在这种情况下您需要其他数据,则必须将 $result = .. 行移动到 if ($userid == 1){ 上方线。

  3. 我没有检查您的preg_match 条件的正则表达式,所以如果结果进来了,但没有显示图像,您可以通过添加echo &lt;p&gt;'.$result['Email'].'&lt;/p&gt; 来查看Email 字段是什么@ 对在if(mysql_num_rows($result) == 1) { 行之后。

    <?php
    include 'function.php';
    include 'sqlconnect.php';
    
    if(loggedin()){
        $userid = $_SESSION['user_id'];    
        if ($userid == 1){ //if user id is 1 then display img of administrator
            echo '<img src="images/admin.png" title="Administrator" width:"75px" height="75px">';
            echo "<li><a href='logout.php'>Logout</a></li>";
        } else {
            $results = mysqli_query($connection, "SELECT Email FROM Users WHERE UserId='$userid'");
            if(mysqli_num_rows($results) == 1) {
                foreach(mysqli_fetch_assoc($results) as $result) {
                    echo "<li><a href='logout.php'>Logout</a></li>";
                    if (strpos($result,'yahoo')) {
                        echo '<img src="images/yahoo.png>';
                    } elseif (strpos($result,'gmail')) {
                        echo '<img src="images/google.png">';
                    } else {
                        // you could echo a default image here
                    }
                } 
            }
        }
    }
    
    ?>
    

【讨论】:

  • 感谢您的回答。但是,如果不是管理员尝试登录,这实际上会破坏登录功能。即注销按钮仅对管理员用户(id = 1)出现,但除此之外它似乎没有启动会话或任何东西。即使默认图像也不会弹出。
  • @PHPhunter 我忘了为输出添加实际获取的结果。如果这仍然不起作用,则可能是因为您的查询没有返回任何内容,或者 UserId 字段不是唯一的并且查询返回了多个用户。或者,可能是 $connection 设置不正确,因为我没有要检查的代码。
  • 无论如何,我强烈建议研究 php/mysqli 连接的基础知识。 this is a good place to start
  • 谢谢mtr.web。 $connection 很好,因为它一直在所有其他文件中使用,例如注册、登录和创建事件(具有慈善背景的分配)。只是这个东西,我无法弄清楚它应该是什么样子。我尝试了您的编辑,但结果仍然相同(甚至没有以标准用户身份登录,但管理员显示一切正常)。 // 刚刚注意到您将 $checkid 更改为 $userid。更改此设置似乎可以正常登录,但会给出“非法字符串偏移电子邮件”第 60 行(开始是 elseif pregmatch 行)
  • 我猜下一步是检查 user_id/UserId 值、测试查询,并钻取 $results 变量以查看它返回的内容。
猜你喜欢
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2012-06-23
  • 2020-08-20
相关资源
最近更新 更多