【发布时间】:2016-06-20 18:45:13
【问题描述】:
我有一份由体育教练填写的表格。教练可以进行多项他们教练的运动,而球员可以参加多项运动。因此,如果教练想要将一名球员添加到球队名单中,我需要检查该球员是否存在,如果存在,那么只需将球员 ID 添加到名单表中,而不是将球员再次添加到球员表中。下面是我想要完成的最好的表示。
if (isset($_POST['submit'])) {
$email = mysqli_real_escape_string($con2, $_POST['email']);
$sql1 = "SELECT id, email FROM users WHERE email='$email'";
$result = $con2->query($sql1);
if ($result->num_rows > 0) {
//here is where I want to just add specific information
} //I have tried if $result == 0 and else if $result == 0
//here is where I would add the user if the email doesn't exist.
} <-- //I feel like the issue is the if (isset($_POST['submit'])) which end just before this line.
因此,根据我放置 (isset($_POST['submit'])) 末尾的位置,我得到了不同的结果。我试图弄清楚如何保留 $_POST 被设置但不执行其中的所有内容。我对此非常了解,所以如果我的问题看起来很基本,请原谅我。感谢您花时间审查我的问题。
其他信息 所以我在获取行数时没有问题。问题是即使电子邮件存在,用户在用户表中也会重复,但在其余表中用户不会重复。基本上 (isset($_POST['submit'])) 中的所有内容都会运行,这是有道理的,因为当提交表单时,这会评估为 true。
本质上,我想在 (isset($_POST['submit'])) 内部运行 if else ,如果有意义的话,两者都不会被执行。
【问题讨论】:
-
警告:当使用
mysqli时,您应该使用parameterized queries 和bind_param将用户数据添加到您的查询中。 不要使用手动转义和字符串插值或连接来完成此操作,因为如果您忘记正确转义某些内容,您将创建严重的SQL injection bugs。 -
您是否要更新数据库中存在的用户?只有当他有电子邮件?
-
请停止测试
num_rows它并不总是可靠的——数据总是可靠的。如果您不想查看结果,那么只需SELECT count(id) FROM users WHERE email='$email'。并获取结果 - 总是有一行,计数为零或更多。始终测试“真实数据”,其他一切都可能“不可靠”。如果效率是一个问题,你总是可以添加一个`LIMIT 1` -
@AdiAzarya 关系是教练和球员。教练可以进行多项他们教练的运动,而球员可以参加多项运动。因此,如果教练想要将一名球员添加到球队名单中,我需要检查该球员是否存在,如果存在,则只需将球员 ID 添加到名单表中,而不是将球员再次添加到球员表中。
-
@RyanVincent 谢谢你。就像我说的,我对 PHP 非常了解,你所说的非常有道理。我不知道 count() 是我以前从未见过的选项。
标签: php mysql if-statement