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 :

teste sur la date avant boucle


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 27
    Par défaut teste sur la date avant boucle
    Bonjour voici mon probleme

    jai une boucle qui insert des données trimestriel (provenant d'un fichier excel) , j'aimerai tester si la date de mon fichier excel n'est pas deja en base , si elle n'est pas en base je peux entrer dans ma boucle et insert . (car le fichier trimestriel a la meme date pour chaque ligne) je ne sais pas comment tester la date sans entrer dans ma boucle.

    Voici mon code qui est fonctionnel mais qui ne teste pas si la date existe deja avant l'insertion


    extract.php
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    <?php
    include 'includes/global.inc';
    include 'includes/functions.php';
     
    $link = mysql_connect($host, $user, $pass) or die("Can not connect." . mysql_error());
    mysql_select_db($db) or die("Can not connect.");
     
    if($_FILES)
    {
    	$fichier=basename($_FILES['file']['name']);
    	$ext_fichier=strchr($_FILES['file']['name'],'.');
    	$taille_fichier= filesize($_FILES['file']['tmp_name']);
    }
     
    //upload du fichier
    if($_POST)
    {
    	if (!in_array($ext_fichier,$ext))
    	{
    		$erreur=" ERREUR Doit être au format csv";
    	}
    	if ($taille_fichier>$taille_max)
    	{
    		$erreur=" ERREUR le fichier est trop volumineux";
    	}
     
    	if(file_exists( $rep . $_FILES['file']['name']))
    	{
    		$erreur=" ERREUR le fichier a déjà été uploadé ";
    	}
     
    }
    if(isset($erreur))
    {
    	echo $erreur;
    }
     
     
    if(!isset($erreur))
    {
     
    	if(move_uploaded_file($_FILES['file']['tmp_name'], $rep . $fichier=$_FILES['file']['name']))
    	{
     
    		$handle = fopen ($rep.$fichier,'r');
    		fgetcsv ($handle, 0, ";");
     
    		while ($data = fgetcsv ($handle, 1000, ";"))
    	 {
    	 	//traitement des données
    	 	$data[41] = str_replace('€','',$data[41]);
    	 	$data[2] = implode('-',array_reverse(explode('/',$data[2])));
     
    	 	$periodeconso=$data[0];
    	 	$periodeabonnement=$data[1];
    	 	$datefacture=$data[2];
    	 	$ligne=$data[8];
    	 	$montant=$data[41];
    	 	$montant=str_replace(',','.',$montant.";");
    	 	//insertion en base
     
    	 	$code_retour = insertSfr ($periodeconso,$periodeabonnement,$datefacture,$ligne,$montant);
     
     
    	 }
    	}
    	if ($code_retour)
    	{
    		//	echo 'ok';
    	 exportTocsv ();
    	}
    	else
    	{
    		echo 'Insertion echoue';
    	}
     
    	mysql_close ();
    	fclose ($handle);
    }
    --- fonction.php
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?php 
    include 'includes/db.inc.php';
    include 'includes/global.inc';
     
    function insertSfr($periodeconso,$periodeabonnement,$datefacture,$ligne,$montant ){
     
    // Préparation de la requete d'insertion
    $sql = "INSERT INTO consomation (periode_conso,periode_abonnement,date_facture,ligne,montant) VALUES ('".$periodeconso."','".$periodeabonnement."','".$datefacture."','".$ligne."','".$montant."')";
    $result= mysql_query($sql);
    if (!$result) {
    		$message = '<b>Invalid query:</b>' . mysql_errno() . '<br>' . mysql_error() . '<br><br>';
    		$message .= '<b>Whole query:</b><br>' . $sql . '<br><br>';
    		$message .= 'ON ' . __FILE__ . ' LINE ' . __LINE__ ; 
    		echo $message;
    		die();
    	}
    	return $result;
    }
     
    function testDate ($datefacture){
    include 'includes/db.inc.php';
    include 'includes/global.inc';
    	$sql = "SELECT date_facture FROM consomation WHERE date_facture ='".$datefacture."'";
     
    	$result = mysql_query($sql);
     
     
    }
     
    //exportation des donnees en csv
     
     
    function exportTocsv (){
     
    include 'includes/db.inc.php';
    include 'includes/global.inc';
     
    $result = mysql_query("SHOW COLUMNS FROM ".$table."");
    $i = 0;
     
    if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
    //$csv_output .= $row['Field'].";";
     
    $i++;}
    }
    //$csv_output .= "\n";
     $values = mysql_query("SELECT * FROM ".$table." WHERE month=".$previousmonth."");
     
    while ($rowr = mysql_fetch_row($values)) {
    for ($j=0;$j<$i;$j++) {
    $csv_output .= str_replace('.',',',$rowr[$j].";");
    }
    $csv_output .= "\n";
    }
     
    $filename = $file."_".date("d-m-Y_H-i",time());
     
    header("Content-type: application/vnd.ms-excel");
    header("Content-disposition: csv" . date("Y-m-d") . ".csv");
    header( "Content-disposition: filename=".$filename.".csv");
     
    print $csv_output;
     
    exit;
    }
    /*	
    function testDate ($datefacture){
    	$sql = "SELECT COUNT(date_facture) as count FROM consomation WHERE date_facture ='".$datefacture."'";
    	$result = mysql_query($sql);
    	$count = mysql_result($result,0,'count');
    	return $count;
    }
    */	
    ?>
    --- global
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
     
        $rep='extract/';   //repertoire d'upload 
    	$taille_max=2097152;	//taille max upload
    	$ext=array('.csv');
    	$today = date("d.m.y");
    	$code_retour = null;
    	$file = 'mp'; // csv name.
    	$csv_output = '';
    	$previousmonth=date("m",strtotime("-1 months"));
    	$currentyear = date("Y");
     
    ?>
    Merci pour votre aide j'espere avoir posté dans la bonne section.

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 27
    Par défaut
    si vous avez besoin de plus de précision dite le moi

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Par défaut
    Tu fais une requête cherchant si la date existe en base.

    Après avec un simple test, tu peux savoir si oui ou non tu peux intégrer.

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2008
    Messages : 27
    Par défaut
    oui , dans mon fichier fonction j'ai fais une fonction testDate

    je dois récupérer la date du fichier excel (sachant que pour chaque ligne la date est la meme) et la comparer aux dates de ma base.

    donc si jai bien compris je dois faire deux boucles ?

    la premiere pour verifier si la date n'existe pas

    et une seconde pour faire l'insertion.

  5. #5
    Membre émérite
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Par défaut
    Citation Envoyé par akamaru Voir le message
    donc si jai bien compris je dois faire deux boucles ?

    la premiere pour verifier si la date n'existe pas

    et une seconde pour faire l'insertion.
    Oui je vois pas vraiment d'autre solution, à la limite si la date est la même sur toute les lignes, fait un break dès que tu a récupéré la date une première fois.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    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
    //traitement des données
    	 	$data[41] = str_replace('€','',$data[41]);
    	 	$data[2] = implode('-',array_reverse(explode('/',$data[2])));
     
    	 	$periodeconso=$data[0];
    	 	$periodeabonnement=$data[1];
    	 	$datefacture=$data[2];
    	 	$ligne=$data[8];
    	 	$montant=$data[41];
    	 	$montant=str_replace(',','.',$montant.";");
    	 	//insertion en base
     
                    //évite insertion si date déjà en base et stoppe l’exécution de la boucle
                    if(testDate ($datefacture))
                             break;
    	 	$code_retour = insertSfr ($periodeconso,$periodeabonnement,$datefacture,$ligne,$montant);
    Ce code devrait permettre de sortir de la boucle sans faire d'insertion dans la base à condition de rajouter à la fin de la fonction testDate le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return( mysql_num_rows($result) !== false);
    Par contre ce code affichera normalement: et n'appelera pas exporttocsv donc il reste des ameliorations à y apporter

Discussions similaires

  1. Test sur les dates javascript
    Par mjs21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/06/2008, 10h50
  2. test sur fermeture aperçu avant impression
    Par doli100 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/06/2008, 20h33
  3. Problèmes Test sur des dates
    Par guigui11 dans le forum ASP
    Réponses: 1
    Dernier message: 11/12/2006, 16h18
  4. Test sur une date
    Par Treuze dans le forum Access
    Réponses: 5
    Dernier message: 13/08/2006, 14h10
  5. Mon test sur la date ne marche pas
    Par dachir dans le forum Access
    Réponses: 7
    Dernier message: 12/08/2006, 10h23

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