Toninho Posted June 16 Report Share Posted June 16 Olá, Preciso enviar os 10 ultimos itens de um mysql para todos os e-mails cadastrados, com codigo abaixo não acontece nada. <?php $conn = new mysqli("localhost","user","pass","db"); $sql = mysqli_query($conn, "SELECT * FROM jobs"); $numRows = mysqli_num_rows($sql); $mail_body = ''; while($row = mysqli_fetch_array($sql)){ $id = $row["id"]; $salary = $row["salary"]; $cargo=$row["title"]; $description = $row["plot"]; $mail_body = ''; } //colocar a chamada mail dentro do loop que itera sobre os clientes: $sql = mysqli_query($conn, "SELECT email FROM subscriptions WHERE id=4168"); $numRows = mysqli_num_rows($sql); $subject = "New jobs"; $headers = "From:info@umsite.com\r\n"; $headers .= "Content-type: text/html\r\n"; while($row = mysqli_fetch_array($sql)){ $email = $row["email"]; $name = $row["firstname"]; $mail_result = mail($email, $subject, $mail_body, $headers); if ($mail_result) { echo 'ok'; } } ?> grato por qualquer ajuda Link to comment Share on other sites More sharing options...
Ivo Vicente Posted June 16 Report Share Posted June 16 Para consultar os últimos 10 registos, tens que aplicar uma ordenação e um limite -- Assumindo que existe uma coluna id (também pode ser um timestamp) SELECT * FROM jobs ORDER BY id DESC LIMIT 10; Depois tens que passar o código de enviar email para dentro do WHILE que processas os resultados do primeiro query. Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Solution Toninho Posted June 17 Author Solution Report Share Posted June 17 Obrigado Ivo Link to comment Share on other sites More sharing options...
Toninho Posted June 17 Author Report Share Posted June 17 De volta, Ivo e demais, somente envia para um e-mail, o que esta errado? $conn = new mysqli("localhost","user","pass","bd"); $sql = mysqli_query($conn, "SELECT empregos.id, empregos.city,empregos.state,empregos.title,empregos.plot,empregos.salary,empregos.created_at,empregos.category as cat,subscriptionsbh.city_id,subscriptionsbh.id as ids,subscriptionsbh.email as mail FROM `empregos`,subscriptionsbh WHERE empregos.city=subscriptionsbh.city_id AND approved=1 AND created_at BETWEEN NOW() - INTERVAL 3 DAY AND NOW() limit 10"); $numRows = mysqli_num_rows($sql); $message = ''; while($row = mysqli_fetch_array($sql)){ $id = $row["id"]; $price = $row["salary"]; $cargo = $row["title"]; $city = $row["city"]; $plot = $row["plot"]; $T20=$city; $_SESSION['T20']=$T20; $message .= '<html><body>'; $message .= '<table style="background-color:#F3F3F3; text-decoration:none" cellpadding="4">'; $message .= "<tr><td><a href=/".str_replace(" ","-",strtolower($city)).">".$city."</a></td></tr>"; $message .= "<tr><td><a href=/".str_replace(" ","-",strtolower($city)).'/mais/'.$id.'-'.str_replace(" ","-",$cargo).">". $cargo."</a></td></tr>"; $message .= "<tr><td>" . $plot. "</td></tr><br>"; $message .= "</table>"; $message .= "</body></html>"; } $sql = mysqli_query($conn, "SELECT * FROM subscriptionsbh WHERE city_id='".$city."' and is_confirmed=1 AND (last_sent < CURDATE() OR last_sent IS NULL) " ); $numRows = mysqli_num_rows($sql); $subject = "Novos"; $headers = "From:no-reply@site.com\r\n"; $headers .= "Content-type: text/html\r\n"; while($row = mysqli_fetch_array($sql)){ $emailaddress[] = $row["email"]; $email = $row["email"]; //$name = $row["firstname"]; } $i=0; foreach($emailaddress as $contactemail) { $replyName = "site"; $replyEmail = "no-reply@site"; $contactname = ""; $headers = "From: ".$replyName." <".$replyEmail.">" . PHP_EOL; $headers .= "MIME-Version: 1.0" . PHP_EOL; $headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL; //$para=$contactemail; $hoje=date("d-m-Y"); $subject = $_GET['msg']." ".$T20." (".$hoje.")"; // Headers //echo "ver emails". $contactemail; mail($contactemail, $subject, $message, $headers); $i++; echo "<h2>Email notification sent</h2>"; echo "<h2>".$i." mails sent</h2>"; } Link to comment Share on other sites More sharing options...
Ivo Vicente Posted June 17 Report Share Posted June 17 Viva, Se executares o query SELECT * FROM subscriptionsbh WHERE city_id='".$city."' ... . num editor de SQL devolve mais do que 1 resultado? Também podes fazer var_dump($numRows) tens essa variavel em 2 locais, mas não vejo que a uses, mas sempre podes saber o numero de resultados da query, porque assim à partida o problema deve ser aí. Nota à parte, aconselhava-te a começar a pensar em usar o PDO para ações nas bases de dados (link adicional, explicação do porquê e sugestões), se estiveres a fazer algum curso online e não fale em PDO, pede o dinheiro de volta. Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Toninho Posted June 17 Author Report Share Posted June 17 Ivo, var_dump($numRows); 4 registros (cidades) var_dump($numRows); 1 email (na tabela de teste subscriptionsbh tem 4 e-mails) var_dump($contactemail); 1 email (na tabela de teste subscriptionsbh tem 4 e-mails) Deveria enviar para os 4 emails e para as cidades correspondentes de cada e-mail, esta enviando somente para um e-mail com varias cidades. Sendo possível me ajude. Link to comment Share on other sites More sharing options...
Ivo Vicente Posted June 17 Report Share Posted June 17 <?php //.... $message .= "</table>"; $message .= "</body></html>"; //-- Estas a fechar o WHILE antes do novo query } //-- Valor city, é o ultimo dos resultados do query de cima $sql = mysqli_query($conn, "SELECT * FROM subscriptionsbh WHERE city_id='".$city."' and is_confirmed=1 AND (last_sent < CURDATE() OR last_sent IS NULL) " ); $numRows = mysqli_num_rows($sql); Esta aí em cima comentado no código onde está o teu problema atual. Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Toninho Posted Monday at 12:52 PM Author Report Share Posted Monday at 12:52 PM Ivo, fiz as alterações, mas não funcionou Link to comment Share on other sites More sharing options...
Ivo Vicente Posted Monday at 01:16 PM Report Share Posted Monday at 01:16 PM Tens que continuar a fazer debug e ver nas linhas principais os resultados, pelo código atual não tenho mais ideias para ajudar neste momento Feito é melhor que perfeito Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now