Отправка пользовательских данных через часть 2

#php #wordpress #forms

#php #wordpress #формы

Вопрос:

Я ищу еще несколько советов о том, как справиться с этим.

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

Итак, первая страница:

 <?php
$args1 = array(
 'role' => 'committee',
 'orderby' => 'user_nicename',
 'order' => 'ASC'
);
 $committee = get_users($args1);


foreach ($committee as $user) {
echo ' 

    <a href="../contact-form?displayname=' . $user->display_name . '"><b style="font-size:18px;">
    <tr>
        <td style="padding: 10px;">' .$user->job_title .' - </td>
        <td style="padding: 10px;">' .$user->display_name .'</td>
    </tr></b></a><br><br>';

 }

?>
  

Вторая страница:

 <?php $displayname = $_GET['displayname'];?>

<form role="form" method="post" action="../mailuser.php">  

<div class="form-group">

<input type="hidden" name="displayname" value="<?php echo $displayname ?>">
<input type="text" name="hp" class="hp" value="" alt="if you fill this field out then your email will not be sent">

</div>


<div class="form-group">
<label for="InputName">Your name</label>
<input type="name" class="form-control" id="InputName" placeholder="Enter your name" name="username">
</div>

<div class="form-group">                      
<label for="InputEmail">Email address</label>
<input type="email" class="form-control" id="InputEmail" placeholder="you@example.com" name="emailFrom">
</div>

<div class="form-group">                             
<label for="InputMsg">Message</label>
<textarea class="form-control" rows="8" id="InputMsg" placeholder="Please begin typing your message..." name="emailMessage"></textarea>   
</div>    

<button type="submit" class="btn btn-primary pull-right">Send</button>
</form>
  

И в моем сценарии отправки моя электронная почта жестко запрограммирована как:

$mail->From = ‘myemail@dummy.com ‘;

Поэтому мне нужно, чтобы это было переменной в зависимости от того, на какого человека вы нажали в первую очередь. Его необходимо отправить как на мой жестко запрограммированный адрес электронной почты, так и на адрес электронной почты пользователей, который связан с ними в базе данных пользователей WordPress.

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

1. есть ли у вас отображаемые имена и адреса электронной почты в базе данных?

2. @MikeWillis Итак, имя пользователя и адреса электронной почты хранятся в базе данных, но в качестве моего бэкэнда используется WordPress. Итак, если вы взглянете на первую часть моего скрипта, он показывает, как я могу получить к ним доступ и отобразить их.

3. хорошо, я не был уверен, как работает get_users. В этом случае почему бы не выполнить поиск адреса электронной почты на второй странице, используя displayname в качестве совпадения?

4. Вот где я застрял, я подумал, что это будет наиболее логичным способом, но не уверен, каков наилучший способ добиться этого?

5. Возвращает ли get_users отображаемое имя и адрес электронной почты? Если это так, на второй странице вы можете выполнить другой get_users, просмотреть список, найти тот, у которого есть соответствующее displayname, и получить адрес электронной почты. Тогда $mail-> To = $matchedEmailAddress; должно сработать

Ответ №1:

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

 <?php

$displayname = $_GET['displayname'];

$args1 = array(
 'role' => 'committee',
 'orderby' => 'user_nicename',
 'order' => 'ASC'
);
$committee = get_users($args1);

$matchingEmail = false;
foreach ($committee as $user) {
    if ( !$matchingEmail amp;amp; $user->display_name == $displayname ) {
        // great, we found our match
        $matchingEmail = $user->email_address; // I don't know if email_address is right, double check this and modify if necessary
    }
}

if ( $matchingEmail ) {
    // only proceed if a matching email address is found
    ?>
    <form role="form" method="post" action="../mailuser.php">  

        <div class="form-group">

            <input type="hidden" name="displayname" value="<?php echo $displayname; ?>">
            <input type="hidden" name="matchingEmail" value="<?php echo $matchingEmail; ?>">
            <input type="text" name="hp" class="hp" value="" alt="if you fill this field out then your email will not be sent">

        </div>


        <div class="form-group">
            <label for="InputName">Your name</label>
            <input type="name" class="form-control" id="InputName" placeholder="Enter your name" name="username">
        </div>

        <div class="form-group">                      
            <label for="InputEmail">Email address</label>
            <input type="email" class="form-control" id="InputEmail" placeholder="you@example.com" name="emailFrom">
        </div>

        <div class="form-group">                             
            <label for="InputMsg">Message</label>
            <textarea class="form-control" rows="8" id="InputMsg" placeholder="Please begin typing your message..." name="emailMessage"></textarea>   
        </div>    

        <button type="submit" class="btn btn-primary pull-right">Send</button>
    </form>
    <?php
} else {
    ?>
    <p>Something is wrong, I can't find your email address! Please try again.</p>
    <?php
}
?>
  

Наконец, на третьей странице, где вы отправляете электронное письмо, вы можете сделать что-то вроде:

 <?php $mail->addAddress(stripslashes( $_POST["matchingEmail"] ) ); ?>
  

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

1. Хорошо, все работало нормально до отправки почты, я получаю эту ошибку: сообщение не удалось отправить. Ошибка почтовой программы: необходимо указать хотя бы один адрес электронной почты получателя.

2. моя ошибка, надо было <?php $mail->К = stripslashes( $_POST, где[«matchingEmail»] ); ?>, пожалуйста, попробуйте снова

3. Используете ли вы PHPMailer? Если так $почты->не правы, вы должны использовать <?php $mail->addAddress(stripslashes($_POST, где[«matchingEmail»])); ?>

4. Должно быть, происходит что-то еще, оно должно отправлять электронное письмо только на адреса, добавленные addAddress() . Как нам перенести это в чат?

5. Круто, рад, что смог помочь!