За последние 24 часа нас посетили 17711 программистов и 1702 робота. Сейчас ищут 1015 программистов ...

Если submit(x) то...

Тема в разделе "PHP для новичков", создана пользователем Razorfen, 2 авг 2016.

  1. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Необходимо сделать один php-документ для четырех форм. Подобных примеров не нашел, а поэтому, обладая минимальными знаниями PHP, создал нижеуказанный код. При нажатии кнопки submit (каждой из которых дан уникальный name) должно срабатывать одно из выражений. К сожалению, обрабатывает только первое if-выражение. В остальных случаях поля приходят на почту незаполненными. Помогите!
    PHP:
    1. <?php
    2. header('Refresh: 5; URL=http://localhost/index.html');
    3. $name = htmlspecialchars($_POST["name"]);
    4. $email = htmlspecialchars($_POST["email"]);
    5. $tel = htmlspecialchars($_POST["tel"]);
    6. $message = htmlspecialchars($_POST["message"]);
    7. $date = htmlspecialchars($_POST["date"]);
    8. $time = htmlspecialchars($_POST["time"]);
    9. $services = htmlspecialchars($_POST["services"]);
    10. $better = htmlspecialchars($_POST["better"]);
    11. $bs = htmlspecialchars($_POST["bs"]);
    12. $submitfeedback = htmlspecialchars($_POST["submitfeedback"]);
    13. $submitcallback = htmlspecialchars($_POST["submitcallback"]);
    14. $submitquestion = htmlspecialchars($_POST["submitquestion"]);
    15. $submitqueue = htmlspecialchars($_POST["submitqueue"]);
    16. $address = "1@gmail.com";
    17. $subfeedback = "обратная связь";
    18. $subcallback = "заказать звонок";
    19. $subquestion = "задать вопрос";
    20. $subqueue = "запись на прием";
    21. $mesfeedback = "ФИО: $name
    22. Email: $email
    23. Телефон: $tel
    24. Сообщение: $message";
    25. $mescallback = "ФИО: $name
    26. Телефон: $tel
    27. Удобное время звонка: $better
    28. Комментарий: $message";
    29. $mesquestion = "ФИО: $name
    30. Email: $email
    31. Телефон: $tel
    32. Сообщение: $message";
    33. $mesqueue = "ФИО: $name
    34. Email: $email
    35. Телефон: $tel
    36. Дата: $date
    37. Время: $time
    38. Услуга: $services
    39. Комментарий: $message";
    40. if (isset($submitqueue)) {
    41.     if (mail($address, $subqueue, $mesqueue)) {
    42.         echo 'Заявка отправлена';}
    43.     else {
    44.         echo 'Заявка не отправлена';}
    45. }
    46. else if (isset($submitfeedback)) {
    47.     if (mail($address, $subfeedback, $mesfeedback)) {
    48.         echo 'Сообщение отправлено';}
    49.     else {
    50.         echo 'Сообщение не отправлено';}
    51. }
    52. else if (isset($submitcallback)) {
    53.     if (mail($address, $subcallback, $mescallback)) {
    54.         echo 'Заявка отправлена';}
    55.     else {
    56.         echo 'Заявка не отправлена';}
    57. }
    58. else if (isset($submitquestion)) {
    59.     if (mail($address, $subquestion, $mesquestion)) {
    60.         echo 'Сообщение отправлено';}
    61.     else {
    62.         echo 'Сообщение не отправлено';}
    63. }
    64. ?>
     
    #1 Razorfen, 2 авг 2016
    Последнее редактирование: 2 авг 2016
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    эм... ты объявляешь переменные а потом проверяешь объявлены ли они у тебя. ну как бы да, объявлены.
    вместо этой гармошки элс-ифов можно использовать свич.
    и вообще сделать в каждой форме по скрытому полю, по значению которого выбирать рутину отправки.
     
    Razorfen, denis01 и pinokio нравится это.
  3. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    жесть

    наверно потому что у тебя синтаксическая ошибка!

    PHP:
    1. else if  // ???????????????????????
    2. elseif  // Правильное использование
    А вообще в чём ты пишешь, хрен даже с ним с дебагером, любой нормальный IDE должен подсвечивать, если ты вдруг допускаешь синтаксическую ошибку...

    Во первых саму строку в которой ошибка, а во вторых сам документ и над ним воскл значёчек красненький.

    скачай phpstorm, очень удобно для разработки.

    А вообще конечно как и написал выше @Ganzal, слишком много условий.
     
    #3 pinokio, 3 авг 2016
    Последнее редактирование: 3 авг 2016
    Razorfen нравится это.
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Надо не isset($submitfeedback) делать, а isset($_POST["submitfeedback"]).
    Потому что $submitfeedback ты 100% объявляешь присвоением, а $_POST["submitfeedback"] объявляться только если на ту кнопку нажмут, на 4 сразу не могут же нажать, а ты 4 присвоения делаешь. Хотя, лучше бы их проверить, и если в $_POST есть нужный ключ, то только тогда объявлять.
     
    Razorfen и pinokio нравится это.
  5. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    м? https://php.ru/manual/control-structures.elseif.html

    И раз уж тут все ворчат, то тоже добавлю: закрывающий тег ?> в конце файла не нужен и даже вреден.
     
    Razorfen, pinokio и denis01 нравится это.
  6. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    @romach не знал, но так никогда не писал...
    Но у него там вообще жесть.
     
    Razorfen нравится это.
  7. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Спасибо за советы!
    Применил switch - все работает. А можно как-то еще сократить (например, 'Заявка отправлена')?

    PHP:
    1. <?php
    2. header('Refresh: 5; URL=http://localhost/index.html');
    3. if(isset($_POST['token']) && $_POST['token']==='1')
    4. $name = htmlspecialchars($_POST["name"]);
    5. $email = htmlspecialchars($_POST["email"]);
    6. $tel = htmlspecialchars($_POST["tel"]);
    7. $message = htmlspecialchars($_POST["message"]);
    8. $date = (int)$_POST["date"];
    9. $time = (int)$_POST["time"];
    10. $services = htmlspecialchars($_POST["services"]);
    11. $better = (int)$_POST["better"];
    12. $submitfeedback = htmlspecialchars($_POST["submitfeedback"]);
    13. $submitcallback = htmlspecialchars($_POST["submitcallback"]);
    14. $submitquestion = htmlspecialchars($_POST["submitquestion"]);
    15. $submitqueue = htmlspecialchars($_POST["submitqueue"]);
    16. $address = "";
    17. $subfeedback = "Обратная связь";
    18. $subcallback = "Заказать звонок";
    19. $subquestion = "Задать вопрос";
    20. $subqueue = "Запись на прием";
    21. $mesfeedback = "ФИО: $name
    22. Email: $email
    23. Телефон: $tel
    24. Сообщение: $message";
    25. $mescallback = "ФИО: $name
    26. Телефон: $tel
    27. Удобное время звонка: $better
    28. Комментарий: $message";
    29. $mesquestion = "ФИО: $name
    30. Email: $email
    31. Телефон: $tel
    32. Сообщение: $message";
    33. $mesqueue = "ФИО: $name
    34. Email: $email
    35. Телефон: $tel
    36. Дата: $date
    37. Время: $time
    38. Услуга: $services
    39. Комментарий: $message";
    40.  
    41. $action = htmlentities($_POST['action'], ENT_QUOTES);
    42.  
    43. switch( $action )
    44. {
    45.     case 'queue':
    46.         mail($address, $subqueue, $mesqueue);
    47.         echo 'Заявка отправлена';
    48.         break;
    49.      
    50.     case 'feedback':
    51.         mail($address, $subfeedback, $mesfeedback);
    52.         echo 'Заявка отправлена';
    53.         break;
    54.  
    55.     case 'callback':
    56.         mail($address, $subcallback, $mescallback);
    57.         echo 'Заявка отправлена';
    58.         break;
    59.  
    60.     case 'question':
    61.         mail($address, $subquestion, $mesquestion);
    62.         echo 'Заявка отправлена';
    63.         break;
    64.  
    65.     default:
    66.         die( 'Заявка не отправлена' );
    67. }
     
    #7 Razorfen, 5 авг 2016
    Последнее редактирование: 5 авг 2016
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ох, не программист ты совсем))))) Зачем ты объявляешь десяток переменных, если используешь только три-четыре из них? Выхватил адрес, выхватил экшн, ушел по нему в свич, для каждого конкретного кейса создал тему-тело письма и отправил. Это раз. Два - по свичу делаешь тему-тело, но саму отправку можно выполнять "общим" алгоритмом. И три - ты тупо пишешь "заявка отправлена". А с чего ты это взял? Откуда ты знаешь, что отправлена?
     
    Razorfen нравится это.
  9. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    А я и не программист)))
    Спасибо! Вот так? :)

    PHP:
    1. <?php
    2. header('Refresh: 5; URL=http://localhost/index.html');
    3. if(isset($_POST['token']) && $_POST['token']==='1')
    4. $name = htmlspecialchars($_POST["name"]);
    5. $email = htmlspecialchars($_POST["email"]);
    6. $tel = htmlspecialchars($_POST["tel"]);
    7. $message = htmlspecialchars($_POST["message"]);
    8. $date = (int)$_POST["date"];
    9. $time = (int)$_POST["time"];
    10. $services = htmlspecialchars($_POST["services"]);
    11. $better = (int)$_POST["better"];
    12.  
    13. $action = htmlentities($_POST['action'], ENT_QUOTES);
    14.  
    15. switch( $action )
    16. {
    17.     case 'feedback':
    18.         $theme = "обратная связь";
    19.         $message = "
    20.            ФИО: $name
    21.            Email: $email
    22.            Телефон: $tel
    23.            Сообщение: $message";
    24.         break;
    25.  
    26.     case 'callback':
    27.         $theme = "заказать звонок";
    28.         $message = "ФИО: $name
    29.            Телефон: $tel
    30.            Удобное время звонка: $better
    31.            Комментарий: $message";
    32.         break;
    33.  
    34.     case 'question':
    35.         $theme = "задать вопрос";
    36.         $message = "ФИО: $name
    37.            Email: $email
    38.            Телефон: $tel
    39.            Сообщение: $message";
    40.         break;
    41.  
    42.     case 'queue':
    43.         $theme = "запись на прием";
    44.         $message = "ФИО: $name
    45.            Email: $email
    46.            Телефон: $tel
    47.            Дата: $date
    48.            Время: $time
    49.            Услуга: $services
    50.            Комментарий: $message";
    51.         break;
    52. }
    53.  
    54. if(mail($address, $theme, $message)) {
    55.     echo "Сообщение отправлено";
    56. } else {
    57.     echo "Сообщение не отправлено";
    58. }
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну только не $theme а $subject. Логическая разница таки между этими терминами есть. :cool: В остальном нормуль. (За исключением каста в число переменных "время" и "дата", но мне-то отсюда не видно значений и назначений)
     
    Razorfen нравится это.