简体   繁体   中英

PHP - My code does not work. Am I using include wrong?

My question has differently been answered in another post, but I just can't make things work with my own code - so here it comes:

I am making a reminder function , that is supposed to be executed by cron job and send out an reminder email to remind client about an event.

I will use info from mysql, sort out the events that is going to be reminded based on X number of hours and the reminder time frame (if the cron job runs every 15 minutes, the code must find all event starting in the minutes between each cron job run) .

All the above works just fine, and I do get the echo "test1"; from test-cron.php . But the email from test-cron-email-reminder.php is not send, and I do not get the echo "test2"; printed out.

I seems like my include in test-cron.php does not work. Why?

If I put it all together in one php file it works fine.

When this is ready, I will make a similar code to send out sms reminder with twilio . That as well works fine, as long as the whole code is in one file.

Both php files are in the same folder.

Here is my code:

TEST-CRON.PHP

<?php
   require_once 'Connect_db.php';
   require 'configuration.php';

   // Get info from SQL
   $result = performQuery("SELECT mindful_pbbooking_events.service_id, 
                            mindful_pbbooking_treatments.id,
                            mindful_pbbooking_events.id, name, 
                            customfields_data, 
                            dtstart, dtend, date_created 
                            FROM mindful_pbbooking_events, 
                                 mindful_pbbooking_treatments 
                            WHERE 
                            mindful_pbbooking_events.service_id=mindful_pbbooking_treatments.id; 
");
   while ($row = mysqli_fetch_array($result)) {
       //Split customfields_data and collect the informaton from created array (just making things a little bit more easy to work with)
       $dataArray = $row[customfields_data];
       $dataArrayDecoded = json_decode($dataArray,TRUE);
       $clientFname = $dataArrayDecoded[0][data];
       $clientLname = $dataArrayDecoded[1][data];
       $clientEmail = $dataArrayDecoded[2][data];
       $clientMobile = $dataArrayDecoded[3][data];
       $clientGender = $dataArrayDecoded[4][data];
       //Collect information from customfields_data (more making things a little bit more easy to work with)
       $eventId = $row[mindful_pbbooking_events.id];
       $eventStart = $row[dtstart];
       $eventDate = date("Y-m-d", strtotime($eventStart));
       $eventTime = date("H:i", strtotime($eventStart));
       $eventEnd = $row[dtend];
       $service = $row[name];
       $eventCreated = $row[date_created];

       //Time calculation to find out who to send reminder to
       $eventtimestring = strtotime("$eventStart");
       $nowtimestring = strtotime("now");
       $reminderdurationstring = $reminderDuration*60;
       $startstring = $nowtimestring + $hours*3600;
       $endstring = $startstring + $reminderdurationstring;


       while (($startstring <= $eventtimestring) && ($eventtimestring < $endstring)) {

         // Just a little test to find out where things goes wrong
        echo "test1";

        // ****** HERE IT COMES ******
        // The test-cron-email-reminder.php is the file with the code I want to include
        include 'test-cron-email-reminder.php';

       }

   }
?>

TEST-CRON-EMAIL-REMINDER-PHP

<?php
   require_once 'Connect_db.php';
   require 'configuration.php';

   // Just a little test to find out where things goes wrong
   echo "test2";

       $to = "$clientEmail";
         $subject = "The reminder mail body";
         $message = "
         <html>
         <head>
         <title>The reminder mail title</title>
         </head>
         <body>
         <p>The reminder mail body</p>
         </body>
         </html>
         ";

        // To send HTML mail, the Content-type header must be set
        $headers[] = 'MIME-Version: 1.0';
        $headers[] = 'Content-type: text/html; charset=iso-8859-1';

        // Additional headers
        $headers[] = 'To: $clientFname <$clientEmail>';
        $headers[] = 'From: Mindful <mail@mail.com>';

        // Mail it
        mail($to, $subject, $message, implode("\r\n", $headers));

  break; 
?>

The problem is in TEST-CRON.PHP -- don't put an include inside a while loop, unless you really want to include that file over and over. (You don't)

while (($startstring <= $eventtimestring) && ($eventtimestring < $endstring)) {

    // Just a little test to find out where things goes wrong
    echo "test1";
    ...

    /// DON'T DO THIS
    include 'test-cron-email-reminder.php';
    /// DON'T DO THIS

}

Instead, do this. In TEST-CRON.PHP:

<?php
require_once 'Connect_db.php';
require 'configuration.php';
require_once 'TEST-CRON-EMAIL-REMINDER-PHP'

  ...

while (($startstring <= $eventtimestring) && ($eventtimestring < $endstring)) {

    // Just a little test to find out where things goes wrong
    echo "test1";
    ...

    doSomething();   // Defined in TEST-CRON-EMAIL-REMINDER-PHP
    break;

}

In TEST-CRON-EMAIL-REMINDER-PHP:

<?php
   require_once 'Connect_db.php';
   require 'configuration.php';

   // And wrap all this stuff up in a function that
   // you can call from within your while() loop.

   func doSomething() {
     // Just a little test to find out where things goes wrong
     echo "test2";

     $to = "$clientEmail";
       $subject = "The reminder mail body";
       $message = "
       <html>
       <head>
       <title>The reminder mail title</title>
       </head>
       <body>
       <p>The reminder mail body</p>
       </body>
       </html>
       ";

      // To send HTML mail, the Content-type header must be set
      $headers[] = 'MIME-Version: 1.0';
      $headers[] = 'Content-type: text/html; charset=iso-8859-1';

      // Additional headers
      $headers[] = 'To: $clientFname <$clientEmail>';
      $headers[] = 'From: Mindful <mail@mail.com>';

      // Mail it
      mail($to, $subject, $message, implode("\r\n", $headers));
    }
?>

require 'configuration.php'; in TEST-CRON-EMAIL-REMINDER-PHP may produce redeclaration error

try require_once 'configuration.php'; to prevent it

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM