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 :

Contrôle date avant insertion dans base de données


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut Contrôle date avant insertion dans base de données
    Bonjour,

    J'aimerai trouver une solution à mon problème car pour être honnête je n'ai absolument aucune idée vers où m'orienter pour le moment.

    Je dois importer le contenu d'un fichier.csv dans ma base de donnée MySQL, cependant je dois vérifier certaines choses avant.

    Le fichier type (car il y en aura plusieurs) est composé de deux colonnes : une colonne avec date & heure, et une autre colonne avec une valeur décimale. Il y a avant ce contenu, quelques lignes de texte et à la fin du fichier entre 3 et 4 lignes de texte aussi.

    En effet, j'aimerai faire une condition qui me permettrait de ne sélectionner que les données dates et numériques. Cependant, je ne sais pas comment effectuer ce contrôle (peut-être y a-t-il une fonction déjà existante ?).

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Essaies avec fgetcsv pour lire le contenu du fichier csv qui alimentera ta requête d'insertion.

    Il y a bien LOAD DATA INFILE qui serait plus optimisé (rapide) mais il faut des droits mysql sur les fichiers (qui ne sont jamais autorisés sur les serveurs mutualisés).

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci mais j'ai justement utilisé cette fonction fgetcsv. Maintenant comment identifier le contenu ? C'est cela le problème principal.

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    C'est expliqué dans l'exemple de la doc de fgetcsv. Pour commenter cet exemple :
    $data renvoi un tableau indexé numériquement. Si tu veux les colonnes 2 et 3 de ta table tu pourras les récupérer avec $data[1] et $data[2]

  5. #5
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Pour t'aider encore un peu plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $row = 1;
    if (($handle = fopen("test.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            echo "<p> $num champs à la ligne $row: <br /></p>\n";
            $row++;
            for ($c=0; $c < $num; $c++) {
                echo $data[$c] . "<br />\n";
            }
        }
        fclose($handle);
    }
    ?>
    Réflexe de la doc http://www.php.net/manual/fr/function.fgetcsv.php

  6. #6
    Invité
    Invité(e)
    Par défaut
    Merci de cette réponse, mais je sais aussi cela

    Actuellement, mon code fonctionne. J'ai des lignes avec soit des chaines de caractères, soit des dates.
    Ce que je fais, c'est que je converti la première colonne de chaque ligne en cours en un tableau, et je regarde si les deux premiers caractères sont numériques. Comme il s'agit de dates, ma condition fonctionne.

    Cependant, je trouve que cela reste du bricolage, je souhaiterai vérifier qu'il s'agisse intégralement d'une date et non simplement de deux caractères numériques.

  7. #7
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Dans ce cas là, non php ne fournit aucune fonction nativement afin de vérifier si un champ texte peut-être considéré une date valide.

    Mais tu peux renforcer tes tests de champ en utilisant des expressions régulières par exemple.

    Fouile sur google, j'ai déjà pu trouver ça par exemple

  8. #8
    Invité
    Invité(e)
    Par défaut
    Des expressions régulières...?

    Hum ok, je vais regarder.


    Merci c'est sympa, a+

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Quand c'est une date, est-elle toujours au même format, si oui lequel ?
    Donnes un exemple !

    (PS si tu avais donné un exemple dès le départ on aurait pas répondu à côté )

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 198
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    Mh ... tu pourrais utiliser checkdate ?

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/11/2006, 10h37
  2. [VB.NET]Requete INSERT dans base de données access
    Par mael94420 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/10/2006, 13h57
  3. Réponses: 6
    Dernier message: 09/06/2006, 12h17
  4. Réponses: 9
    Dernier message: 13/10/2005, 18h24
  5. Réponses: 8
    Dernier message: 11/05/2005, 14h48

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