Я новичок в PHP и недавно начал изучать формы. Я могу их запустить и запустить, внимательно следуя инструкциям на сайтах. Но эта форма, которую я попытался построить самостоятельно, набрав код, я помню, что я узнал на веб-сайте w3c. У меня проблемы с запуском. Пожалуйста, помогите мне.
Это HTML-код формы:
<form name="contactform" method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" id="contactform">
<label for="first_name">First Name<span class="error">*<?php echo $first_nameErr;?></span></label><br>
<input type="text" name="first_name" maxlength="50" size="20" value="<?php echo $first_name;?>"><br>
<label for="last_name">Last Name<span class="error">*<?php echo $last_nameErr;?></span></label><br>
<input type="text" name="last_name" maxlength="50" size="20" value="<?php echo $last_name;?>"><br>
<label for="email">Email Address<span class="error"><?php echo $emailErr;?>*</span></label><br>
<input type="text" name="email" maxlength="80" size="35" value="<?php echo $email;?>"><br>
<label for="overview">Overview of project <span class="error">* <?php echo $overviewErr;?></span></label><br>
<textarea name="overview" maxlength="1000" cols="25" rows="5"><?php echo $overview;?></textarea><br>
<br> <input type="submit" value="Submit" name="submit" class="art-button" style="zoom: 1;">
</form>
Это PHP-код формы, который находится внутри того же файла, что и код HTML:
<?php
function test_input($data){
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
// define variables and set to empty values
$first_nameErr = $last_nameErr = $emailErr = $overviewErr = "";
$first_name = $last_name = $email = $overview = "";
if(isset($_POST['email'])) {
$email_to = "[email protected]";
$email_subject = "Contact us - My company name";
{
if (empty($_POST["first_name"]))
{$first_nameErr = "(First Name is required)";}
else
{$first_name = test_input($_POST["first_name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$first_name))
{
$first_name = "(Only letters and white space allowed)";
}
}
if (empty($_POST["last_name"]))
{$last_nameErr = "(Last Name is required)";}
else
{$last_name = test_input($_POST["last_name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$last_name))
{
$last_name = "(Only letters and white space allowed)";
}
}
if (empty($_POST["email"]))
{$emailErr = "(Email ID is required)";}
else
{$email = test_input($_POST["email"]);
// check if e-mail address syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr = "(Invalid email format)";
}
}
if (empty($_POST["overview"]))
{$overviewErr = "(Overview is required)";}
else
{$overview = test_input($_POST["overview"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$overview))
{
$overview = "(Only letters and white space allowed)";
}
}
}
//Email & SEND INFO
$email_message = "Form details below.\n\n";
$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($last_name)."\n";
$email_message .= "Email: ".clean_string($email)."\n";
$email_message .= "Services: ".clean_string(implode(', ', $service))."\n";
$email_message .= "Overview: ".clean_string($overview)."\n";
// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
?>
<!-- Success HTML -->
Thank you for contacting us. We will be in touch with you very soon.
<?php
}
?>
Теперь, когда я выполняю код, я получаю эту ошибку: вызовите неопределенную функцию test_input() в строке 48, которая является test_input() в поле "Имя" всего процесса проверки.
Как устранить эту ошибку?
Заранее спасибо.
Я разрешил вышеуказанную ошибку, используя предложение larsAnders! Спасибо за это!
Я обновил основной код, в соответствии с новым кодом, который я использую.
Но у меня есть две новые ошибки, для новых ошибок я не получаю ничего в своем письме, который я проверил в флажках, а также когда я получаю E-mail, я не получаю, от кого я его получил. Это html-код, который я использую:
<label for="service">Services required<br></label>
<input type="checkbox" name="service[]" value="web_design_services">Web Design Services</label><br>
<input type="checkbox" name="service[]" value="web_development_services">Web Development Services</label><br>
<input type="checkbox" name="service[]" value="web_identity_management_services">Web Identity Management Services</label><br>
<input type="checkbox" name="service[]" value="digital_design_services">Digital Design Services</label><br>
<input type="checkbox" name="service[]" value="web_video_services">Web Video Services</label><br>
<input type="checkbox" name="service[]" value="web_audio_services">Web Audio Services</label><br>
<input type="checkbox" name="service[]" value="content_management_services">Content Management Services</label><br>
и это единственная строка кода PHP, которую я использую в отношении новой ошибки во всем скрипте:
$email_message .= "Services: ".clean_string(implode(', ', $service))."\n";
Пожалуйста, также скажите мне, где я ошибаюсь, если не получаю отправителя, в своем E-mail. Во всех моих предыдущих сценариях он показывал отправителю как "Я".
В PHP, как и во многих языках, порядок вещей имеет значение. Итак, когда ваш скрипт выполняется, и он достигает вызова функции, эта функция уже должна быть определена где-то. Сначала определите функцию. Затем вызовите функцию. Вы не можете просто разместить функцию где угодно (например, внутри блока if) и ожидать, что код будет искать ее и использовать. Убедитесь, что ваши функции определены вне любых блоков if, потому что если условие принимает значение false, функции никогда не будут определены. Пока вы учитесь, просто держите все свои функции в верхней части скрипта, вне любых логических блоков. Начните свой скрипт следующим образом:
function test_input($data){
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}
// define variables and set to empty values
$first_nameErr = $last_nameErr = $emailErr = $overviewErr = "";
$first_name = $last_name = $email = $overview = "";
if(isset($_POST['email'])) {
// EDIT THE 2 LINES BELOW AS REQUIRED
$email_to = "[email protected]";
$email_from = $_POST['email'];
$email_subject = "Contact us - Origin web designers";
//{ why are there stray brackets everywhere? if(condition){code} else{code}
if (empty($_POST["first_name"]))
{$first_nameErr = "(First Name is required)";}
else
{$first_name = test_input($_POST["first_name"]);}
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$first_name))
{
$first_name = "(Only letters and white space allowed)";
}
if (empty($_POST["last_name"]))
и т.д... как раньше...
Для обработки флажков вам понадобится нечто подобное. Это определит массив с именем $ service:
if (isset($_POST['service'])) {
$service = $_POST['service'];
}
И он может быть помещен прямо перед этой строкой:
//Email & SEND INFO
Затем, когда ваш код попадает в строку $ email_message. = "Services: line", он будет иметь массив, называемый $ service, чтобы взорваться.