[英]PHP: Automatically send a group email once I post something to my website
我有一個功能,可以讓“管理員”將內容發布到我的網站上,供普通用戶查看。 完成此操作后,我希望能夠向在我的網站上注冊的任何人發送電子郵件(我將這些信息存儲在“用戶”數據庫中的字段中)。 我正在使用XAMMP和MySQL,但很快就會在實時主機上注冊。
我聽說使用PHPMailer將是最好的選擇,但是我的網站一次最多可容納120個用戶,因此,如果我可以遍歷數據庫中的記錄並每次調用一個電子郵件函數並將其發送到該地址,會很好。 我是PHP新手,大部分時間都是使用在線教程構建此網站的,但這確實讓我感到困惑!
我有一個聯系表,用戶可以與我聯系,但是我不知道如何解決上面的問題。
<?php
$to = 'davidforde1991@gmail.com';
$subject = 'PLACEMENT_PARTNER_CONTACT';
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$message = <<<EMAIL
HI! My name is $name.
$message
From $name
Oh ya, my email is $email
EMAIL;
$header = '$email';
if($_POST){
mail($to, $subject, $message, $header);
$feedback = 'Thanks for contacting PSquared! We will be in contact soon!';
}
?>
<form action="?" method="post">
<ul>
<li>
<label for="name">Name:</label>
<input type="text" name="name" id="name" />
</li>
<li>
<label for="email">Email:</label>
<input type="text" name="email" id="email" />
</li>
<li>
<label for="topic">Topic:</label>
<select id = "topic">
<option value="Ponies">Ponies</option>
<option value="Mexicans">Mexicans</option>
<option value="Weiner">Weiner</option>
</select>
</li>
<li>
<label for="message">Message:</label>
<textarea id="message" name="message" cols="42" rows="9"></textarea>
</li>
<li><input type="submit" value="Submit"></li>
</ul>
</form>
我知道上面的代碼無關緊要,但是如果有幫助,我已經有適當的代碼可以遍歷數據庫中的字段。
<?php
// Connects to the Database
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("users_db") or die(mysql_error());
//checks cookies to make sure they are logged in
if(isset($_COOKIE['username']))
{
$username = $_COOKIE['username'];
$pass = $_COOKIE['pass'];
$check = mysql_query("SELECT * FROM users WHERE user_name = '$username'")or die(mysql_error());
while($info = mysql_fetch_array( $check ))
{
$username = $row['user_name'];
$email = $row['user_email'];
}
//if the cookie has the wrong password, they are taken to the login page
?>
PHP新手,歡迎大家猜猜! 回答你的問題,
它是這樣的
function tell_eveyone_i_just_updated_my_website($additional_info){
if(empty($additional_info)/* && $additional_info!=='0'*/){$additional_info='';}
if(!is_string($additional_info)){
throw new InvalidArgumentException('if $additional_info is not empty, it must be a string!');
}
$pdoh=new PDO('mysql:host=localhost;dbname=users_db;charset=utf8;','root','',array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
$pdostatementh=$pdoh->prepare("SELECT `user_name`,`user_email` FROM `users` WHERE 1");
$pdostatementh->execute();
$row=NULL;
while(false!==($row=$pdostatementh->fetch(PDO::FETCH_ASSOC))){
//$username= $row['user_name'];//
$email = $row['user_email'];
mail($email, "i just updated my website!","i just updated my website! ".$additional_info);
}
};
tell_everyone_i_just_updated_my_website("added a new article about cats");
現在到nitpick,
這里:
$check = mysql_query("SELECT * FROM users WHERE user_name = '$username'")or die(mysql_error());
您很容易受到SQL注入攻擊的侵害...如果som1將其用戶名輸入類似這樣的內容:hacker'; DROP DATABASE users
; -
他們將刪除您的數據庫! (解決方案:mysql_query(“ SELECT * FROM users where user_name ='” .mysql_real_escape_string($ username)。“'”)))
isset($_COOKIE['username'])
如果已登錄SOM1,請不要使用此功能進行檢查,否則黑客可能會對此進行偽造。 (解決方案:使用$ _SESSION)
if($_POST){
應該
if($_SERVER['REQUEST_METHOD'] == 'POST')
(原因是,即使POST請求中不包含實際的POST數據,即使從技術上講它是POST請求,但$ _POST仍將評估為false。)
接下來,您可能要驗證POST請求中是否確實提供了名稱/電子郵件/消息,否則可能會導致php代碼中出現未處理的錯誤。(但老實說,誰仍然會讀取服務器錯誤日志,對嗎? ) 就像是
if(!isset($_POST['name'])){echo "malformed POST request! name missing!";/*~~*/}
接下來,請勿使用mysql_ API,它將很快從PHP中刪除,並且您的代碼將在以后的PHP更新中停止工作。 而是使用PDO或MySQLi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.