2010-04-14 9 views
0

J'ai récemment posté ici accessing $_SESSION when using file_get_contents in PHP sur un problème que j'avais et le consensus général est que je ne le fais pas bien ... alors que je pense généralement "tant que cela fonctionne ... "Je pensais avoir un retour sur la façon dont je pourrais le faire mieux ...Meilleur moyen de programmer un appel à php

Je devais envoyer exactement le même courriel dans le même format à partir de plusieurs zones différentes.

  1. Lorsqu'un travail est entré (automatiquement une partie du POST)
  2. manuellement lors de l'examen des emplois pour réattribuer à un autre installateur

Le script original est une page php qui est appelé en utilisant AJAX pour envoyer la demande de bon de travail - cela a fonctionné en appelant simplement une page php standard, en retournant le message de réussite ou d'erreur et en affichant ensuite dans la page d'appel.

Maintenant, j'ai essayé d'utiliser la même page dans l'entrée de travail automatisée de sorte qu'il accepte le travail via un formulaire, l'enregistre et l'envoie par la poste.

Mon problème est (comme vous pouvez le voir le message original) n'est pas bon pour cette cause dans le script automatisé ...

Mon problème la fonction file_get_contents() est que d'un appel AJAX que je dois faire des choses comme inclure l'initialisateur de connexion à la base de données, démarrer la session et faire tout ce qui doit être fait dans une page autonome ... Certaines ou toutes ne sont pas nécessaires si elles sont incluses pour que le fichier ne soit bon que dans un seul but ...

Comment est-ce que je fais le dossier bon aux deux buts? Je suppose que je suis à la recherche des recommandations pour la meilleure mise en page de fichiers et de la structure pour répondre aux deux scénarios ...

Le fichier actuel ressemble à:

<?php 
session_start(); 

$order_id = $_GET['order_id']; 

include('include/database.php'); 

function getLineItems($order_id) { 

    $query = mysql_query("SELECT ...lineItems..."); 

    //Print rows with data 
    while($row = mysql_fetch_object($query)) { 

     $lineItems .= '...Build Line Item String...'; 

    } 

    return $lineItems; 
} 

function send_email($order_id) { 

    //Get data for current job to display 
    $query = mysql_query("SELECT ...Job Details..."); 

    $row = mysql_fetch_object($query); 

    $subject = 'Work Order Request'; 

    $email_message = '...Build Email... 
         ...Include Job Details... 
         '.getLineItems($order_id).' 
         ...Finish Email...'; 

    $headers = '...Create Email Headers...'; 

    if (mail($row->primary_email, $subject, $email_message, $headers)) { 

     $query = mysql_query("...log successful send..."); 

     if (mysql_error()!="") { 
      $message .= '...display mysqlerror()..'; 
     } 

     $message .= '...create success message...'; 

    } else { 

     $query = mysql_query("...log failed send..."); 

     if (mysql_error()!="") { 
      $message .= '...display mysqlerror()..'; 
     } 
     $message .= '...create failed message...'; 
    } 

    return $message; 

} // END send_email() function 

//Check supplier info 
$query = mysql_query("...get suppliers info attached to order_id..."); 

if (mysql_num_rows($query) > 0) { 

    while($row = mysql_fetch_object($query)) { 
     if ($row->primary_email=="") { 

      $message .= '...no email message...'; 

     } else if ($row->notification_email=="") { 

      $message .= '...no notifications message...'; 

     } else { 

      $message .= send_email($order_id); 

     } 

    } 

} else { 

    $message .= '...no supplier matched message...'; 
} 

print $message; 

?> 

Répondre

0

font fonction et l'inclure
Do fonctions séparées. Authentification (qui nécessite des sessions) à partir de l'envoi de courrier (qui ne le fait pas)
Ensuite, incluez la fonction d'envoi de courrier dans les deux tâches.

+1

Merci Col mais j'espérais un peu plus de conseils ... J'ai déjà eu ce retour sur un autre post ... Je suis plus à la recherche de comprendre quoi mettre dans quelle fonction et quoi ignorer .. Je suis un programmeur de base-intermédiaire ... C'est un passe-temps pour moi, pas un travail donc je n'ai pas beaucoup de formation sur les fondamentaux – sjw