我正在尝试通过phpmailer发送一个名为proposal
的文件。但它似乎不起作用。我似乎无法$_FILES
工作或将isset
与$_POST
一起应用于它.请帮忙。提前谢谢你。
这是 HTML 文件:
PHP 包含在 html 之上
<?php
session_start(); //to access errors from form_process.php
require_once '../helper/security.php'; //include security php
require_once("../includes/config.php");
$errors = isset($_SESSION['errors']) ? $_SESSION['errors'] : [];
$fields = isset($_SESSION['fields']) ? $_SESSION['fields'] : [];
$success = isset($_SESSION['success']);
$pageTitle = "valhalla | Franchise";
$pageId = "franchise";
include(ROOT_PATH . "includes/header.php");
?>
PHP 代码结束
<!-- BANNER
================================================== -->
<div id="banner" class="break">
<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<div class="tabs_wrapper">
<?php if($success == 'true'): ?>
<div class="success_notice">
<ul>
<li><?php echo '•Email sent!' ?></li> <!--Lists down errors-->
</ul>
</div>
<?php endif; ?>
<?php if(!empty($errors)): ?>
<div class="error_notice">
<ul>
<li>•<?php echo implode('</li><li>•', $errors); ?></li> <!--Lists down errors-->
</ul>
</div>
<?php endif; ?>
</div><!--/.tabs_wrapper-->
</div><!--/.col-->
</div><!--/.row-->
<div class="row">
<div class="col-md-12">
<div class="image_div_setting">
<img src="<?php echo BASE_URL; ?>img/banner.png" alt="Banner for franchise">
</div>
</div>
</div>
</div>
</div>
<!-- FRANCHISE DETAILS
================================================== -->
<div id="franchise_details">
<div class="container">
<div class="row">
<div class="col-md-3">
<div class="page_header">
<h1>text</h1>
</div>
</div>
<div class="col-md-6">
<div class="description">
<p>
TEXT
</p>
<p>
</p>
</div>
</div>
<div class="col-md-3">
<div class="contact_form">
<button type="button" class="btn btn-default center-block" data-toggle="modal" data-target="#franchiseModal">INQUIRE NOW</button>
</div>
</div>
</div>
</div>
</div>
<!-- MODAL -->
<div class="generalModal">
<!--TEXT 1-->
<div class="modal fade" id="franchiseModal" tabindex="-1" role="dialog" aria-labelledby="franchiseModal">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">X</span></button>
</div>
<div class="modal-body">
<div class="modalMainHeader">
<h4 class="modal-title" id="franchiseModalLabel">FRANCHISE</h4>
</div>
<div class="modalDescription">
<p>
This is text.
</p>
</div>
<div class="modalSubHeader">
<h4 class="modal-title" id="franchiseModalLabel">TEXT</h4>
</div>
<div class="contact_form">
<form name="franchise" method="post" action="<?php echo BASE_URL; ?>mail/form_process_franchise.php">
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<div class="tabs_wrapper">
<?php if($success == 'true'): ?>
<div class="success_notice">
<ul>
<li><?php echo '•Email sent!' ?></li> <!--Lists down errors-->
</ul>
</div>
<?php endif; ?>
<?php if(!empty($errors)): ?>
<div class="error_notice">
<ul>
<li>•<?php echo implode('</li><li>•', $errors); ?></li> <!--Lists down errors-->
</ul>
</div>
<?php endif; ?>
</div><!--/.tabs_wrapper-->
</div><!--/.col-->
</div><!--/.row-->
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label for="name">NAME</label>
<input type="text" name="name" class="form-control" id="" placeholder="" <?php echo isset($fields['name']) ? ' value="' . e($fields['name']) . '"' : '' ?>>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label for="email" class="control-label">EMAIL</label>
<input type="text" name="email" class="form-control" id="" placeholder="" <?php echo isset($fields['email']) ? ' value="' . e($fields['email']) . '"' : '' ?>>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label for="phone" class="control-label">PHONE:</label>
<input type="text" name="phone" class="form-control" id="" placeholder="" <?php echo isset($fields['phone']) ? ' value="' . e($fields['phone']) . '"' : '' ?>>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label for="location" class="control-label">LOCATION:</label>
<input type="text" name="location" class="form-control" id="" placeholder="" <?php echo isset($fields['location']) ? ' value="' . e($fields['location']) . '"' : '' ?>>
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="form-group">
<label for="proposal">PROPOSAL</label>
<div class="input-group">
<div class="row">
<div class="col-xs-8 col-sm-7 col-md-7">
<input type="text" name="proposal" class="form-control" readonly="">
</div>
<div class="col-xs-4 col-sm-5 col-md-5">
<div class="input-group-btn">
<div class="btn btn-primary btn-file">
UPLOAD <input type="file" name="proposal">
</div>
</div>
</div>
</div>
</div>
<span class="help-block">
*PROPOSAL MUST BE IN PDF FORMAT
</span>
</div>
</div>
<div class="col-xs-12 col-sm-6 col-md-6">
<div class="form-group">
<div class="captcha_security_section">
<div class="row">
<div class="col-xs-8 col-sm-6 col-md-8 col-lg-8">
<label class="" for="captcha">Captcha</label>
<input type="text" name="captcha" class="form-control" <?php echo isset($fields['captcha']) ? ' value="' . e($fields['captcha']) . '"' : '' ?>>
</div>
<div class="col-xs-4 col-sm-6 col-md-4 col-lg-4">
<label class="" for="captcha">Code</label>
<img src="<?php echo BASE_URL; ?>mail/captcha.php"/><br>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" name="submit" id="submit" value="Submit" class="btn btn-default">Send</button>
</div>
</div>
</div>
</form>
</div>
</div><!--/modal-body-->
</div>
</div>
</div>
</div><!-- /generalModal-->
<!-- PRESS KIT
================================================== -->
<div class="pdf_download">
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="pdf_header_container">
<div class="header text-center">
<h3>OFFICIAL PRESS KIT</h3>
</div>
<div class="description text-center">
<p>*You can download the official valhalla PRESS KIT if you click on the boxes below:</p>
<p>*You need to have adobe reader installed:</p>
</div>
</div>
<div class="row">
<div class="col-md-1">
</div>
<div class="col-md-10">
<div class="row">
<div class="col-md-4">
</div>
<div class="col-md-4">
<div class="pdf_container text-center">
<a href="<?php echo BASE_URL; ?>img/menu/pdf/valhalla_press_kit_updated.pdf" target="_blank">
<div class ="pdf_pics">
<img src="<?php echo BASE_URL; ?>img/menu/pdf/presskit_thumbnail.png" alt="Official Press Kit" class="img-circle">
</div>
<div class="header">
<h4>valhalla MENU PRESS KIT</h4>
</div>
<div class="description">
<p>You can download the official valhalla Press Kit!</p>
</div>
<div class="note">
<p>CLICK ON THE BOX</p>
</div>
</a>
</div>
</div>
<div class="col-md-4">
</div>
</div>
</div>
<div class="col-md-1">
</div>
</div>
</div>
</div>
</div>
</div>
用于 HTML 文件的 PHP 结束
<?php
include(ROOT_PATH . "includes/footer.php");
unset($_SESSION['errors']);
unset($_SESSION['fields']);
unset($_SESSION['success']);
?>
HTML 文件结尾
这是一个不同的 PHP 文件:
<?php
session_start(); //for transporting information
require_once '../phpmailer/PHPMailerAutoload.php'; //included php mailer
header('Location:../franchise/'); //redirect back to franchise.php after submission
$errors = []; //array for errors
//print_r($_POST);
//to check if fields are set
if(isset($_POST['name'], $_POST['email'], $_POST['phone'], $_POST['location'], $_POST['proposal'] )) { //fields are empty
$fields = [ //store empty fields
'name' => $_POST['name'],
'email' => $_POST['email'],
'phone' => $_POST['phone'],
'location' => $_POST['location'],
'proposal' => $_POST['proposal']
];
foreach($fields as $field => $data) {
//file extension
$file_ext = explode('.', $fields['proposal']);
$file_ext = strtolower(end($file_ext));
$allowed = array('pdf', 'pdf');
if(empty($data)) {
$errors[] = 'Enter ' . $field . ' field';
} else {
if ((!preg_match("/^[a-zA-Z ]*$/",$fields['name'])) && (!empty($fields['name'])) ) {
$errors['name'] = 'Name: Only letters and white space allowed.';
}
if ((!preg_match("/^[0-9]{0,12}$/",$fields['phone'])) && (!empty($fields['phone'])) ) {
$errors['phone'] = 'Phone: Numbers only';
}
if((!filter_var($fields['email'], FILTER_VALIDATE_EMAIL)) && (!empty($fields['email'])) ){
$errors['email'] = 'Please input proper email.';
}
if((!in_array($file_ext, $allowed)) && (!empty($fields['proposal'])) ) {
$errors['proposal'] = 'Only pdf allowed.';
}
}
}
if(empty($errors) && ($_POST["captcha"]!=""&&$_SESSION["code"]==$_POST["captcha"]) ) { //this is for sending the mail
$m = new PHPMailer;
$m->isSMTP();
$m->SMTPAuth = true;
$m->SMTPDebug = 2; // for debugging
//These 5 elements are used to connect to server
$m->Host = 'hosting';
$m->Username = 'randomusername';
$m->Password = 'randompassword';
$m->SMTPSecure = 'ssl';
$m->Port = 465;
$m->isHTML(); // To send message as html
$m->Subject = 'Contact form submitted by ' . $fields['name'];
$m->Body = 'You have received a new message from your website contact form.' .
'<p>' . 'The reservation details are the following: ' . '</p>' .
'<p>' . '<b>' . 'From: ' . '</b>' . $fields['name'] . ' (' . $fields['email'] . ')' . '</p>' .
'<p>' . '<b>' . 'Phone: ' . '</b>' . $fields['phone'] . '</p>' .
'<p>' . '<b>' . 'Location: ' . '</b>' . $fields['location'] . '</p>';
$m->FromName = 'valhalla.com.ph'; //if not then it will be replaced with user
$m->SetFrom('valhalla@valhalla.com.ph', 'valhalla.com.ph'); //Important for gmail.
$m->AddReplyTo($fields['email'], $fields['name']); //doesn't work with google
//Target email. Message to be sent to
$m->AddAddress('formsubmission@valhalla.com.ph', 'valhalla' );
//$mail->AddAttachment($file);
$mail->AddAttachment($_FILES['proposal']['tmp_name'], $_FILES['proposal']['name']);
// delete the cookie so it cannot sent again by refreshing this page
setcookie('tntcon','');
if($m->send()){
$success='true';
} else {
$errors[] = 'Sorry, could not send email. Try again later.';
}
} else {
$errors[] = 'Invalid Security Code.';
}
} else { //fields are not empty
$errors[] = 'Something wrong';
}
$_SESSION['errors'] = $errors; //stores errors from array and loop
$_SESSION['fields'] = $fields;
$_SESSION['success'] = $success;
?>
你为一个 SO 问题发帖太多了,但我想我还是发现了你的问题。您的表单标记缺少允许文件上传的 MIME 类型。而不是:
<form name="franchise" method="post" action="<?php echo BASE_URL; ?>mail/form_process_franchise.php">
你需要:
<form name="franchise" method="post" enctype="multipart/form-data" action="<?php echo BASE_URL; ?>mail/form_process_franchise.php">
您还需要一个MAX_FILE_SIZE
元素:
<input type="hidden" name="MAX_FILE_SIZE" value="300000">
将值更改为适合预期上传的值。
之后,您需要阅读有关处理上传的 PHP 文档,以及 PHPMailer 提供的send_file_upload
示例,但简短的版本是您需要使用move_uploaded_file
来确保您的上传是安全的,然后再尝试使用它们。
所有这些都可以在任何关于在 PHP 中处理文件上传的初学者教程中找到,所以请在将来发布之前进行搜索。