@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);
	}
  • Вопрос задан
  • 108 просмотров
Решения вопроса 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. Перед созданием файла проверяйте, что была отправлена форма/нажата кнопка, а не просто пользователь зашел на страницу.

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

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 20:08
400000 руб./за проект
23 апр. 2024, в 19:21
300 руб./за проект
23 апр. 2024, в 19:05
15000 руб./за проект