В основном я работаю над формой обзора, в которой пользователи заполняют элементы определенного продукта и при отправке формы он вызывает process.php, который проверяет форму и будет отправлять мне по электронной почте, когда вы представлен без ошибок. Затем он возвращает пользователя на страницу формы и либо отображает ошибки, которые были совершены, либо говорит, что он был отправлен успешно, но все это отлично работает, но теперь мне нужно, чтобы форма была заполнена правильно. Я все еще хочу, чтобы электронная почта и возвращаются на страницу формы, но также вставляют данные в мой db. Проверка моей формы работает замечательно, пока я не попробовать и поп-код, чтобы вставить в базу данных, а затем я получаю эти ошибки ...Проверка моей формы PHP и отправка в базу данных
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/XZXZ/support/database.inc:16) in /home/XZXZ/public_html/Reviews/process.php on line 113
Warning: Cannot modify header information - headers already sent by (output started at /home/XZXZ/support/database.inc:16) in /home/XZXZ/public_html/Reviews/process.php on line 117
Мне просто нужно знать, где я могу совать это на то, чтобы избежать этих ошибок и все еще все работает нормально. Вот посмотрите на файл process.php:
<?php
if(isset($_POST)){
//form validation vars
$formok = true;
$errors = array();
//sumbission data
$ipaddress = $_SERVER['REMOTE_ADDR'];
$sub_date = date('d/m/Y');
$sub_time = date('H:i:s');
//form data
$sub_date = $_POST['sub_date'];
$sub_time = $_POST['sub_time'];
$review_title = $_POST['review_title'];
$rating = $_POST['rating'];
$pros = $_POST['pros'];
$cons = $_POST['cons'];
$best_uses = $_POST['best_uses'];
$comments = $_POST['comments'];
$upload = $_POST['upload'];
$recommend = $_POST['recommend'];
$reviewer_name = $_POST['reviewer_name'];
$reviewer_desc = $_POST['reviewer_desc'];
$reviewer_loc = $_POST['reviewer_loc'];
//form validation to go here....
}
//validate review title is not empty
if(empty($review_title)){
$formok = false;
$errors[] = "You have not entered a title for this review";
}
//validate rating is selected
if (isset ($_POST['rating']) && ($_POST['rating'] == '')) {
$formok = FALSE;
$errors[] = "You have not selected a rating for the product";
}
//validate pros is not empty
if(empty($pros)){
$formok = false;
$errors[] = "You have not entered any pros";
}
//validate cons is not empty
if(empty($cons)){
$formok = false;
$errors[] = "You have not entered any cons";
}
//validate name is not empty
if(empty($reviewer_name)){
$formok = false;
$errors[] = "You have not entered your name";
}
//validate desc is not empty
if(empty($reviewer_desc)){
$formok = false;
$errors[] = "You have not entered your description";
}
//validate location is not empty
if(empty($reviewer_loc)){
$formok = false;
$errors[] = "You have not entered your location";
}
//send email if all is ok
if($formok){
$headers = "From: [email protected]" . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$emailbody = "<p>You have received a new product review pending approval from XZXZ.com</p>
<p><strong>Review Title: </strong> {$review_title} </p>
<p><strong>Rating: </strong> {rating} </p>
<p><strong>Pros: </strong> {$pros} </p>
<p><strong>Cons: </strong> {$cons} </p>
<p><strong>Best Uses: </strong> {$best_uses} </p>
<p><strong>Comments: </strong> {$comments} </p>
<p><strong>Upload: </strong> {$upload} </p>
<p><strong>Recommend: </strong> {$recommend} </p>
<p><strong>Name: </strong> {$reviewer_name} </p>
<p><strong>Description: </strong> {$reviewer_desc} </p>
<p><strong>Location: </strong> {$reviewer_loc} </p>
<p>This message was sent from the IP Address: {$ipaddress} on {$date} at {$time}</p>";
mail("[email protected]","New Pending Review",$emailbody,$headers);
//insert to database
require("/home/XZXZ/support/database.inc");
$SQL="INSERT INTO 'XZXZ_rvs'.'reviews_prod' (sub_date, sub_time, review_title, rating, pros, cons, best_uses, comments, upload, recommend, reviewer_name, reviewer_desc, reviewer_loc) VALUES ('$_POST[$sub_date]','$_POST[$sub_time]','$_POST[$review_title]','$_POST[$rating]','$_POST[$pros]','$_POST[$cons]','$_POST[$best_uses]','$_POST[$comments]','$_POST[$upload]','$_POST[$recommend]','$_POST[$reviewer_name]','$_POST[$reviewer_desc]','$_POST[$reviewer_loc]')";
}
//what we need to return back to our form
$returndata = array(
'posted_form_data' => array(
'review_title' => $review_title,
'rating' => $rating,
'pros' => $pros,
'cons' => $cons,
'best_uses' => $best_uses,
'comments' => $comments,
'upload' => $upload,
'recommend' => $recommend,
'reviewer_name' => $reviewer_name,
'reviewer_desc' => $reviewer_desc,
'reviewer_loc' => $reviewer_loc
),
'form_ok' => $formok,
'errors' => $errors
);
//if this is not an ajax request
if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){
//set session variables
session_start();
$_SESSION['cf_returndata'] = $returndata;
//redirect back to form
header('location: ' . $_SERVER['HTTP_REFERER']);
}
Пожалуйста, пожалуйста, пожалуйста, рассмотреть вопрос о добавлении расширения '.php' в файл database.inc, если кто-то перемещается к этому файлу в своем браузере, он выводит в виде текста плана, отображая все параметры подключения к базе данных! – Dale
Просто так, спасибо за подсказку, я унаследовал этот проект и, как правило, при работе с БД просто закодировал все в один и тот же php-файл, вместо того, чтобы использовать – forevermetal02
@Dale, это не обязательно так. Очень легко установить файлы '.inc', которые будут обрабатываться как PHP (и не показывать источник посетителям). Тем не менее, хорошая практика заключается в том, чтобы поддерживать расширение как значение по умолчанию ('.php'), если вы когда-либо переходите на сервер, который не поддерживает' .htaccess' (или файл '.htaccess' не передается при использовании FTP, из-за его скрытия по умолчанию). – 0b10011