$_POST входное значение в двух частях (разнести?)

#php #email #post #explode

#php #Адрес электронной почты #Публикация #разнесите

Вопрос:

Я действительно новичок в PHP, так что это, вероятно, довольно глупый вопрос.

Я использую PHP для отправки формы электронной почты и хотел бы, чтобы электронное письмо содержало значения некоторых входных данных формы. Вот урезанная версия:

 <?php
if(isset($_POST['submit'])) {
  $to = 'address@gmail.com' ;
  $subject = 'Subject';
  $headers  = 'MIME-Version: 1.0' . "rn";
  $headers .= 'Content-type: text/html; charset=iso-8859-1' . "rn";
  $message =

  //here are the values that the email will send me 
  "<p>".$_POST('some-name')."</p>
   <p>".$_POST('some-name')."</p>" ;

  mail($to, $subject, $message, $headers);
  header('Location: ../estimate.html');
} ?>
  

Значение ввода some-name , скажем, 10-widgets публикуется из формы.

Вот вопрос: вместо того, чтобы перечислять «10-виджеты» дважды (как это будет сделано в приведенном выше коде), как мне перечислить первую часть в первой <p> (так что это будет «10»), а вторую часть во второй <p> (так что это будут «виджеты»)?

Что-то вроде следующего кажется многообещающим:

 $wholeVal = $_POST('some-name');
$partVal = explode("-",$wholeVal);
  

и затем, где-то $_POST($partVal[0]); и $_POST($partVal[1]);

Но я не знаю, где это должно происходить, и где бы я ни поместил это, кажется, все ломается.

Спасибо за вашу помощь.

Ответ №1:

Сначала вы должны получить доступ к $_POST с помощью скобок, например $_POST['some-name'] . explode возвращает массив. Итак, в вашем примере explode('-', '10-widgets')[0] вернет '10' и explode('-', '10-widgets')[1] вернет 'widgets'

Итак, ваш код будет примерно таким:

 <?php
  if(isset($_POST['submit'])) {
    $to = 'address@gmail.com' ;
    $subject = 'Subject';
    $headers  = 'MIME-Version: 1.0' . "rn";
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "rn";

    $parts = explode('-', $_POST['some-name']);

    //here are the values that the email will send me 
    $message = 
      "<p>".$parts[0]."</p>
      <p>".$parts[1]."</p>";

    mail($to, $subject, $message, $headers);
    header('Location: ../estimate.html');
  } 
?>
  

Комментарии:

1. Идеально , как раз то, что мне было нужно. Медленно, но верно я изучаю PHP.

2. 1 за неиспользование split и я бы рекомендовал использовать exit после header

3. @BookOfZeus Почему вы используете <code>exit</code>? В этом примере код практически заканчивается на этом.

4. @niomaster просто за то, что если когда-нибудь вы добавите код после, ничего не сломается. Я согласен с вами, вам это не нужно, поскольку после header нет кода, но если однажды вы решите включить этот код в какой-либо другой код (включить в файле), тогда ничего не сломается.

Ответ №2:

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

Просто предупреждаю: D

Ответ №3:

Попробуйте это

 $wholeVal = $_POST('some-name');
$list($ammount, $type) = explode("-",$wholeVal);
  

Затем в вашу электронную почту:

 $message = "<p>" . $ammount . "</p><p>" . $type . "</p>" ;
  

Ответ №4:

 <?php
if(isset($_POST['submit'])) {
  $to = 'address@gmail.com' ;
  $subject = 'Subject';
  $headers  = 'MIME-Version: 1.0' . "rn";
  $headers .= 'Content-type: text/html; charset=iso-8859-1' . "rn";
  $message =

    $wholeVal = $_POST('some-name');
    $partVal = explode("-",$wholeVal);
  //here are the values that the email will send me 
  "<p>".$partVal[0]."</p>
   <p>".$partVal[1]."</p>" ;

  mail($to, $subject, $message, $headers);
  header('Location: ../estimate.html');
} ?>