Следующая форма показывает ошибку при нажатии кнопки отправки, если мы вводим только имя и отправляем. Показанная ошибка:
Неустранимая ошибка: вызов неопределенной функции test_input () в C: \ wamp \ www \ web \ new9.php в строке 11
<?php // define variables and set to empty values $name1Err = $email1Err = ""; $name1 = $email1 = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["input_1"])) {$name1Err = "Your name is required. Just the first will do. ";} else {$name1 = test_input($_POST["input_1"]); if (!preg_match("/^[a-zA-Z ]*$/",$name1)) { $name1Err = "Only letters and white space allowed"; } } if (empty($_POST["input_12"])) {$email1= "";} else {$email1 = test_input($_POST["input_12"]); // check if e-mail address syntax is valid if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email1)) { $emailErr = "Invalid email format"; } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } } ?> <form method='post' enctype='multipart/form-data' action=''> name<input name='input_1' type='text' value='<?php echo $name1;?>' tabindex='1' /> <div class="validation_message"><?php echo $name1Err ?></div> email<input name='input_12' type='email' value='<?php echo $email1;?>'/><br/> <textarea name='input_5' tabindex='9' rows='10' cols='50'></textarea> <input type='submit' value='Submit' tabindex='25' /> </form> <?php echo "<h2>Your Input:</h2>"; echo "Name:".$name1; echo "<br>"; echo "Email:".$email1; echo "<br>"; ?>
Извлеките свою функцию из условного оператора if
Это должно быть так …
<?php // define variables and set to empty values $name1Err = $email1Err = ""; $name1 = $email1 = ""; // Moved here function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } if ($_SERVER["REQUEST_METHOD"] == "POST") { // .... your remaining code .......... !
Из PHP-документов …
Когда функция определяется условным образом … Ее определение должно обрабатываться до вызова.
Source
В общем, функции сначала анализируются и поэтому могут использоваться в любом порядке.
echo foo(); function foo() {return "bar";}
Вышеизложенное работает отлично.
Однако, в отличие от некоторых языков, таких как JavaScript, PHP позволяет условно определять функции. Вы можете сделать что-то вроде этого:
if( $something) { function foo() {echo "bar";} } else { function foo() {echo "fish";} } foo();
Это плохо (лично я бы предпочел анонимные функции или поставил условие внутри функции), но это разрешено.
Однако это означает, что функции больше нельзя захватывать. Они ДОЛЖНЫ быть определены до их использования. Возвращаясь к нашему первому примеру:
if( true) { echo foo(); function foo() {return "bar";} }
Это не удастся.
пытаться
<form method='post' enctype='multipart/form-data' action='<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>'>
источник: w3schools