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

PHP & Base de données Discussion :

Tache cron et update SQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 138
    Par défaut Tache cron et update SQL
    salut,

    je me sert d'une tache cron recuperée sur un site qui me permet de mettre à jour ma base SQL à partir d'un fichier sql generé par php dans le cron. L'embetant c'est que cette tache cron m'efface les articles existants et les remplace par ceux du fichier.
    Je voudrais qu'elle fasse un update (à partir du facteur $id) car cela peut m'arriver de modifier des articles directement à partir de la partie admin du site.

    FICHIER SQL Généré avant le cron
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite ($inF, "INSERT INTO wp_posts VALUES (".$id.",3,'".$date." 01:00:00','','".$image."".$desc_longue."".$image2."','".$titre."',0,'','".$status."','open','open','','".$url2."','','','','','".$desc_longue."','','".$url."',0,'post','',0);\n");
    CRON
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    <?php 
     
    include("wp-config.php");
    $prefix="wp_"; 
    echo "\n<pre>\n"; 
    echo DB_HOST;
    function bdd_connect()
    {
    	global $sql_config;
    	$link=@mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);
    	if ($link && @mysql_select_db(DB_NAME))
    		return ($link);
    	return (FALSE);
    }
     
    $time=array(); 
    $time[]=time(); // timer 
     
    $file=@file("tmp/sql.sql"); 
    if (!$file) die("Update not possible. Nothing is changed");
     
    $nbr_ligne=count($file); 
    $link=bdd_connect(); 
    if (!$link) die("SQL connexion failed"); 
     
    $tables=array($prefix."posts"); 
    foreach($tables as $t) $req=mysql_query("DELETE FROM $t"); 
     
    $time[]=time(); // timer 
    $query=0; 
     
    for($i=0;$i<$nbr_ligne;$i++) { 
        $ligne=$file[$i]; 
        if ($ligne{0} != "#" && $ligne!='') { 
            $req=@mysql_query(str_replace("\n","",$ligne)); 
            $query++; 
        } 
    } 
     
    $time[]=time(); // timer 
    $diff=array($time[1]-$time[0],$time[2]-$time[1],$time[2]-$time[0]); 
     
    echo "Module's download : ".$diff[0]." seconds\n"; 
    echo $query. " querys : ".$diff[1]." seconds\n"; 
    echo "Total : ".$diff[2]." seconds\n"; 
    echo "</pre>\n"; 
     
    @mysql_close($link);
    ?>
    MERCI pour votre aide

  2. #2
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    Etant donné que tu es sur MySQL, je te conseille d'utiliser un alternatif d'UPDATE qui, je pense, correspond à ta demande. C'est REPLACE, sa syntaxe est la même que pour l'INSERT. Voici son fonctionnement :

    Un replace modifie ou ajoute une ligne en fonction de la présence d'identifiant. si l'identifiant est renseigné, il modifie, s'il n'est pas renseigné, il ajoute!

    Ajout:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    REPLACE INTO table(id,nom,prenom) values ('','Dutronc','Jacques');

    Modification :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    REPLACE INTO table(id,nom,prenom) values (1,'Dutronc','Thomas');


  3. #3
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 138
    Par défaut
    Donc si j'ai bien compris je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO wp_posts (id,nbr,date,image,desc,titre ....) VALUES (".$id.",3,'".$date." 01:00:00','','".$image."".$desc_longue."".$image2."','".$titre."',0,'','".$status."','open','open','','".$url2."','','','','','".$desc_longue."','','".$url."',0,'post','',0);\n");
    - Si les champs sont deja renseignés il ne les modifie pas ?
    - suis je obligé d'indiquer tous les valeurs dans id,nbr,date,image,desc,titre ....)

    En fait à partir du moment où la valeur $id existe déja dans la base (exemple id = 1520), je voudrais qu'il ne modifie pas la description, le titre et les autres elements.
    Il faudrait qu'il n'ajoute que les lignes avec un id qui n'existe pas.

  4. #4
    Membre chevronné Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Par défaut
    Sois plus clair dans ce que tu demande... tout d'abord tu désire un Update, maintenant tu ne veux pas modifier celles déjà existantes...


    l'extrait de code que tu nous affiche ne nous ait pas vraiment utile sans le reste du code... comment ton fichier sql est il créé?

  5. #5
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 138
    Par défaut
    Désolé. Je me suis mal exprimé.

    En fait j'alimente un blog à partir d'un fichier SQL que je crée avec la premiere ligne de commande. Ce fichier, créé quotidiennement, contient tout les articles déja parus plus celui du jour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO wp_posts VALUES (".$id.",3,'".$date." 01:00:00','','".$image."".$desc_longue."".$image2."','".$titre."',0,'','".$status."','open','open','','".$url2."','','','','','".$desc_longue."','','".$url."',0,'post','',0);\n");
    La tache cron réécrit à chaque fois dans la base tous les articles meme ceux qui ont déja été posté.
    Mais il m'arrive parfois de modifier des articles déja postés (titre, mise en page). Lors de la mise à jour quotidienne l'article est réecrit dans sa forme originale. La modification est donc perdue.
    Je voudrais trouver un moyen pour que seul les articles non existant soit écrit. Soit par une fonction SQL speciale, soit en selectionnant les articles par $id.

  6. #6
    Membre confirmé
    Inscrit en
    Août 2006
    Messages
    138
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 138
    Par défaut
    J'ai vu que CASE permet de poser des conditions:

    j'ai essayé avec cette ligne mais il m'indique une erreur de syntaxe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID FROM wp_posts CASE WHEN ID!=".$id." THEN INSERT INTO wp_posts VALUES (".$id.",3,'".$date." 01:00:00','','".$image."".$desc_longue."".$image2."','".$titre."',0,'','".$status."','open','open','','".$url2."','','','','','".$desc_longue."','','".$url."',0,'post','',0) END;
    En fait je veux lui indiquer dans la table "wp_posts" de regarder la valeur "ID" si celle-ci n'existe pas alors il peut inserer les valeurs.

Discussions similaires

  1. Tache cron cgi php...
    Par yaka2 dans le forum Web
    Réponses: 2
    Dernier message: 12/12/2005, 14h32
  2. Tache cron + fichier de sauvegarde
    Par 12_darte_12 dans le forum Administration système
    Réponses: 20
    Dernier message: 09/11/2005, 16h32
  3. [EasyPHP] Tache Cron sous CMS
    Par frechy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 17/10/2005, 14h35
  4. [Configuration] tache cron
    Par yaka2 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 13/10/2005, 19h41
  5. [Oracle 9.1] Plantage update SQL et Timestamp
    Par ftrifiro dans le forum Oracle
    Réponses: 6
    Dernier message: 06/10/2005, 14h34

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