Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   window.location.replace(...) не могу привязать к окну, которое написано на php (https://javascript.ru/forum/library-toolkit-framework/64845-window-location-replace-ne-mogu-privyazat-k-oknu-kotoroe-napisano-na-php.html)

Million 08.09.2016 18:23

window.location.replace(...) не могу привязать к окну, которое написано на php
 
Не могу решить такую задачу, есть форма написана на php, нужно чтоб после sent пользователя перебрасывало в другую вкладку и вернуться назад он не мог. Знаю что это можно реализовать средствами js, но не могу понять как прикрутить скрипт window.location.replace('...'); к данной форме. Помогите пожалуйста с утра сижу крыша едет

function email_form_submission($form) {
if(!defined('PHP_EOL'))
define('PHP_EOL', '\r\n');

$form_email = ((array_key_exists('Email', $_REQUEST) && !empty($_REQUEST['Email'])) ? cleanup_email($_REQUEST['Email']) : '');

$to = $form['email']['to'];
$subject = $form['subject'];
$message = get_email_body($subject, $form['heading'], $form['fields'], $form['resources']);
$headers = get_email_headers($to, $form_email);

$sent = @mail($to, $subject, $message, $headers);

if(!$sent)
die(get_form_error_response($form['resources']['failed_to_send_email']));

$success_data = array(
'redirect' => $form['success_redirect']
);

echo get_form_response(true, $success_data);

laimas 08.09.2016 18:44

Цитата:

Сообщение от Million
Знаю что это можно реализовать средствами js

А что средств сервера для этого не хватает?
И с чего вдруг $sent определяет баг в форме? Функция mail возвращает true если отправление было всего лишь принято для передачи, а false не означает, что отвергнуто по вине пользователя. Он то в чем виновен?

define('PHP_EOL', "\r\n");


В одинарных кавычках это будет просто текст \r\n.

Million 08.09.2016 20:06

Это только кусочек кода (могу скинуть весь код) . Но вы не поняли суть вопроса. Я хочу заменить текущий документ на документ по указанному url. После использования replace() страница не записывается в истории посещений. В частности, это значит, что посетитель не сможет использовать для возврата кнопку браузера "Назад". То есть я хочу использовать <script>window.opener.location.replace('http://google.com')</script> только не знаю как его прикурить к коду PHP

laimas 08.09.2016 20:15

Цитата:

Сообщение от Million
Но вы не поняли суть вопроса.

Это вы не понимаете, что функция mail вообще ничего не проверяет, и sendmail не проверяет существует ли такой адрес. Ошибку, по которой sendmail не принял письмо для отправки можно узнать только по логам, но это никак не будет ошибка о том, что юзер ввел неверный адрес. Это ваша забота не допускать некорректные.

Тогда к чему вся эта глупость с запретом по причине не отправки сообщения sendmail?

Million 08.09.2016 20:54

Вложений: 4
Во вложении все :)

laimas 08.09.2016 21:12

Оно мне не нужно, я и без этого знаю что функция mail не производит никаких проверок. Спокойно можно отослать письмо по адресу as@as.as. Используя не sendmail, а SMTP еще что-то можно сделать, но...
Можно проверить функцией getmxrr(), но только почтовый ретранслятор, не более. Чтобы проверить есть ли адрес почтовый нужно иметь прямой доступ к порту 25, что вряд ли вам разрешит хостер.

В общем ожидать от mail(), что адрес не верный, это полная чушь.

А не "пускать" пользователя на страницу после определенного действия, так это просто перенаправить его, а не издеваться на клиенте над адресом. Тем более он может просто набрать адрес в адресной строке браузера и JS по барабану.

//в самом начале кода, до любого вывода в браузер
session_start();
if($_SESSION['done']) {
    header('location: url');
    exit;
}

//основной код
if(expert) {
    //что-то проверяем, и если сделано, то определяем перенаправление
    $_SESSION['done'] = 1;    
}


Пока в сессии будет этот признак пользователь на эту страницу уже не попадет.

Функция mail(), чтобы знать чего она возвращает.

psiklop 09.09.2016 02:58

Цитата:

Сообщение от laimas
Оно мне не нужно, я и без этого знаю что функция mail не производит никаких проверок.

и как ты узнал что там проверяется и зачем? никто же вообще вроде не писал про проверку ящика на существование? mail же может вернуть и false и я там увидел только лишь, что если false то один код, true - другой

Цитата:

Сообщение от Million
<script>window.opener.location.replace('http://google.com')</script> только не знаю как его прикурить к коду PHP

дописать куда надо и все после "?>"
можно и в код php тогда так echo "<script>window.opener.location.replace('http://google.com')</script>";

хотя там выше написано можно и php перенаправить читай про функцию header();

Million 09.09.2016 09:34

у меня работает все корректно, когда вставляю в код перенаправление echo "<script>window.opener.location.replace('http://google.com')</script>"; перестает работать. Может не туда вставляю.. Просто уже с ума схожу второй день идет не могу решить задачу. Куда его вставить, чтоб он работал ?PHP файлы прикреплял выше

laimas 09.09.2016 10:12

Цитата:

Сообщение от Million
у меня работает все корректно

Ну просто охренеть, по другому и не скажешь. Вы даже не понимаете почему такое не возможно.

Цитата:

Сообщение от Million
когда вставляю в код перенаправление echo "<script>window.opener.location.replace('http://google.com')</script>"; перестает работать.

И что это? Что вы вообще хотите - перенаправить пользователя (а данном случае закрыть вход по конкретному url), или же и это, и еще что-то?

location.replace('http://google.com') -и на что заменяем? Читаем о replace.

psiklop 09.09.2016 10:36

Цитата:

Сообщение от Million
die(get_form_error_response($form['resources']['failed_to_send_email']));

ну если после этого вставить точно не перенаправит - die завершает скрипт

Цитата:

Сообщение от Million
<script>window.opener.location.replace('http://google.com')</script>

.opener может тут и не надо?
Цитата:

Сообщение от Million

echo get_form_response(true, $success_data);

а если удачно что там выводится, оно нужно? если нужно просто перенаправить


Часовой пояс GMT +3, время: 09:53.