-1

我正在尝试创建一个仅根据用户订阅的内容填充链接的菜单。基本上我将使用 php 来检查用户,该表将包含他/她的电子邮件 + 以布尔格式注册的课程,即:

email          | course 1 | course 2 | course 3|
john@email.com   TRUE       FALSE       TRUE

我想创建一个 if 语句 if course 1 = true WHERE email = john@email.com 然后回显一些 html

否则检查课程 2 等。

我遇到的问题是我将如何构建我的 if 语句?我会用

$sql="Select * FROM courses WHERE user = $user and course1 = TRUE"
$result = mysql_query($sql) or mysql_die($sql)
if($result)
{

echo html

}

还是有其他方法可以做到这一点?有没有办法我可以编写一个 if 语句来检查多个值,例如 if($_SESSION['auth_id'] == 1) 和 if (course1 == TRUE) (我知道最后一个 if 语句不正确,但我如果可能的话,我想将两者结合起来)。我是否需要将其写为 if 语句中的 if 语句:

if ($something)
{
   if ($somethingelse)
    {
       do work
     }
}

或 elseif:

if ($something)
{
   elseif ($somethingelse)
    {
       do work
     }
}
4

5 回答 5

1

在所有三个课程中获取具有所需 ID 的行。然后使用 PHP 检查每个课程值并相应地输出所需的 HTML。

要合并 if 语句,请执行以下操作(您很接近):

if (condition1 AND condition2)... 
elseif (condition3)... 

或使用&&代替AND,它们在您的情况下的工作方式相同,但由于优先级不同,它们不一样。我正在给你写一些更容易阅读的伪语言。

您可以根据需要设置任意多个条件:

if ( ((c1 OR c2) AND (!c3 AND c4) AND !(c5 AND c6)) OR c7 )... 

并且不要忘记停止使用 mysql_* 函数,因为它们已被弃用。改用 mysqli 或 PDO。

于 2013-09-08T03:09:37.267 回答
1

你问如何if在 PHP 中执行多个条件,我明白了。

布尔运算符&&(AND) 和||(OR) 将成为您的朋友。

if($cow=='brown'){
    if($cat=='white'){
        doStuff();
        }
    }

是相同的

if($cow=='brown' && $cat=='white'){
    doStuff();
    }

中间&&的表示仅当两个部分都为真时,条件才整体为真。

请参阅逻辑运算符

第二个, with elseif,将用于||。您提供的 wexample 不起作用(如果第一个不正确,它将永远不会到达 elseif ......)但是这两个是等价的:

 if($something){
    doStuff();
    }
 elseif($somethingElse){
    doStuff();
    }

 if($something || $somethingElse){
    doStuff();
    }

如果其中任何一个为真,它将 doStuff() 。

于 2013-09-08T03:10:09.623 回答
1

关于逻辑运算符

Example ----- Name---Result

$a and $b--- And-----TRUE if both $a and $b are TRUE.

$a or $b ---- Or--------TRUE if either $a or $b is TRUE.

$a xor $b-- Xor------TRUE if either $a or $b is TRUE, but not both.

! $a------------ Not------TRUE if $a is not TRUE.

$a && $b---- And------TRUE if both $a and $b are TRUE.

$a || $b---- Or--------TRUE if either $a or $b is TRUE.


返回的 $result 资源应该传递给 mysql_fetch_array() 和其他处理结果表的函数,以访问返回的数据

像这样的东西:

while ($row = mysql_fetch_assoc($result)) {
  $userid=$row["userid"];
  $course1 =$row["course1"];
  if($userid==1 && course1){
    //do something
  } 
}

获取结果

作为旁注: mysql_* 函数自 PHP 5.5.0 起已弃用,将来将被删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。另请参阅 MySQL:选择 API 指南和相关的常见问题解答以获取更多信息。此功能的替代方案包括:

mysqli_fetch_assoc()

PDOStatement::fetch(PDO::FETCH_ASSOC)

在此处输入图像描述

于 2013-09-08T03:11:28.950 回答
1

不是一个答案,只是它太大了,无法发表评论。

看起来你对这一切都很陌生。我们都曾经,所以我祝你好运。坚持下去,它会变得清晰和容易(你会建立一个很好的代码片段集合)。

读几本书。这真的让我加快了 PHP 和 MySql 的速度。

并确保您知道何时使用 MySql 以及何时使用 Sqlite。我提到这一点是因为,虽然 PHP 对 MySQl 有一些偏好,但它也很高兴地支持 Sqlite。而且,如果你认为你可能会为 Android 或 Ios 开发,那么成为 Sqlite 大师可能会更好,因为它们都支持 Sqlite,但都不支持 MySql。

获得一个好的 IDE。我个人喜欢Netbeans。它的编码和调试设施非常好。要在您自己的 PC 上进行开发,您需要一个 Apache 服务器和 MySql;如果您使用 Windows,我认为您无法击败Xampp(Linux 更容易)。

但是,我离题了,我只是开始提到您可能想要考虑您的数据库设计。只要您 100% 确定您永远不会有超过 3 门课程,它就可以正常工作。

即便如此,它也不是第三范式

我可能会从这样的事情开始。您可以根据需要添加更多列,我将留给您整理主键和外键。

mysql> show tables;
+------------------------+
| Tables_in_menu_example |
+------------------------+
| course_subscription    |
| courses_description    |
| students               |
+------------------------+
3 rows in set (0.00 sec)

mysql> describe students;
+------------+---------+------+-----+---------+----------------+
| Field      | Type    | Null | Key | Default | Extra          |
+------------+---------+------+-----+---------+----------------+
| student_id | int(11) | NO   | PRI | NULL    | auto_increment |
| email      | text    | NO   |     | NULL    |                |
+------------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> describe courses_description;
+-------------+---------+------+-----+---------+----------------+
| Field       | Type    | Null | Key | Default | Extra          |
+-------------+---------+------+-----+---------+----------------+
| course_id   | int(11) | NO   | PRI | NULL    | auto_increment |
| course_name | text    | NO   |     | NULL    |                |
+-------------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> describe course_subscription;
+------------+---------+------+-----+---------+-------+
| Field      | Type    | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| student_id | int(11) | NO   |     | NULL    |       |
| course_id  | int(11) | NO   |     | NULL    |       |
+------------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

我确实意识到这根本没有回答你的问题(对不起),但我希望它会对一些人有所帮助。祝你好运!!

于 2013-09-08T04:30:15.333 回答
0

尝试使用*mysql_num_rows.*

例子:

    $syntax = mysql_num_rows(//your query syntax);
if($syntax >0 )
{
  // do return
}
else
{
  // refresh
}
于 2013-09-08T03:25:50.097 回答