IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Exécuter des requêtes SQL d'un fichier PHP périodiquement [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 13
    Points
    13
    Par défaut Exécuter des requêtes SQL d'un fichier PHP périodiquement
    Bonjour à tous,

    Tout d'abord je tiens à préciser que j'ai fait pas mal de recherches, mais aucun résultat ne me convient. Donc ma situation est la suivante : je dois récupérer à intervalle régulier (genre toutes les heures) les données d'une MSSQL Server distante afin de les importer dans ma base MySQL locale. Je fais ça avec le code suivant et qui marche (j'ai testé !) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
    	//Connexion à la base MySQL locale qui va contenir les nouvelles données
    	include('includes/mysql_connect_temperature.inc.php');
     
    	//Connexion à la base Microsoft SQL Server distante qui contient les données que nous voulons récupérer
    	$DB_NAME = 'hypervision';
    	$DB_HOST = 'ALPORT3-PC\SQLEXPRESS';  
    	$DB_USER = 'Admin';
    	$DB_PASSWORD = 'monPass';
    	$connect_info = array("UID" => $DB_USER, "PWD" => $DB_PASSWORD, "Database" => $DB_NAME);
    	$link = sqlsrv_connect($DB_HOST, $connect_info);
     
    	//Envoi de la requête de sélection des données à la base MSSQL Server
    	$requete = "SELECT * FROM [hypervision].[dbo].[Temp_Salon]";
    	$ressource_requete = sqlsrv_query($link, $requete);
     
    	//Enregistrement des données dans la base MySQL
    	while($row = sqlsrv_fetch_array($ressource_requete, SQLSRV_FETCH_ASSOC)) {
    		$requete = "INSERT INTO capteur_salon (ID, Horodatage, Temperature) VALUES (".$row['ID'].", '".$row['Horodatage']."', '".$row['Temperature']."')";
    		mysql_query($requete, $lien);
    	}
    ?>
    Donc bien entendu ce fichier est rataché à un site web traité via Wamp sur un serveur Windows Server 2003.

    D'après ce que j'ai pu trouver sur internet, 2 solutions me conviennent (enfin de ce que je connais pour l'instant) : soit périodiquement le fichier est exécuté, soit dès l'ouverture d'une page (n'importe laquelle, j'insiste) le script est exécuté. En sachant que la première me va mieux car le trafic sur mon site ne sera pas très important, il faudrait donc qu'il y ai un minimum de mise à jour de ma BDD.

    Voilà, que me conseillez-vous ?

    Merci par avance de votre aide et votre patience !!!

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je ne vois que deux solutions pour ma part:

    Soit utiliser les tâches planifiées pour déclencher le trigger à intervale régulier (sauf que sur Windows, je ne suis pas sûr qu'on puisse planifier des intervales horaires) mais c'est vraiment plus pratique à faire avec des cronjobs sur Linux

    Soit ajouter un script JavaScript sur les pages qui, de manière transparente pour l'utilisateur, va déclencher le trigger avec une requête Ajax. Mais si personne ne visite la page en question, le trigger ne sera jamais déclenché.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 13
    Points
    13
    Par défaut
    Merci de ta réponse !

    Alors oui, sur le serveur il existe un moyen de planifier des tâches périodiques. Donc je pourrais lancer la page php en question à intervalles périodiques. Mais la question, c'est comment quitter cette page après l'avoir lancé pour éviter d'ouvrir des centaines de pages...

    Pour ta deuxième solution, pourquoi pas, c'est ce que j'avais un peu vu sur internet, mais je ne m'y connais pas trop dans JS, et encore moins dans de l'Ajax
    Par contre, le but n'est pas d'avoir 0 visiteurs sur le site, mais il y aura en moyenne seulement une vingtaine de visites pas semaine. Or si je n'actualise les données seulement à l'ouverture et que pile à ce moment la connexion au serveur distant plante, alors je n'aurais pas les dernières données sur mes graphes... Parce que malheureusement je dois envisager le fait que la connexion à internet des serveurs distants peut-être coupée.

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Il ne s'agit pas de lancer une page mais un script PHP.

    Je t'invite à faire le test suivant avec ta ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    > php -r "echo 'Hello World!';"
    De la même façon, tu peux lancer l'execution d'un script avec -f

    Sinon fait ça avec jQuery, c'est tellement simple que ça devient presque drôle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <script type="text/javascript">
    jQuery(function ($) { $.ajax({ url: 'http://url/de/ton/trigger.php' }); });
    </script>

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 13
    Points
    13
    Par défaut
    Ta solution avec jQuery me plaît beaucoup ! Mais je présume qu'il faut l'installer ou faire une manip avant de pouvoir utiliser ton code, non ?

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Tout à fait, et ça se résume à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="application/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    Je me répète mais on à rien fait de plus simple dans le monde des frameworks JavaScript que jQuery

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 13
    Points
    13
    Par défaut
    Merci pour ta réponse, mais ça ne veut pas marcher, aurais-je oublié quelque chose ? Voici mon header :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <!DOCTYPE html>
    		<html>
    			<head>
    				<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    				<title>Hypervision</title>
    				<meta name="Description" content="Hypervision" />
    				<meta name="keywords" content="hypervision" />
    				<meta name="Language" content="fr" />
    				<meta name="Robots" content="index, follow" />
    				<meta name="Distribution" content="global" />
    				<meta name="Expires" content="never" />
    				<link type="text/css" href="includes/style.css" rel="stylesheet">
    				<script type="text/javascript" src="http://www.google.com/jsapi"></script>
    				<script type="application/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    				<script type="text/javascript">
    					jQuery(function ($) { $.ajax({ url: \'http://localhost/acquisition_auto.php\' }); });
    				</script>
     
    				<!--[if lt IE 9]>
    				<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    				<![endif]-->
    			</head>

  8. #8
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je peux savoir pour quelle obscure raison tu échappe les quotes autours de ton URL ??

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 13
    Points
    13
    Par défaut
    Parce que je suis dans un fichier PHP, donc du coup je suis obligé de mettre ça. C'est une connerie ?

  10. #10
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Heu, non ça change rien.

    Montre le script complet que je sois sûr

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 13
    Points
    13
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    <?php
    	echo'
    		<!DOCTYPE html>
    		<html>
    			<head>
    				<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    				<title>Hypervision</title>
    				<meta name="Description" content="Hypervision" />
    				<meta name="keywords" content="hypervision" />
    				<meta name="Language" content="fr" />
    				<meta name="Robots" content="index, follow" />
    				<meta name="Distribution" content="global" />
    				<meta name="Expires" content="never" />
    				<link type="text/css" href="includes/style.css" rel="stylesheet">
    				<script type="text/javascript" src="http://www.google.com/jsapi"></script>
    				<script type="application/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    				<script type="text/javascript">
    					jQuery(function ($) { $.ajax({ url: \'http://localhost/acquisition_auto.php\' }); });
    				</script>
    
    				<!--[if lt IE 9]>
    				<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    				<![endif]-->
    			</head>
    	';
    ?>

  12. #12
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Heu, tu pourrais avantageusement remplacer tout ça par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <!DOCTYPE html>
    		<html>
    			<head>
    				<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    				<title>Hypervision</title>
    				<meta name="Description" content="Hypervision" />
    				<meta name="keywords" content="hypervision" />
    				<meta name="Language" content="fr" />
    				<meta name="Robots" content="index, follow" />
    				<meta name="Distribution" content="global" />
    				<meta name="Expires" content="never" />
    				<link type="text/css" href="includes/style.css" rel="stylesheet">
    				<script type="text/javascript" src="http://www.google.com/jsapi"></script>
    				<script type="application/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    				<script type="text/javascript">
    					jQuery(function ($) { $.ajax({ url: "http://localhost/acquisition_auto.php" }); });
    				</script>
     
    				<!--[if lt IE 9]>
    				<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    				<![endif]-->
    			</head>
    <body>
    <?php 
     
    // TES TRAITEMENTS ICI //
     
    ?>
    </body>
    </html>
    Et puis l'intentation est trop profonde: inutile d'identer <html>,<head> et <body>, tout le monde sait quelle est leur position ^^

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 13
    Points
    13
    Par défaut
    Bah en faites je fait des "include" dans ma page internet avec en plus des requêtes SQL, connexions aux BDD, etc. Donc j'ai tout fait en PHP du coup...
    Mais tu penses que ça ne marche pas à cause du PHP et des "quotes" ?

  14. #14
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Peu importe que tu produise le document avec PHP ou directement dans le fichier comme dans mon exemple: tu ne dois pas échaper les quotes dans l'URL invoquée par Ajax sinon, tu auras une erreur JavaScript et ça ne marchera pas.

    Pour la petite histoire, il est bien plus clair et productif d'utiliser la syntaxe alternative et les short open tags en PHP.
    Un petit exemple vaut mieux qu'un long discours; selon toi, des deux codes suivants, lequel est le plus propre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title>Démo</title>
    </head>
    <body>
        <h1>Démo</h1>
        <?php foreach ($collection as $item): ?>
        <section id="<?=$item->id?>">
            <h2><?=$item->name?></h2>
            <p><?=$item->description?></p>
            <?php if ($item->hasMessages()): ?>
            <h3>Commentaires</h3>
            <?php foreach ($item->getMessages() as $message): ?>
            <p class="comment"><?=$message->content?></p>
            <?php endforeach ?>
            <?php else: ?>
            <p class="comment">Cet section n'a pas reçu de commentaires</p>
            <?php endif ?>
        </section>
        <?php endforeach ?>
    </body>
    </html>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
     
    echo <<< HTML
    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <title>Démo</title>
    </head>
    <body>
    HTML;
     
    echo '<h1>Démo</h1>';
     
    foreach ($collection as $item) {
        echo '<section id="' . $item->id . '">';
        echo '<p>' . $item->description . '</p>';
        if ($item->hasMessages()) {
            echo '<h3>Commentaires</h3>'
            foreach ($item->getMessages() as $message) {
                echo '<p class="comment">' . $message->content . '</p>';
            }
        }
        else {
            echo '<p class="comment">Cet section n\'a pas reçu de commentaires</p>';
        }
    }
     
    echo <<< HTML
    </body>
    </html>
    HTML;
    En fait, il s'agit d'utiliser PHP dans son expression la plus simple: un préprocesseur Hypertexte

  15. #15
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    peu être comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <script>
      $(document).ready(function() {//quand la page est chargé
      $.ajax({ url: 'http://localhost/acquisition_auto.php' });  
      });
     </script>
    Conception / Dev

  16. #16
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    @astico

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jQuery(callback) = document.onload

  17. #17
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    a oui
    Conception / Dev

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 43
    Points : 13
    Points
    13
    Par défaut
    Super, merci beaucoup à vous deux, ça marche ! Et c'est trop pratique cette technique en plus !

    Et oui, je suis bien d'accord pour dire que la prog du haut est bien plus jolie à lire ;-)
    Je vais donc de ce pas refaire tout le code de mon site proprement.

    Encore merci de votre patience !

    A++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Exécuter des requête SQL (avec ou sans PHP) dans javascript
    Par mir540 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/11/2009, 10h03
  2. [adodbapi]Effectuer des requêtes SQL sur un fichier dbf
    Par Marie S. dans le forum Général Python
    Réponses: 5
    Dernier message: 22/10/2008, 12h57
  3. Exécuter des requêtes SQL
    Par punisher999 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/03/2008, 10h26
  4. [ADO] Exécuter des requêtes contenues dans un fichier SQL
    Par Lucas Panny dans le forum Visual C++
    Réponses: 1
    Dernier message: 29/01/2008, 06h35
  5. Réponses: 2
    Dernier message: 24/04/2007, 00h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo