可以';用户名';表达式引擎中的全局变量用于从mysql数据库中选择记录


Can the 'username' global variable in expression engine be used to select records from mysql database?

  • 我正试图创建一个表格供学校的家长预订通过学校网站为孩子提供课后护理,它是使用表达式引擎构建的
  • 父母会用他们的家庭ID(一个数字匹配数据库中的家族记录编号)。然后,在预订页面上,他们将从他们自己的孩子的下拉列表他们想要哪个孩子为预订

在家长登录后的登录页上,我放了以下PHP代码:

 <?php
    $_SESSION['familyid']='{username}';
    $_SESSION['family']='{screen_name}';
    ?>

我在预订页面的另一页上做了这件事,因为我认为最后在中解析全局变量时可能存在问题ExpressionEngine。然后在预订页面上,我有:

$con=mysqli_connect("server","database","password");
    // Check connection
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
    $sql = "SELECT ChildID, Child FROM Children WHERE FamilyID =       '".$_SESSION['familyid']."'";
    $result = $con->query($sql);
    $data = mysql_fetch_array($result);

但这不会让任何孩子回来。如果我手动给会话变量一个有效的数字,它会起作用,但我无法让sql在用户名传递给变量的地方起作用。我想做的事情有可能吗?

严重的安全问题-理想情况下,您希望将其全部保存在EE中,并且不要启用PHP。

正确的方法是将具有数据库凭据的模块或插件存储在database.php配置文件中,您可以在此处阅读指南:http://www.99bugs.com/adding-external-databases-to-expression-engine-project/

或者有一个插件可以帮你做到这一点:

<ul>
  {exp:external_entries:select 
    hostname="mysql.deathstar.com" 
    username="deathstar_vader" 
    password="luk35dad" 
    database="deathstar_plans"  
    table="Children" 
    search:FamilyID="{username}"
    orderby="Child" 
    sort="asc"} 
    <li>
      Child ID = {ChildID}
      Child = {Child}
    </li>
  {/exp:external_entries:select}
</ul>

插件中的示例在模板中仍然有不安全的DB凭据,但注释提到这些凭据可以存储在配置中,但没有关于格式的详细信息,因此快速查看插件应该会对此有所了解。

理想情况下,你应该在EE数据库中有Children表,并使用这个免费的插件(仅限EE2,而非EE3)在登录后的登录页上保存你的会话数据:

{exp:session_variables:set name="familyid" value="{username}"}
{exp:session_variables:set name="family" value="{screen_name}"}

然后在预订页面上使用查询标签:

<ul>
  {exp:query sql="SELECT ChildID, Child FROM Children WHERE FamilyID = '{exp:session_variables:get name="familyid"}'"}
    <li>
      Child ID = {ChildID}
      Child = {Child}
    </li>
  {/exp:query}
</ul>

但是,因为变量实际上总是可用的,所以只要用户仍然登录,就不需要将它们保存在会话中:

<ul>
  {exp:query sql="SELECT ChildID, Child FROM Children WHERE FamilyID = '{username}'"}
    <li>
      Child ID = {ChildID}
      Child = {Child}
    </li>
  {/exp:query}
</ul>

编辑-刚刚下载并查看了外部条目的代码:没有配置设置,这很奇怪,因为它很简单,所以可以进行调整,使其更加安全。