Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   php поддержка (https://javascript.ru/forum/misc/71609-php-podderzhka.html)

KATRIN1786492 30.11.2017 21:37

php поддержка
 
Извиняюсь, что не по теме, но может кто-то сможет помочь?
у меня функция php, которая будет отправлять смс с комментарием(для моего сайта в университете).Подскажите, как сделать так, чтобы текст "сообщение отправлено " появлялся только тогда, когда я нажимаю отправить ?

<?php
$name = $email = $comment = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$comment = test_input($_POST["comment"]);
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>

<h2>Ваше сообщение в тех поддержку сайта</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Имя: <input type="text" name="name">
<br><br>
E-mail: <input type="text" name="email">
<br><br>
Комментарий: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
<input type="submit" name="submit" value="Отправить">
</form>

<?php
echo "<h2>Сообщение отправлено!</h2>";
?>

Aetae 30.11.2017 22:09

По логике вещей сообщение "сообщение отправлено", должно сообщать, что сообщение действительно отправлено. Соответственно вывод сообщения "сообщение отправлено" должно быть сразу после вызова функции отправки, а не просто так.

Но в принципе в конкретном случае будет так:
<?php
$name = $email = $comment = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$comment = test_input($_POST["comment"]);
*!*echo "<h2>Сообщение отправлено!</h2>";*/!*
}
...

KATRIN1786492 30.11.2017 22:44

Смс появляется вверху, а как сделать, чтобы оно появлялось снизу?)

Lion777 30.11.2017 22:51

Это еще фигня, что сверху, если обновить страницу сообщение опять отправится, лучше бы с помощью аякс делала, а так в данном случае вставь куда надо что-бы выводилось
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$comment = test_input($_POST["comment"]);
echo "<h2>Сообщение отправлено!</h2>";
}

KATRIN1786492 30.11.2017 22:56

Вот кстати да, сейчас обновляю,а смс остается, я уже так запуталась во всем, помогите , прошу :(

KATRIN1786492 30.11.2017 22:57

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

Lion777 30.11.2017 23:03

Ну если достаточно того что сейчас, то тот код пхп с поста 4 вставь у себя в страницу в то место где тебе надо что-бы выводилось само сообщение.

KATRIN1786492 30.11.2017 23:16

так я так и попробовала сразу, но это ни на что не влияет, текст все равно выбивает в самом начале

Lion777 30.11.2017 23:17

покажи всю свою страницу

Aetae 30.11.2017 23:20

<?php
$name = $email = $comment = "";
$sent = false;

if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$comment = test_input($_POST["comment"]);
$sent = true;
}

function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>

<h2>Ваше сообщение в тех поддержку сайта</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Имя: <input type="text" name="name">
<br><br>
E-mail: <input type="text" name="email">
<br><br>
Комментарий: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
<input type="submit" name="submit" value="Отправить">
</form>

<?php
if($sent){
    echo "<h2>Сообщение отправлено!</h2>";
}
?>

Lion777 01.12.2017 02:00

Но при перезагрузке страницы данные будут отправляться повторно, я вот как говорил по вашему коду добавить можно вниз
<?php
$name = $email = $comment = "";

function test_input($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

	<h2>Ваше сообщение в тех поддержку сайта</h2>
	<form method="post" >
		Имя:
		<input type="text" name="name">
		<br>
		<br> E-mail:
		<input type="text" name="email">
		<br>
		<br> Комментарий:
		<textarea name="comment" rows="5" cols="40"></textarea>
		<br>
		<br>
		<input type="submit" name="submit" value="Отправить">
	</form>

<?php
/***
 *** вот куда добавить
 ***/
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = test_input($_POST["name"]);
    $email = test_input($_POST["email"]);
    $comment = test_input($_POST["comment"]);
    echo "<h2>Сообщение отправленно!</h2>";
}
?>

___
Вот самый простой вариант, что-бы при перезагрузке форма повторно не отправлялась.
<?php
function test_input($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
if (!empty($_POST["name"]) and !empty($_POST["email"]) and !empty($_POST["comment"])) {
    $name = test_input($_POST["name"]);
    $email = test_input($_POST["email"]);
    $comment = test_input($_POST["comment"]);
    exit ('<html>
    <head>
        <meta http-equiv="refresh" content="3; url=' . $_SERVER['PHP_SELF'] . '">
    </head>
    <body>Сообщение отправлено!</body>
</html>');
}
?>

<h2>Ваше сообщение в тех поддержку сайта</h2>
<form method="post">
    Имя:
    <br>
    <input type="text" name="name">
    <br>
    E-mail:
    <br>
    <input type="text" name="email">
    <br>
    Комментарий:
    <br>
    <textarea name="comment" rows="5" cols="40"></textarea>
    <br>
    <input type="submit" name="submit" value="Отправить">
</form>

laimas 01.12.2017 07:43

Цитата:

Сообщение от Aetae
htmlspecialchars($data)

Цитата:

Сообщение от Aetae
htmlspecialchars($_SERVER["PHP_SELF"])

Зачем это?

laimas 01.12.2017 07:45

KATRIN1786492,
Чтобы не происходило повторной отправки, нужно сбрасывать POST данные, для этого перенаправляйте пользователя.

KATRIN1786492 01.12.2017 10:55

Огромное спасибо :)


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