表达式引擎中的 'username' 全局变量可以用于 mysql 数据库中的 select 记录吗?
Can the 'username' global variable in expression engine be used to select records from mysql database?
- 我正在尝试为学校的 parent 学生创建一个表格来预订
after-school 通过学校网站照顾他们的 children,
这是使用表达式引擎构建的。
- Parents 会 log-in 使用他们的家庭 ID(一个数字
匹配数据库中的家庭记录号)。然后,在预订页面上,他们会 select 来自
一个 drop-down 他们自己 children 的列表,他们 child 他们想
预订。
在 parent log-in 之后的着陆页上,我放置了以下 PHP 代码:
<?php
$_SESSION['familyid']='{username}';
$_SESSION['family']='{screen_name}';
?>
I did this on a separate page to the booking page because I thought
there might be an issue with global variables being parsed last in
ExpressionEngine. Then on the booking page, I have:
$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);
但这并不return任何children。如果我手动给会话变量一个有效的数字,它可以工作,但我无法让 sql 在用户名已传递给变量的地方工作。我正在尝试做的事情是否可行?
严重的安全问题 - 理想情况下,您希望将其全部保留在 EE 中并且不要启用PHP。
正确的方法是将数据库凭据存储在 database.php 配置文件中的模块或插件,您可以在此处阅读指南:
http://www.99bugs.com/adding-external-databases-to-expression-engine-project/
或者 add-on 可以为您完成此操作:
<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>
插件中的示例在模板中仍然具有不安全的数据库凭据 - 但评论中提到这些可以存储在配置中,但没有关于格式的详细信息,因此快速查看插件应该会发现一些点亮这个。
理想情况下,您应该在 EE 数据库中拥有子 table,并使用此 free add-on(仅限 EE2 - 不是 EE3)执行类似 EE 的本机操作,以将会话数据保存在登录后的着陆页:
{exp:session_variables:set name="familyid" value="{username}"}
{exp:session_variables:set name="family" value="{screen_name}"}
然后在预订页面上使用 query tag:
<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>
编辑 - 刚刚下载并查看了外部条目的代码:没有配置设置,这很奇怪,因为它很简单,所以可以通过调整来制作它更安全。
- 我正在尝试为学校的 parent 学生创建一个表格来预订 after-school 通过学校网站照顾他们的 children, 这是使用表达式引擎构建的。
- Parents 会 log-in 使用他们的家庭 ID(一个数字 匹配数据库中的家庭记录号)。然后,在预订页面上,他们会 select 来自 一个 drop-down 他们自己 children 的列表,他们 child 他们想 预订。
在 parent log-in 之后的着陆页上,我放置了以下 PHP 代码:
<?php
$_SESSION['familyid']='{username}';
$_SESSION['family']='{screen_name}';
?>
I did this on a separate page to the booking page because I thought there might be an issue with global variables being parsed last in ExpressionEngine. Then on the booking page, I have:
$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);
但这并不return任何children。如果我手动给会话变量一个有效的数字,它可以工作,但我无法让 sql 在用户名已传递给变量的地方工作。我正在尝试做的事情是否可行?
严重的安全问题 - 理想情况下,您希望将其全部保留在 EE 中并且不要启用PHP。
正确的方法是将数据库凭据存储在 database.php 配置文件中的模块或插件,您可以在此处阅读指南: http://www.99bugs.com/adding-external-databases-to-expression-engine-project/
或者 add-on 可以为您完成此操作:
<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>
插件中的示例在模板中仍然具有不安全的数据库凭据 - 但评论中提到这些可以存储在配置中,但没有关于格式的详细信息,因此快速查看插件应该会发现一些点亮这个。
理想情况下,您应该在 EE 数据库中拥有子 table,并使用此 free add-on(仅限 EE2 - 不是 EE3)执行类似 EE 的本机操作,以将会话数据保存在登录后的着陆页:
{exp:session_variables:set name="familyid" value="{username}"}
{exp:session_variables:set name="family" value="{screen_name}"}
然后在预订页面上使用 query tag:
<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>
编辑 - 刚刚下载并查看了外部条目的代码:没有配置设置,这很奇怪,因为它很简单,所以可以通过调整来制作它更安全。