我确定这与PHP无关,但我缺乏技能:D 我做了一个输入表单,可以记录他们的个人数据。为了验证它,我有一个正则表达式。当出现问题时,我想给用户一个错误提示,告诉他他做错了什么。但是我的程序会在整个时间内打印两次。 有正则表达式函数:
protected function isFirstnameValid($firstname)
{
$is_Valid = preg_match('/^[A-Za-z\-_\säöüß]{1,20}$/', $firstname);
if($is_Valid === FALSE) {
throw new InvalidArgumentException();
} else if ($is_Valid === 0) {
HTMLOutput::printErrorWhenWrongPattern(
'Der Vorname ist nicht valide. Bitte geben Sie einen Namen
zwischen 1 und 20 Zeichen an. Erlaubt sind nur Groß- und Kleinbuchstaben,
Leerzeichen, Umlaute und folgende Sonderzeichen: - _');
} else {
return $is_Valid === 1;
}
}
这是我使用该功能的地方:
public function isValidPersonalData()
{
try
{
if(isset($_POST[Person::INDEX_FIRSTNAME]) && $this->isFirstnameValid($_POST[Person::INDEX_FIRSTNAME]))
{
saveDataToSession(Person::INDEX_FIRSTNAME);
}
} catch (Exception $exception) {
echo 'Der reguläre Ausdruck ist nicht valide. Bitte wenden Sie sich an den Adminstrator.';
}
try
{
if(isset($_POST[Person::INDEX_SURNAME]) && $this->isSurnameValid($_POST[Person::INDEX_SURNAME]))
{
saveDataToSession(Person::INDEX_SURNAME);
}
} catch (Exception $exception) {
echo 'Der reguläre Ausdruck ist nicht valide. Bitte wenden Sie sich an den Adminstrator.';
}
try
{
if(isset($_POST[Person::INDEX_UNIVERSITY]) && $this->isUniversityValid($_POST[Person::INDEX_UNIVERSITY]))
{
saveDataToSession(Person::INDEX_UNIVERSITY);
}
} catch (Exception $exception) {
echo 'Der reguläre Ausdruck ist nicht valide. Bitte wenden Sie sich an den Adminstrator.';
}
return !empty($_SESSION[Person::INDEX_FIRSTNAME])
&& !empty($_SESSION[Person::INDEX_SURNAME])
&& !empty($_SESSION[Person::INDEX_UNIVERSITY]);
}
错误-HTML-功能(不要因为名字而笑笑:D):
public static function printErrorWhenWrongPattern($text)
{
print <<<HTML
<div class="alert alert-danger" role="alert">
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
<span class="sr-only">Fehler:</span>
$text;
</div>
HTML; }
我正在使用isValidPersonalData()函数的代码:
if ($personalDataValidator->isValidPersonalData() && $bookDataValidator->isValidBookData()) {
$htmlOutput->printPageCaption('Ausgabe der Daten');
$htmlOutput->printPersonalDataTable(
$_SESSION[Person::INDEX_FIRSTNAME],
$_SESSION[Person::INDEX_SURNAME],
$_SESSION[Person::INDEX_UNIVERSITY]
);
$htmlOutput->printBookDataTable(
$_SESSION[Book::INDEX_BOOKONE],
$_SESSION[Book::INDEX_BOOKTWO],
$_SESSION[Book::INDEX_BOOKTHREE]
);
stopSession();
} else if ($personalDataValidator->isValidPersonalData()) {
$htmlOutput->printPageCaption('Eingabe der Buch-Daten');
$htmlOutput->printBookDataForm();
} else {
$htmlOutput->printPageCaption('Eingabe der persönlichen Daten');
$htmlOutput->printPersonalDataForm();
}
$htmlOutput->printPageFooter();
希望我提供了所有必要的数据。不要担心我的代码中的安全问题。这只是大学的一项练习,我不打算在完成这门课程后再次使用PHP:D但遗憾的是我找不到自己的错误:(
提前多多感谢:)
答案 0 :(得分:0)
这是因为isValidPersonalData()
正在调用两次(如果>>,则为;如果,则为,否则为2.)因此,如果第一个条件为becomw flase,则会老化在else if语句中执行isValidPersonalData()
。您可以单次执行它并将结果存储在变量中然后使用该变量
$is_valid = $personalDataValidator->isValidPersonalData(); // add this
if ($is_valid && $bookDataValidator->isValidBookData()) { //change here
$htmlOutput->printPageCaption('Ausgabe der Daten');
$htmlOutput->printPersonalDataTable(
$_SESSION[Person::INDEX_FIRSTNAME],
$_SESSION[Person::INDEX_SURNAME],
$_SESSION[Person::INDEX_UNIVERSITY]
);
$htmlOutput->printBookDataTable(
$_SESSION[Book::INDEX_BOOKONE],
$_SESSION[Book::INDEX_BOOKTWO],
$_SESSION[Book::INDEX_BOOKTHREE]
);
stopSession();
} else if ($is_valid) { //change this
$htmlOutput->printPageCaption('Eingabe der Buch-Daten');
$htmlOutput->printBookDataForm();
} else {
$htmlOutput->printPageCaption('Eingabe der persönlichen Daten');
$htmlOutput->printPersonalDataForm();
}
$htmlOutput->printPageFooter();