我正在尝试创建一个菜单,该菜单只会根据用户订阅的内容填充链接。基本上我将使用php来检查用户对一个包含他/她的电子邮件+以布尔格式注册的课程的表格,即:
email | course 1 | course 2 | course 3|
john@email.com TRUE FALSE TRUE
我想创建一个if语句,如果当然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
}
}
或其他:
if ($something)
{
elseif ($somethingelse)
{
do work
}
}
答案 0 :(得分:1)
获取所有三门课程所需ID的行。然后使用PHP检查每个课程值并相应地输出所需的HTML。
要结合if语句,请执行此操作(您已结束):
if (condition1 AND condition2)...
elseif (condition3)...
或者使用&&
代替AND
,它们在您的情况下but they are not the same because of precedence的工作方式相同。我正在写你的伪语言,它更容易阅读。
您可以拥有任意数量的条件:
if ( ((c1 OR c2) AND (!c3 AND c4) AND !(c5 AND c6)) OR c7 )...
不要忘记停止使用mysql_ *函数,因为它们已被弃用。切换到mysqli或PDO。
答案 1 :(得分:1)
我知道如何在PHP的if
中询问如何做多个条件。
布尔运算符&&
(AND)和||
(OR)将成为您的朋友。
if($cow=='brown'){
if($cat=='white'){
doStuff();
}
}
与
相同if($cow=='brown' && $cat=='white'){
doStuff();
}
中间的&&
表示如果两个部分都为真,则条件仅为真。
第二个elseif
将用于||
。你提供的示例不起作用(如果第一个不正确,它将永远不会到达elseif)但是这两个是等价的:
if($something){
doStuff();
}
elseif($somethingElse){
doStuff();
}
和
if($something || $somethingElse){
doStuff();
}
如果任何一个为真,它将是doStuff()。
答案 2 :(得分: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
{----------- {1}} ------ Not
TRUE if $a is not TRUE.
---- $a && $b
------ And
TRUE if both $a and $b are TRUE.
---- $a || $b
-------- Or
返回的$ result资源应该传递给mysql_fetch_array(),以及其他用于处理结果表的函数,以访问返回的数据
这样的事情:
TRUE if either $a or $b is TRUE.
旁注:自PHP 5.5.0起,不推荐使用mysql_ *函数,将来会删除它们。相反,应该使用MySQLi或PDO_MySQL扩展。另请参阅MySQL:选择API指南和相关的常见问题解答以获取更多信息。该功能的替代方案包括:
mysqli_fetch_assoc()
PDOStatement对象::抓取(PDO :: FETCH_ASSOC)
答案 3 :(得分:1)
这是 NOT 打算作为答案,只是因为评论太大了。
看起来你对这一切都很陌生。我们都是,曾经,所以我祝你好运。坚持下去,它将变得清晰和容易(你将建立一个很好的代码片段集合。)
阅读一些books。这真的让我加快了PHP和MySql的速度。
确保你知道when to use MySql and when to use Sqlite。我之所以提到这一点,是因为虽然PHP对MySQl略有偏好,但它也很乐意支持Sqlite。而且,如果你认为你可能会为Android或Ios开发,那么成为Sqlite大师可能会更好,因为它们都支持Sqlite,但都不支持MySql。
获得一个好的IDE。我个人喜欢Netbeans。这是编码&调试设施非常好。要在您自己的PC上进行开发,您需要Apache服务器和MySql;如果您使用的是Windows,那么我认为您无法击败Xampp(使用Linux会更容易)。
但是,我离题了,我只是提到你可能想要考虑你的数据库设计。只要您100%确定您将永远不会超过3门课程,它就可以正常工作。
即使这样,它也不是third normal form。
我可能会从这样的事情开始。您可以根据需要添加更多列,我将留给您整理主键和外键。
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)
我确实意识到这根本没有回答你的问题(对不起),但我希望它能帮助一些人。祝你好运!!
答案 4 :(得分:0)
尝试使用 * mysql_num_rows。*
示例:
$syntax = mysql_num_rows(//your query syntax);
if($syntax >0 )
{
// do return
}
else
{
// refresh
}