GoFuckYourself.com - Adult Webmaster Forum

GoFuckYourself.com - Adult Webmaster Forum (https://gfy.com/index.php)
-   Fucking Around & Business Discussion (https://gfy.com/forumdisplay.php?f=26)
-   -   PHP: How to send mail in a foreach loop? (https://gfy.com/showthread.php?t=1116303)

eMonk 07-23-2013 09:25 PM

PHP: How to send mail in a foreach loop?
 
Here's my code:

PHP Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Control Panel</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../style.css" rel="stylesheet" type="text/css">
</head>

<body class="text">
<h1>Pending Ads</h1>
<form action="" method="post">

<?php

include("../includes/connect.php");

$query_1 "SELECT id, name, last_updated FROM model WHERE status = 'Pending' ORDER BY last_updated DESC";
$result_1 $db->query($query_1);

$num_results $result_1->num_rows;

echo 
"<p>Number of results found: ".$num_results."</p>";

for (
$i=0$i <$num_results$i++) {
  
$row $result_1->fetch_assoc();
  
$id $row['id'];
  
$name $row['name'];
  
$date $row['last_updated'];

  echo 
"<hr>";
  echo 
"<table width=\"450\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
  echo 
"<tr>";
  echo 
"<td><input name=\"checkbox[]\" type=\"checkbox\" id=\"checkbox[]\" value=\"".$id."\"></td>";
  echo 
"<td>";
  echo 
"<b>id:</b> $id<br>";
  echo 
"<b>name:</b> $name<br>";
  echo 
"<b>date:</b> $date<br>";
  echo 
"<a href=\"update.php?id=$id\" target=\"_blank\">Edit</a>";
  echo 
"</td>";
  echo 
"</tr>";
  echo 
"</table>";  
}

?>

<p><hr><input type="submit" name="approve" value="Approve"> <input type="submit" name="delete" value="Delete"></p>

<?php

include('../pear/Mail-1.2.0b1/Mail.php');

$error 0;

if (isset(
$_POST['approve']) && $num_results 0)
{
foreach (
$_POST['checkbox'] as $index => $val)
{
$query_2 "SELECT account_id, name, email, DATE_FORMAT(expiry_date, '%b %e, %Y') AS expiry_date_formatted FROM model WHERE id = $val AND status = 'Pending' ";
$result_2 $db->query($query_2);

$list $result_2->fetch_assoc();
$account_id $list['account_id'];

$query_3 "UPDATE model SET status = 'Active' WHERE id = $val AND status = 'Pending' ";
$result_3 $db->query($query_3);

$password substr(md5(uniqid(rand(),1)),rand(0,21),8);

$query_4 "UPDATE member SET password = sha1('$password') WHERE model_id = $val AND account_id = $account_id ";
$result_4 $db->query($query_4);

// This part isn't sending out emails
$recipients "".$list['email']."";

$headers['From']    = "[email protected]";
$headers['To']      = "".$list['email']."";
$headers['Subject'] = "Hello Hello Hello!";

$body "Hi ".$list['name'].",\n\n" .
        
"Account Number: ".$list['account_id']."\n\n" .
        
"Password: ".$password."\n\n" .
        
"Expiry Date: ".$list['expiry_date_formatted']."\n\n" .
        
"Regards,\n" .
        
"Admin";

$params['sendmail_path'] = "/usr/lib/sendmail";

// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory('sendmail'$params);

$mail_object->send($recipients$headers$body);
}
}
if (
$result_1 && $result_2 && $result_3 && $result_4 && $error == 0)
{
echo 
"<meta http-equiv=\"refresh\" content=\"0;URL=pending-ads.php\">";
}
?>
</form>
</body>
</html>

Why aren't emails being sent out in the foreach loop? I can't seem to figure it out. Any ideas?

alcstrategy 07-23-2013 10:58 PM

there are some problems with that code in general, but you should add some error handling to help with debugging.

Personally I would dump pear mail and use swiftmailer library. Just a suggestion to make things a little easier for you. They also have some plugins that you might find helpful
swiftmailer.org

PornDiscounts-V 07-24-2013 12:50 AM

Super fast.

Dankasaur 07-24-2013 07:23 AM

Quote:

Originally Posted by eMonk (Post 19729621)
Here's my code:

PHP Code:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Control Panel</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../style.css" rel="stylesheet" type="text/css">
</head>

<body class="text">
<h1>Pending Ads</h1>
<form action="" method="post">

<?php

include("../includes/connect.php");

$query_1 "SELECT id, name, last_updated FROM model WHERE status = 'Pending' ORDER BY last_updated DESC";
$result_1 $db->query($query_1);

$num_results $result_1->num_rows;

echo 
"<p>Number of results found: ".$num_results."</p>";

for (
$i=0$i <$num_results$i++) {
  
$row $result_1->fetch_assoc();
  
$id $row['id'];
  
$name $row['name'];
  
$date $row['last_updated'];

  echo 
"<hr>";
  echo 
"<table width=\"450\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
  echo 
"<tr>";
  echo 
"<td><input name=\"checkbox[]\" type=\"checkbox\" id=\"checkbox[]\" value=\"".$id."\"></td>";
  echo 
"<td>";
  echo 
"<b>id:</b> $id<br>";
  echo 
"<b>name:</b> $name<br>";
  echo 
"<b>date:</b> $date<br>";
  echo 
"<a href=\"update.php?id=$id\" target=\"_blank\">Edit</a>";
  echo 
"</td>";
  echo 
"</tr>";
  echo 
"</table>";  
}

?>

<p><hr><input type="submit" name="approve" value="Approve"> <input type="submit" name="delete" value="Delete"></p>

<?php

include('../pear/Mail-1.2.0b1/Mail.php');

$error 0;

if (isset(
$_POST['approve']) && $num_results 0)
{
foreach (
$_POST['checkbox'] as $index => $val)
{
$query_2 "SELECT account_id, name, email, DATE_FORMAT(expiry_date, '%b %e, %Y') AS expiry_date_formatted FROM model WHERE id = $val AND status = 'Pending' ";
$result_2 $db->query($query_2);

$list $result_2->fetch_assoc();
$account_id $list['account_id'];

$query_3 "UPDATE model SET status = 'Active' WHERE id = $val AND status = 'Pending' ";
$result_3 $db->query($query_3);

$password substr(md5(uniqid(rand(),1)),rand(0,21),8);

$query_4 "UPDATE member SET password = sha1('$password') WHERE model_id = $val AND account_id = $account_id ";
$result_4 $db->query($query_4);

// This part isn't sending out emails
$recipients "".$list['email']."";

$headers['From']    = "[email protected]";
$headers['To']      = "".$list['email']."";
$headers['Subject'] = "Hello Hello Hello!";

$body "Hi ".$list['name'].",\n\n" .
        
"Account Number: ".$list['account_id']."\n\n" .
        
"Password: ".$password."\n\n" .
        
"Expiry Date: ".$list['expiry_date_formatted']."\n\n" .
        
"Regards,\n" .
        
"Admin";

$params['sendmail_path'] = "/usr/lib/sendmail";

// Create the mail object using the Mail::factory method
$mail_object =& Mail::factory('sendmail'$params);

$mail_object->send($recipients$headers$body);
}
}
if (
$result_1 && $result_2 && $result_3 && $result_4 && $error == 0)
{
echo 
"<meta http-equiv=\"refresh\" content=\"0;URL=pending-ads.php\">";
}
?>
</form>
</body>
</html>

Why aren't emails being sent out in the foreach loop? I can't seem to figure it out. Any ideas?

Like stated above, do some error handling, and also just use PHP's built in mail() function, it works great. Also it's best to not loop and mail, but to create BCC list by imploding your recipients list and send out that way in one single blast.

If you'd like I can create a custom script for you, or fix this one for $65/hr. Just hit me up. Contact info in signature.

woj 07-24-2013 07:33 AM

like someone said earlier try mail() 10x easier to get working, if it still doesn't work, icq: 33375924 and I'll work out what the problem is for a few bucks...

react 07-24-2013 10:44 AM

Paste your connect.php, I bet the problem is there.

Just BCC it to me so that Josh doesn't see it.

Why 07-24-2013 01:30 PM

do not implode a list and BCC it all, that will have a number of negative effects on deliverability.

I would agree with using mail() function instead of a library, unless you are sending tens of thousands of mails. Your MTA will most likely be a bigger bottleneck then php's mail() function.

you really shouldnt need much error handling on such a simple script. i think your code could be cut to half as many lines though.

eMonk 07-25-2013 12:36 PM

If it's best not to loop and mail or implode a list and BCC it all, what is the best way of doing this?

I know my code is newbie as I'm new to the php coding scene (bought a decent book last year) and how the code could be cut in half but I plan on redoing it as I learn more. This is for a small non-profit site to help me learn the language.

Thanks for everyone's input so far.

alcstrategy 07-25-2013 01:41 PM

Overall without any debugging at all you will not know the exact problem - it could be a number of things.

Using mail may not be simpler if the code problems lie in the database perhaps wrong formatted to address, etc. So your mail code could be fine, but because of something else it isn't working, so changing to mail would make no difference. I don't think there's anything wrong with using pear in your case, I personally dislike it but its just a matter of preference.

Also you want to send mail in batch but the problem with using mail function is that its inefficient in a loop, pear is actually more appropriate usage. Granted you may not have 100k users, but that isn't the point.

I recommended that library because it will simplify things for you and also be efficient. The docs might also help explain things better for you to give you a better understanding in general. Again, I personally dislike pear. It's just a matter of preference

Also if you wanted to add attachments or something it would be a pain in your ass using mail function.

Also your code has efficiency issues and also security issues. You should also try to read about prepared statements

Either way don't let people on a board tell you workarounds or cutting corners for things especially if you don't know better and are just learning. If you know why you are cutting corners then it's fine, but if you do it just blindly then you will never learn "proper"

adult-help 07-25-2013 02:36 PM

does database even return any results? also use switftmailer or something like that.

this is definitely a spaghetti code,pretty ugly


All times are GMT -7. The time now is 08:39 AM.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, vBulletin Solutions, Inc.
©2000-, AI Media Network Inc123