2016-12-19 1 views
0

J'essaye de faire un petit système pour m'aider dans mon travail. En lisant certains articles d'ici, de tester et de ne pas, je fait ce travail de code:file_get_contents dernier enregistrement

error_reporting(error_reporting() & ~E_NOTICE); 
header("Content-Type: text/html; charset=ISO-8859-1", true); 
$opts = array('http'=>array('method'=>"GET", 
      'header'=>"Accept-Language: pt-BR\r\n" . 
      "Cookie: ASPSESSIONIDSCSSRCRA=MHFGEDNDPHHBJDHGCMJKPDKN; ASPSESSIONIDQCSTTDRB=EKJNDDNDGGFMAHBFJABMJNAM".session_name()."=".session_id()."\r\n")); 
$context = stream_context_create($opts); 
session_write_close(); // unlock the file 
$url = "http://www.comprasnet.gov.br/pregao/fornec/mensagens_acomp.asp?prgcod=622924"; 
$contents = file_get_contents($url, false, $context); 
session_start(); // Lock the file 

echo ($contents); 

// Função para procura várias palavras em uma string 
function procpalavras01 ($contents, $palavras, $resultado = 0) { 
foreach ($palavras as $key => $value) { 
$pos = stripos($contents, $value); 
if ($pos !== false) { 
$palavras_encontradas[] = $value; } 
} 
if (is_array($palavras_encontradas)) { 
$palavras_encontradas = implode(",",$palavras_encontradas); 
} 
return $palavras_encontradas; 
} 

$palavras = array ("Ilma Chaves Pereira","19.026.964/0001-37","origina","correio","@"); 
$resultado = procpalavras01($contents, $palavras); 

//Variáveis 
$nome = ('ACLicita'); 
$mensagem = ('Pregoeiro chama no pregão'); 
$pregao = ('72016'); 
$uasg = ('160019'); 
$data_envio = date('d/m/Y'); 
$hora_envio = date('H:i:s'); 

// Compo E-mail 
$arquivo = " 
<style type='text/css'> 
body { 
margin:0px; 
font-family:Verdane; 
font-size:12px; 
color: #666666; 
} 
a{ 
color: #666666; 
text-decoration: none; 
} 
a:hover { 
color: #FF0000; 
text-decoration: none; 
} 
</style> 
<html> 
<table width='510' border='1' cellpadding='1' cellspacing='1' bgcolor='#CCCCCC'> 
     <tr> 
      <td> 
<tr> 
      <td width='500'>Nome:$nome</td> 
      </tr> 
      <tr> 
       <td width='320'>Mensagem:$mensagem</td> 
      </tr> 
      <tr> 
       <td width='320'>Pregão:$pregao</td> 
      </tr> 
      <tr> 
       <td width='320'>Uasg:$uasg</td> 
      </tr> 
      <tr> 
       <td width='320'>Palavra Encontrada:$resultado</td> 
      </tr> 
     </td> 
     </tr> 
     <tr> 
     <td>Este e-mail foi enviado em <b>$data_envio</b> às <b>$hora_envio</b></td> 
     </tr> 
    </table> 
</html> 
"; 
//enviar 

// emails para quem será enviado o formulário 
$emailenviar = "[email protected]"; 
$destino = $emailenviar; 
$assunto = "Atenção ao Pregão: " . $pregao . " Uasg: " . $uasg; 

// É necessário indicar que o formato do e-mail é html 
    $headers = 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
    $headers .= 'From: ACLicita'; 
//$headers .= "Bcc: $EmailPadrao\r\n"; 

if ($resultado === null) { 
} else { 
$enviaremail = mail($destino, $assunto, $arquivo, $headers); 
} 

Il fonctionne très bien, mais je veux que ce vérifier que le dernier message sur le lien (par date et heure), et si elle est déjà envoyé ne pas l'envoyer à nouveau. Le site a un système d'actualisation, donc mon code se rafraîchit à chaque actualisation du site, en envoyant un autre mail si les mots dans $ palavras sont trouvés. Aidez-moi ou montrez-moi le chemin, un peu de lumière comment puis-je corriger cela. Je ne sais pas si je me suis fait clair.

Edit 1: Code essayant de inserto dans la table:

if ($resultado === null) { 
} else { 
$enviaremail = mail($destino, $assunto, $arquivo, $headers); 
$sql = "INSERT INTO Licita (date, assunto, arquivo, email) 
VALUES ('$date', '$assunto', '$arquivo', '$emailenviar')"; 
} 
+0

Comment pouvons-nous dire si elle a été envoyée ou non? –

+0

C'est ce que je veux savoir aussi. Comme je l'ai dit avant, je ne sais rien sur PHP. Tout ce que je sais, c'est que le courrier arrive si un mot est trouvé dans le lien. –

+0

Vous avez dit "je veux que ceci vérifie seulement le dernier message sur le lien (par date et heure), et s'il est déjà envoyé n'envoie pas par mail", comment peut-on dire s'il a été envoyé? Y at-il un mot spécifique dans le td qui dit qu'il a été envoyé? –

Répondre

0

Yo besoin de stocker quelque part comme dans la base de données que les messages ont été envoyés. Voir le commentaire ci-dessous dans votre code.

//............................ 
if ($resultado === null) { 
} else { 
//get mail info from your local database (mysql) using current one 
//if(you get null then send email otherwise you already have sent email) 
$enviaremail = mail($destino, $assunto, $arquivo, $headers); 
//save this mail info to DB 
} 
//............................... 

En fait, pour suivre celui que vous avez envoyé, vous devez stocker chaque enregistrement après l'envoi de courrier électronique. Et avant d'envoyer un e-mail, vous devez vérifier avec le DB si le nouveau (le dernier) existe ou non dans la base de données.
Base de données: Chaque fois que vous envoyez le courrier, veuillez sauvegarder ces informations dans un stockage local (fichier, base de données ou autre, MySQl recommandé). Et à chaque fois que vous envoyez, avant d'envoyer vérifier si l'enregistrement en cours a été envoyé ou non.
Session: Et si vous voulez juste vérifier le dernier, puis stocker cette information dans votre session et ne laissez pas votre session expirer. Alors que vous aurez l'enregistrement du dernier envoyé par e-mail.
ÉDITÉE:

  1. Insérer des données dans DB: Insert
  2. Lire les données de DB: Read
+0

Merci d'avoir répondu Shailesh. Je vais essayer, en commençant une recherche mysql car je ne connais pas un point dans DB. –

+0

Insérer des données: http://www.w3schools.com/php/php_mysql_insert.asp Lire les données: http://www.w3schools.com/php/php_mysql_select.asp – webDev

+0

Merci encore, en essayant de créer une base de données dans PHPmyadmin, mais besoin de lire plus sur les types, collation, int et autres choses nécessaires pour créer une base de données. –