2009-09-01 3 views
0

Je travaille actuellement sur un PHP/script MySQL qui fait ce qui suit, dans cet ordre:PHP - Besoin d'aide avec Logic

1) vérifie DB pour toutes les vidéos qui ont besoin de conversion 2) Une fois déterminé qu'un la vidéo doit être convertie, elle commence à convertir * 3) Avertit le "créateur" de la vidéo que celle-ci a été créée. * 4) Avertit tous les utilisateurs qui sont "récepteurs" de la vidéo, qu'ils ont une nouvelle vidéo.

Remarque, je recherche de l'aide sur les numéros suivis ci-dessus.

Voilà ma structure db/table de base (certaines parties intentionnellement laissés, parce que je ne veux pas les taper:

video_data: 
    id 
    creator_id 
    needs_process 

video_info 
    id 
    video_id (relational to 'id' in table above). 
    receiver_id 

tblusers 
    usrID 
    usrFirst 
    usrLast 
    usrEmail 

Voici ce que j'ai actuellement dans mon script:

<?php 
    require("connection.php"); 
    $rs = mysql_db_query($DBname,$sql,$link); 
    $data = mysql_query("SELECT * FROM video_data WHERE needs_process=1 LIMIT 1") or die(mysql_error()); 

while($row = mysql_fetch_array($data)) 
    { 
$id = $row['id']; 
$sender = $row['sender_id']; 


     //Convert The Video Here (I've already written this code). 


     //Maybe Create a Thumbnail Too (I've already written this code). 

    } 

Ma question est la suivante: Dans le code ci-dessus, comment envoyer un e-mail au "créateur" (toujours 1 personne) et envoyer par e-mail les destinataires (parfois plusieurs destinataires), qui seraient probablement des emails "séparés" ou "différents". Par exemple, le créateur recevrait un e-mail disant "Merci pour le téléchargement ! ", tandis que les récepteurs recevraient un disant" Vous avez une nouvelle vidéo. "

Toute aide sur ce serait génial!

+2

Juste un indice: "ou mourir (mysql_error());" C'est tout sauf une bonne gestion des erreurs – tuergeist

Répondre

2

Il est quelque chose comme ceci:

<?php 
    require("connection.php"); 
    $rs = mysql_db_query($DBname,$sql,$link); 
    $data = mysql_query("SELECT * FROM video_data WHERE needs_process=1 LIMIT 1") or die(mysql_error()); 

while($row = mysql_fetch_array($data)) 
    { 
$id = $row['id']; 
$sender = $row['sender_id']; 
     //Convert The Video Here (I've already written this code). 
     //Maybe Create a Thumbnail Too (I've already written this code). 

     //mail the creator 

     $data2 = mysql_query("SELECT * FROM tblusers WHERE usrID=$row[creator_id] LIMIT 1") or die(mysql_error()); 

     $creatordata = mysql_fetch_array($data2); 

     mailtocreator($creatordata['userEmail'], $creatordata['usrFirst'].' '.$creatordata['usrLast']); 
     //mail the receiver 
     $data3 = mysql_query("SELECT * FROM tblusers t, video_info vi WHERE vi.video_id = $row[id] AND vi.receiver_id = t.usrID") or die(mysql_error()); 
     while($row2 = mysql_fetch_array($data3)) 
     { 
       mailtocreator($row2['userEmail'], $row2['usrFirst'].' '.$row2['usrLast'], $creatordata['usrFirst'].' '.$creatordata['usrLast']); 
      } 

    } 


function mailtocreator($toemail, $toname) 
{ 
    //do send mail routine 
    $subject = 'video processed'; 
    $message = 'hello '.$toname.', 

Thank you for uploading video.'; 
    $headers = 'From: [email protected]' . "\r\n" . 
     'Reply-To: [email protected]' . "\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 
    mail($toemail, $subject, $message, $headers); 
} 

function mailtoreceiver($toemail, $toname, $fromname) 
{ 
    //do send mail routine 
    $subject = 'new video received'; 
    $message = 'hello '.$toname.', 

You just got new video from '.$fromname.'.'; 
    $headers = 'From: [email protected]' . "\r\n" . 
     'Reply-To: [email protected]' . "\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 
    mail($toemail, $subject, $message, $headers); 
} 

Fondamentalement, il est juste cette requête:

$data2 = mysql_query("SELECT * FROM tblusers WHERE usrID=$row[creator_id] LIMIT 1") or die(mysql_error()); 

qui récupère les informations de détail de Uploader courant (extrait de $ row [creator_id]) et

$data3 = mysql_query("SELECT * FROM tblusers t, video_info vi WHERE vi.video_id = $row[id] AND vi.receiver_id = t.usrID") or die(mysql_error()); 

qui récupère tous les récepteurs en interrogeant à partir des tables tblusers et mettre fin à ces informations à mailtocreator et mailtoreceiver respectivement.

+0

Même ici, mourir() n'est pas très agréable car il est très difficile de déboguer. Et "select * from" n'est pas très bon aussi. Vous n'avez pas besoin de toutes les lignes, alors pourquoi copiez-vous ces données du disque vers PHP? – tuergeist

+0

En outre, "SELECT * FROM tblusers WHERE usrID = $ row [ID_fournisseur] LIMIT 1" n'est pas utile. Mieux écrire utiliser les guillemets simples et la concaténation de chaînes: 'SELECT * FROM tblusers WHERE usrID ='. $ row [creator_id]. 'LIMIT 1' Mais je ne comprends pas pourquoi LIMIT 1 est attaché. Est-ce que j'ai plus d'un utilisateur par identifiant d'utilisateur? Mauvais style ... – tuergeist

+0

@tuergeist: oui, c'est un mauvais style. Je veux juste montrer l'algorithme. Quant à LIMIT 1, @Dodinas a déclaré plus haut que l'uploader/créateur sera toujours UN. Maintenant, qui a voté? pourquoi n'écrit-il pas la bonne réponse alors? – ariefbayu

Questions connexes