【问题标题】:PHP select from dc.selectMenu according to email address of clientPHP根据客户端的电子邮件地址从dc.selectMenu中选择
【发布时间】:2020-03-12 13:18:05
【问题描述】:

我有一个具有 OAuth 和 Google Sign-In 的网站。

我想要做的是当客户进入网站时从选择菜单中选择。所以每个客户都会根据他们的电子邮件地址看到不同的过滤页面。

我已经可以创建会话并在屏幕上写下客户端名称。

 <?php if ($_SESSION["email"] == "xxx@gmail.com") { ?> 
      <h2>Thank you <?php echo $_SESSION["name"] ?> </h2>
        <?php }   ?>

我在 selectMenu 下面有维度国家值,如 (a,b,c,d,e) 我希望当电子邮件地址 xxx 登录时,他/她只能看到一个国家/地区,而当 yyy 电子邮件地址登录时,他/她只能看到 b 国家/地区,依此类推......

功能必须自动选择并显示在屏幕上。


selectField = dc.selectMenu('#country')
                        .dimension(mostSold)
                        .title(function (d) { return d.key })
                        .promptText('Which country')
                        .group(mostSoldGroup)

到目前为止,我发现了以下方法,但它不起作用并给出错误。

  <?php if ($_SESSION["email"] == "xxx@gmail.com") { ?> 
      <?php selectField.replaceFilter([["a"]]).redrawGroup(); ?>
        <?php }   ?>

【问题讨论】:

  • “但它不起作用并给出错误。” - 究竟是什么?
  • 你在混合js和php;你不能那样做。
  • 我不确定将这个问题作为重复问题关闭是否正确。但是@FunkFortyNiner 是正确的,您不能混合使用 PHP 和 JS,因为 PHP 将在客户端(浏览器)上执行任何 JS 之前在服务器上执行。你可以使用 PHP 有条件地生成一些 JS 代码,或者初始化一些 JS 变量,来做你想做的事情。
  • @Gordon 感谢您在这里联系我,Gordon。我选择了第一个作为原始副本并添加了更多。第一个没有回答问题吗?帮助我理解:)如果我做错了,我会重新打开。
  • @FunkFortyNiner,我不认为这个问题是相关的。询问者试图了解如何根据 PHP 中页面生成期间已知的某些状态来初始化 JavaScript 库。所以这是一个如何在 PHP 中生成正确的 JS 代码的问题。我认为目的是当 PHP 表达式评估为真时有条件地包含 JS 行。我对 PHP 不太了解,无法回答这个问题。

标签: javascript php session oauth dc.js


【解决方案1】:

正如@Gordon 和@FunkFortyNiner 所解释的,您正在混合两种不同的语言(PHP 和js)。

为了更容易,开始限制需要在 php 和 js 之间移动的内容,方法是编写(在 php 中)一个 js 变量,然后您可以稍后在“干净”的 js 代码中读取该变量

 <?php 
 if ($_SESSION["email"] == "xxx@gmail.com") {  
   echo "Thank you ".$_SESSION["name"];
   echo "<script>var countryFilter='a';</script>";
 } 
 ?>

在您的页面中进一步向下(或更好的单独 js 文件)

 <script>

 selectField = dc.selectMenu('#country')
                    .dimension(mostSold)
                    .title(function (d) { return d.key })
                    .promptText('Which country')
                    .group(mostSoldGroup)

  if (countryFilter) 
    selectField.replaceFilter([[countryFilter]]);

 </script>

一般建议:避免混合使用不同的语言(php+html+js):它更难阅读,更容易编写不安全的代码。

【讨论】:

  • 你好@Xavier。该代码完美运行!谢谢你。但是现在,当我再次单击 Reset All (a href="javascript:dc.filterAll();) 时,所有其他国家/地区的值都会出现在屏幕上。因此,在授予权限以查看每个客户端的不同过滤器时,我想我需要从数据库处理它?如果您知道有关此主题的其他方法,我会研究它们。
  • 经过一些研究是否可以使用 PHP 进行 csv 文件操作?我的意思是在将 csv 数据输入(d3.csv,“example.csv”)之后,在制作所有维度的东西之前,我可以根据每个客户端过滤这个 csv 文件吗?
  • 这些是单独的问题,请作为新问题提出。但是如果你试图在 js 端实现特权访问,你就走错了路,因为他们仍然会在 csv 中下载完整列表,无论以后应用什么过滤器
猜你喜欢
  • 2016-06-11
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多