【问题标题】:How to validate multiple form fields in MySQL with PHP? [closed]如何使用 PHP 验证 MySQL 中的多个表单字段? [关闭]
【发布时间】:2014-06-08 18:52:48
【问题描述】:

我正在尝试构建一个登录表单,用户必须在表单中添加以下数据:名字、姓氏、学生编号和电子邮件。

我的 MySQL 数据库中有一个测试用户,但到目前为止它无法正常工作。这是我的代码:

<?php
//Start session//
session_start();

//Include database connection file and header file//
include_once('resources/includes/database.inc.php');
include_once('header.php');

?>

<!-- Login form -->

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
//Escape de gebruikersnaam
$sFirstName = mysql_real_escape_string($_POST['firstname']);
$sLastName = mysql_real_escape_string($_POST['lastname']);
$sStudentNumber = ($_POST['studentnumber']);
$sEmail = ($_POST['email']);
$sSQL = 'SELECT `id`, `firstName`, `lastName`, `studentNumber`, `email`, `accepted` FROM   `student` WHERE `firstName` = \'' . $sFirstName . '\'';
$rsSQL = mysql_query($sSQL);
$aUser = mysql_fetch_array($rsSQL);
  //Er is geen rij gevonden en $aUser is false:
//Dat betekent dat er geen user is met de opgegeven gebruikersnaam
if($aUser == false)
{
    echo '<strong>Deze gebruiker is niet gevonden</strong>';
}
//Vergelijk de rest
elseif($aUser['lastname'] != $sLastName)
{
  echo '<strong>De achternaam is niet bekend</strong>';
}

elseif($aUser['studentnumber'] != $sStudentNumber)
{
    echo '<strong>Het studentnummer is niet geldig</strong>';
}

elseif($aUser['email'] != $sEmail)
{
  echo '<strong>Het e-mailadres is niet bekend</strong>';
}

//Inloggen gelukt
else
{        //De combinatie is goed, maak de sessie aan
    $_SESSION['login_user'] = $aUser['id'];

    //Verstuur de gebruiker door
    header("location: studentloggedin.php");

    //Mocht de redirect hierboven niet werken:
    echo '<strong>Je bent ingelogd, klik <a href="studentloggedin.php">hier</a> om door te gaan.</strong>';
}
}
?>

<form method="post">
<table>
<tr>
  <td>Voornaam</td>
  <td><input type="text" name="firstname" /></td>
</tr>

<tr>
  <td>Achternaam</td>
  <td><input type="text" name="lastname" /></td>
</tr>

<tr>
  <td>Studentnummer</td>
  <td><input type="text" name="studentnumber" /></td>
</tr>

<tr>
  <td>Email</td>
  <td><input type="text" name="email" /></td>
</tr>

<tr>
  <td><input type="submit" value="Inloggen" /></td>
</tr>

</table>
</form>
<?php
$html = file_get_contents('resources/templates/homecontent.template.html');
print $html;
include_once('resources/templates/footer.template.html');
?>

有人知道我做错了什么吗?如果我根据我的数据库用户正确填写所有内容,我会得到:'De achternaam is niet bekend'(无法识别姓氏)。也许我应该检查 MySQL 查询中的验证?

【问题讨论】:

  • 来自对我现在已删除的答案的评论,“这是针对学校项目的。”祝你功课好运!
  • 嘿@JakeGould,很抱歉你有这种感觉。你认为只有专业的人才能得到帮助?我想我不会再在stackoverflow上问任何问题了。我对这个主题很感兴趣,也许以后想在专业上做这件事,我现在才 20 岁,刚刚开始学习。
  • “我现在才 20 岁,刚刚开始学习。”我在这个网站和其他地方帮助过比这更年轻的人​​,你的代码是一场灾难。当提供答案时,您问另一个不相关的问题也无济于事。这不是一个可以让其他人为您工作的聊天室。 @Devon 的回答应该对您有所帮助。祝你好运!
  • 要回答这个问题需要通过大量的代码。这使得如果不在问题上花费过多的时间,就很难给出好的答案。大多数人宁愿转向另一个问题。如果您将问题提炼到重现问题的尽可能小的样本,那么您获得的答案的数量、质量和清晰度也会有所提高。编辑后的问题不必和整个代码做同样的事情,它只需要重现你需要帮助的一个方面。
  • @user3671823 本网站的目的是提供对未来读者通常有用的问题和答案,以及您当前的问题。当您在充满多个问题的网站上倾倒大量代码时,您的问题会变成“此代码不起作用。为什么?”,您可以想象,除了拥有此特定代码的人之外,这对世界上的任何人都没有用 - 你。我是自学成才的,我可以直接告诉你,你能学到的最有价值的技能之一就是如何提炼问题和调试代码。隔离具体问题并询问,仅此而已。

标签: php mysql forms validation field


【解决方案1】:

数组键区分大小写。

$aUser['lastname'] != $aUser['lastName']

您还应该远离mysql_,因为 MySQL API 已被弃用。使用 PDO 或 MySQLi 和准备好的语句来避免 SQL 注入。现在,您的查询可以直接在查询中使用$_POST 变量进行注入。

出于调试目的,如果您将来遇到问题,我建议您打印出数组:print_r($aUser)。它可能为您节省了一次旅行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-21
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2020-06-12
    • 2012-08-31
    • 2015-08-17
    相关资源
    最近更新 更多