2016-10-27 10 views
0

私は名前と電子メールをフェッチし、foreach lopでそれらを実行するPHPコードを持っています。これにより、respodentに電子メールを送信し、名前と電子メールをMySQLデータベースに入力できます。要素数が同じでもarray_combineは可能ですか? Foreachの代替案

私の問題は、私はすべてを選択することができますが、一度だけは選択できないことです。私が唯一の弾丸を選択した場合、私はWarning: array_combine(): Both parameters should have an equal number of elementsを得て、もし私がそれらのすべてを選んだとしても、それは問題なく動作します。私はいくつかの解決策を試しました$res = array_combine(array_intersect_key($arr1, $arr2), array_intersect_key($arr2, $arr1));

しかし、それは各電子メールの正確な名前ではなく上からの名前だけをとります。私が2人の武装勢力を選択すると、MarkとFredik、AlexとMarkがMarkとFrederickの代わりにデータベースに挿入されると言うことができます。右のメールは表示されますが、名前は表示されません。

この問題の回避策はありますか?

<?php 
if(isset($_POST['check']) == true) 
{ 

    $subject = trim($_POST['subject']); 
    $message = trim($_POST['message']); 
    $from = '[email protected]'; 
    $i=1; 

    $arrayOne = $_POST['check']; 
    $arrayTwo = $_POST['fname']; 


$min = min(count($arrayOne), count($arrayTwo)); 
    $result = array_combine(array_slice($arrayOne, 0, $min), array_slice($arrayTwo, 0, $min)); 

    foreach($result as $key => $value) 
    { 

    echo $key. ' '. $value ; 

ini_set('display_errors',1); 
error_reporting(E_ALL); 
require 'class.phpmailer.php'; 
require 'PHPMailerAutoload.php'; 

$mail = new PHPMailer; 

//$mail->SMTPDebug = 3;       // Enable verbose debug output 


$mail->isSMTP();          // Set mailer to use SMTP 
$mail->Host = 'smt';    // Specify main/backup SMTP servers 
$mail->SMTPAuth = true;       // Enable SMTP authentication 
$mail->Username = 'com'; // SMTP username 
$mail->Password = '4'; // SMTP password 
$mail->SMTPSecure = 'tls';      // Enable TLS/SSL encryption 
$mail->Port = 587;          // TCP port to connect to 

$mail->From = $from; 
$to = $key; 
$fornamn = $value; 


$confirm_code=md5(uniqid(rand())); 
    $pidnew4 = $_POST['pidnew3']; 
    $pnamnnew4 = $_POST['pnamnnew3']; 

$mail->IsHTML(true); 

$mail->CharSet='UTF-8'; 
$mail->confirm_code=md5(uniqid(rand())); 
$mail->FromName = $from; 
$mail->addAddress($to); 
$mail->Subject = $_POST['subject']; 
$mail->Message = $_POST['message']; 
$msg = " Test!!"; 
$mail->Body = $msg; 


$i++; 

$sql= "INSERT INTO temp_members_db(firstname, confirm_code, email, pid, rid, note) VALUES('$fornamn', '$confirm_code', '$to', '$pidnew4', '$i', '')"; 
$b = mysqli_query($mysqli,$sql); 

if(!$mail->send()) { 

    echo 'Message could not be sent.'; 
    echo 'Mailer Error: ' . $mail->ErrorInfo; 
} else { 

    echo "<h2>Sent</h2><br><br> 


<br>"; 
} 
    } 
    } 

?> 

この

<form action='insertrespondent1.php' method='POST' enctype='multipart/form-data' name='insertrespondent' onsubmit='return validateForm()'> 

    <?php 

$pidnew2 = $_GET['pidnew']; 
$pnamnnew2 = $_GET['pnamnnew']; 


    // Retrieve Email from Database 
    $getemail = mysql_query("SELECT * FROM Email_Users WHERE pid='".$pidnew2."'"); 

    if (!$getemail) die('MySQL Error: ' . mysql_error()); 

    echo '<table class="table table-bordered">'; 
    echo "<thead> 
      <tr> 
      <th><input type='checkbox' onchange='checkedbox(this)' name='chk'/></th> 
      <th>Förnamn</th> 
      <th>Email</th> 
      </tr> 
      </thead>"; 

    if (mysql_num_rows($getemail) == 0) {  
    echo "<tbody><tr><td colspan='3'>No Data Avaialble</td></tr></tbody>";  
    } 

    while ($row = mysql_fetch_assoc($getemail)) { 
     echo "<input type='hidden' value='".$row['fornamn']."' name='fname[]' id='fname[]'/"; 
     echo "<tbody><tr><td><input value='".$row['email']."' type='checkbox' name='check[]' id='check[]'/></td>"; 
     echo "<td >".$row['fornamn']."</td>"; 
     echo "<td >".$row['email']."</td></tr></tbody>"; 

    } 
    echo "</table>"; 



    ?> 
    </center> 
    <br> 
</div> 


    <br> 
    <br> 

<?php  
     if (!empty($error_msg)) { 
      echo $error_msg; 
     } 


$quest = "SELECT coalesce(max(rid)+1,1) AS id FROM temp_members_db"; 
$result = $mysqli->query($quest); 

if ($result->num_rows > 0) { 
while($row = $result->fetch_array()) { 

echo " 
    <input type='hidden' name='ridsend' value='". $row["id"] ."'> 
    <input type='hidden' name='pidnew3' value='$pidnew2'> 
    <input type='hidden' name='pnamnnew3' value='$pnamnnew2'> 

<b>Ämne </b><br><textarea rows='1' cols='1' name='subject'></textarea><br> 
<b>Meddelande </b><br><textarea rows='10' cols='30' name='message'></textarea> <br> 



    <p>Klicka på knappen nedan för att den nya kandidaten ska bli tillagd.</p> 
    <p>En länk för testet skickas ut till samtliga kandidater.</p> 


<br>"; 
    }} 

mysqli_close($mysqli); 

     ?> 


     <input type='submit' class='btn2' name='submit' src='https://i.imgur.com/0xPEf.gif' color='#556270' style='background-color:#556270; value='Skicka test'> 

     </form> 
+0

あなたは、フォームのコードを投稿してくださいことはできますか? '$ _POST ['check']'と '$ _POST ['fname']'によって何が送られますか? –

+0

元の投稿に更新しました – Fredrik

答えて

1

のような形を見て、私はあなたが必要なデータをより簡単にアクセスできるようにフォームを構築するためのより便利な方法を提案します。フォームの 変更部分:

<tbody> 
<?php while ($row = mysql_fetch_assoc($getemail)) { ?> 
<input type="hidden" value="<?php echo $row['fornamn']; ?>" name="fname[<?php echo $row['email']; ?>]"/> 
    <tr> 
     <td><input value="<?php echo $row['email']; ?>" type='checkbox' name="check[]" /></td> 
     <td >".$row['fornamn']."</td> 
     <td >".$row['email']."</td> 
    </tr> 
<?php } ?> 
</tbody> 

そして、このようなあなたのPHPのメーリングスクリプトでそれを使用します。

$arrayOne = $_POST['check']; 
$arrayTwo = $_POST['fname']; 

foreach($arrayOne as $email){ 

    $fname = $arrayTwo[$email]; 
    echo $email. ' '. $fname ; 
} 
+0

ありがとうございます:) – Fredrik

関連する問題