@fOstere

Как создавать страницы по нажатию?

Здравствуйте, есть обратная связь, на ней невидимый счет посещений

Хотелось сделать чтобы при отправке, создавалась уникальная страница, и уникальность была привязана к счетчику, к примеру user1(взависимости от счетчика)
Код по созданию страниц уже есть

/// Страница вызывается
$file = "".$_GET['count']."$count.html"; // Путь к новому файлу
$html = "<HTML>\n<HEAD\n<TITLE>TITLE</TITLE>\n</HEAD>\n<BODY>\n\n</BODY>\n</HTML>"; // Содержимое
if (file_exists($file)) {
echo "Ошибка, страница с таким именем уже есть!";
} else {
$handle = fopen($file,"w+"); // Создать файл, вернуть дескриптор в $handle
fwrite($handle,$html); // Записать содержимое в дескриптор
fclose($handle); // Закрыть файл
echo "Page named ".$file." created!"; // Отчёт
}


но так создается страница автоматический, сразу как пользователь зашел на страницу
а я хотел чтобы после отправки формы, создавалась страница и человек переходил на нее
пробывал даже a href ставить, не переходит, просто заново открывает страницу с информацией что сообщение отправленно, помогите пожалуйста
снизу код формы обратной связи
$msg_box = ""; // в этой переменной будем хранить сообщения формы
	$ip = $_SERVER['REMOTE_ADDR'];
	
	if($_POST['btn_submit']){
		$errors = array(); // контейнер для ошибок
		// проверяем корректность полей
		if($_POST['name'] == "") 	 $errors[] = "Поле 'Ваше имя' не заполнено!";
		if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; }

		// если форма без ошибок
		if(empty($errors)){		
			// собираем данные из формы
			$message  = "Имя пользователя $count: " . $_POST['name'] . "<br/>";
			$message .= "IP Адрес: " . $_SERVER['HTTP_CF_CONNECTING_IP'] . "<br/>";	

			send_mail($message); // отправим письмо
			// выведем сообщение об успехе
			$msg_box = "сообщение после отправки";
		}else{
			// если были ошибки, то выводим их
			$msg_box = "";
			foreach($errors as $one_error){
				$msg_box .= "<span style='color: red;'>$one_error</span><br/>";
			}
		}
	}
	
	// функция отправки письма
	function send_mail($message){
		// почта, на которую придет письмо
		$mail_to = "почта"; 
		// тема письма
		$subject = "Письмо с обратной связи";
		
		// заголовок письма
		$headers= "MIME-Version: 1.0\r\n";
		$headers .= "Content-type: text/html; charset=utf-8\r\n"; // кодировка письма
		$headers .= "From: 1 \r\n"; // от кого письмо
		
		// отправляем письмо 
		mail($mail_to, $subject, $message, $headers);
	}
  • Вопрос задан
  • 113 просмотров
Решения вопроса 1
Screamie
@Screamie
Full-stack разработчик
Здравствуйте! Для начала, у вас логическая проблема, которая связана с недопониманием, как работает PHP. Рекомендую лучше разобраться в основах языка. Но это на будущее, а пока попробую помочь с тем, что есть.

Во-первых, код создания файла и записи счетчика лучше всего вынести в отдельную функцию, которая возвращает адрес файла или false в зависимости от того создан файл или нет. Сам код я не рассматриваю, но его можно сильно улучшить (например: посмотрите вот эти функции: 1 2)

Далее, вызываем функцию создания файла в момент, когда форма успешно обработана. Так она не будет создаваться сразу.

Затем, если функция вернула не false, то делаем редирект на созданную страницу через

header('Location: http://www.example.com/newpage.html');


Дополню ответ псевдокодом, для наглядности:

function createCounterPage() {
 // Здесь пишем логику создания файла и счетчика
 // Функция будет возвращать путь к файлу или false если его не удалось создать
}

//  Обработка формы (ее лучше хранить отдельно от функции)

if (isset($_POST['btn_submit']) && !empty($_POST['btn_submit'])) {

    // Обрабатываем форму...
    // Если нет ошибок - запускаем логику
    $counterPage = createCounterPage();
    send_mail($message)

    if($counterPage && is_file($counterPage)) {
        header('Location: http://www.example.com/' . $counterPage);
    }

}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@CyberGrom
1. Для чего вам уникальная страница?
2. PHP как раз хорош тем что можно одним скриптом (одной страницей) делать много разных операций.
3. Если вам нужно записать действия/что ввел пользователь в форму, то это можно записывать в общий файл/базу. Если нужно в именно разные файлы можно именовать файлы по timestamp + ip. И затем по результатам показать что-нужно этому пользователю.
4. Перед созданием файла проверяйте, что была отправлена форма/нажата кнопка, а не просто пользователь зашел на страницу.

Вообще начните с того, что поймите для чего вы делаете такой скрипт. Наверняка есть другое решение, того что вы пытаетесь придумать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы