в php, почему форма ввода при отправке занимает 2 раза нажатой

0
    <?php
        if ($_POST['submit']) {
            mysql_connect ("localhost", "root", "swt") or die ('Error: ' . mysql_error());
            mysql_select_db("db") or die ('Data error:' . mysql_error());
            $text = mysql_real_escape_string($_POST['comments']); 
            $query="INSERT INTO greetings (msg) VALUES ('$text')";
            mysql_query($query) or die ('Error updating database' . mysql_error());
            $id= mysql_insert_id();
            $url = "preview.php?id=".$id;
        }
    ?>
<form method="post" action="<? echo $url ?>" enctype="multipart/form-data" >
    <textarea name="comments" placeholder="please input your message"></textarea>
    <input name="submit" type="submit" value="submit" />
</form>

привет, извините, новичок в PHP. я хочу спросить, почему, когда я отправляю его, он должен занять 2 раза, прежде чем перейти к preview.php

Благодарю.

Теги:
forms
submit

4 ответа

0
Лучший ответ

В первый раз $url пуст, поэтому браузер запрашивает одну и ту же страницу, затем URL-адрес изменяется, затем вводится в форму, чтобы следующая почта перенаправляла ваш файл preview.php.
Просто отправил заголовок для перенаправления.

header("Location: /preview.php?id=".$id);

так это будет:

  <?php
        if ($_POST['submit']) {
            mysql_connect ("localhost", "root", "swt") or die ('Error: ' . mysql_error());
            mysql_select_db("db") or die ('Data error:' . mysql_error());
            $text = mysql_real_escape_string($_POST['comments']); 
            $query="INSERT INTO greetings (msg) VALUES ('$text')";
            mysql_query($query) or die ('Error updating database' . mysql_error());
            $id= mysql_insert_id();
            $url = "preview.php?id=".$id;
            header("Location: $url");
        }
    ?>
<form method="post" enctype="multipart/form-data" >
    <textarea name="comments" placeholder="please input your message"></textarea>
    <input name="submit" type="submit" value="submit" />
</form>

Не используйте действие, когда вы хотите отправить запрос на ту же страницу.
(Я предполагаю, что часть php в вашем фрагменте - это тот же файл)

Также для отправки перенаправления вам не нужно выводить html перед отправкой заголовка

  • 0
    на самом деле у меня есть 2 страницы, форма в asd.php. и цель - preview.php. так что у меня должна быть форма действия? Во всяком случае, я не знаю, что это все еще не работает, если я положу в свой хостинг. не могли бы вы помочь, спасибо
  • 0
    Возможные проблемы: в геадере местоположения вы указываете абсолютный путь после домена, и, во-вторых, это preview.php с использованием глобальной переменной $ _POST. Если это так, вам следует переосмыслить стратегию публикации, самый простой способ - использовать переменную сеанса. : header работает, например, /preview.php передаст rq на example.com/preview.php и без косой черты отправит пользователю CURRENT_BROWSER_ADDRESS / preview.php. Я надеюсь, что это помогает :)
0

Ваше значение действия формы ($ url) создается после отправки первого сообщения, что означает, что он пуст при первом отправке клика. Лучшее решение состоит в том, чтобы сохранить значение действия пустым, а в пост-логике вместо этого нужно построить значение $ url, которое вы можете перенаправить пользователя в $ url:

...
  $id= mysql_insert_id();
  $url = "preview.php?id=".$id;
  header('Location: '.$url);
}
0

Измените <?= $url?> to <?php echo $ url;?>.

На вашем сервере нет short_open_tags.

0

Первое изменение <? to <?php like..

<form method="post" action="<?php echo $url ?>" enctype="multipart/form-data" >
<textarea name="comments" placeholder="please input your message"></textarea>
<input name="submit" type="submit" value="submit" />

Мне это нравится..

Во-вторых, откройте firebug, нажмите кнопку и посмотрите, какая ошибка вы получаете. Существует вероятность того, что у вас может быть некоторая ошибка на странице, или проверьте, инициирован ли ваш запрос или нет при первом нажатии. Также проверьте, не является ли $url пустым, при первом нажатии.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню