【问题标题】:PHP: Automatically send a group email once I post something to my websitePHP:一旦我将内容发布到我的网站,就会自动发送群组电子邮件
【发布时间】:2014-01-20 01:37:47
【问题描述】:

我有一个功能,可以说“管理员”可以将内容发布到我的网站以供普通用户查看。完成此操作后,我希望能够向在我的网站上注册的任何人发送电子邮件(我将这些电子邮件存储在我的“用户”数据库中的一个字段中)。我正在使用 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 mysql database email


    【解决方案1】:

    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");
    

    现在开始挑剔,

    这里:

    $check = mysql_query("SELECT * FROM users WHERE user_name = '$username'")or   die(mysql_error());
    

    您很容易受到 SQL 注入攻击...如果 som1 将他们的用户名设置为类似 这:黑客';删除数据库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

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 2011-05-22
      • 2015-03-14
      • 2013-10-31
      相关资源
      最近更新 更多