0

我在使用 DirectPHP 插件的文章中添加 php。我的目标是创建一个脚本,当用户拥有 member = true 时,该脚本将包含一个带有文本的文件;什么时候不显示任何东西。

我已在徽标旁边顶部的模块中添加了这段代码:

<?php
if ($user =JFactory::getUser()->guest)
{
$member = false;
echo "Welcome guest, sign up and read nice quotes";
}
else
   {
$member = true;
$user =& JFactory::getUser();
echo "Welcome " . $user->username;
}
?>
  • 我设置了 member = true; 现在该人已登录。如果他未登录,则为假。

然后在文章里面我有:

<?php
if ($member == false)
{
 $file = file_get_contents ('quotes/quotes.html'); 
 echo $file;
}
?>

<hr id="system-readmore" />

<?php 
if ($member == true)
{
include_once JPATH_SITE.'/quotes/random.php';
echo ShowQuotes(); 
}
?>

我找不到使它无法运行的问题。两者都显示了引号,$member = false;并且$member = true;尽管有 if 语句,但是否始终包含被解析?file_get_contents 也一样?我试图查看标头中的 $member 声明是否保留在解析中并写道:

<?php
if ($member = true)
{
echo "Logged in";
}
?>

而且效果很好,所以问题出在 and 之内include_oncefile_get_contents我试图尽可能地查明它。

在此先感谢您的帮助!

4

2 回答 2

1

这可能是你的问题:

if ($member = true)
{
echo "Logged in";
}

这总是分配trueto的值$member

也在这里:

if ($user =JFactory::getUser()->guest)

您可能有相同的分配问题(不确定您是否打算$user在这里设置和执行条件。

我可能会建议养成这样写条件的习惯:

if (true === $member) { ... }

通过颠倒项目的顺序,如果你不小心输入===or ===,那么你会得到一个错误,而不是让代码意外地默默地执行。

于 2013-03-01T21:16:38.627 回答
0

您似乎在这里有一个范围问题:您在模块中声明 $member,但 $member 将无法用于文章:如果 $something 未定义,php 将评估 ($something == false) 以始终成功,如果你想检查一个变量是否真的是假的,你需要使用 ($something===false)。在这里阅读更多:http ://www.php.net/manual/en/language.types.boolean.php

话虽这么说,因为 JFactory::getUser()->guest 没有真正的开销,所以在你的文章中也使用它!

顺便说一句,在您的 php 配置中启用通知(无论是在屏幕上还是在日志文件中)并确保您在开发时阅读它,它会告诉您任何错误,在没有看到错误的情况下开发是一个猜谜游戏,您只能爆炸你的头靠在墙上很多次......你最终需要打开灯:-)

于 2013-03-02T20:12:14.357 回答