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 :

Requête "INSERT" qui ne fonctionne pas.


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut Requête "INSERT" qui ne fonctionne pas.
    Bonsoir à tous,

    Je suis en train de gérer l'insertion d'une feuille XLS dans une base MySQL.

    J'ai réussi à gérer la conversion mais je rencontre un problème avec l'insertion dans MySQL.

    Voici mon code :

    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
    81
    82
    83
    84
    <?php
     
    // Code d'importation des XLS.
    require 'C:\Windows\System32\vendor\autoload.php';
     
    $inputFileType = 'Xls';
    $inputFileName = './presences_enfants.XLS';
     
    try
    {
    	$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
    	$reader->setReadDataOnly(true);
    	$spreadsheet = $reader->load($inputFileName);
    }
     
    catch(Exception $e)
    {
        // Si l'ouverture échoue, on l'indique à l'utilisateur et on arrête l'exécution du script.
        echo 'Le fichier "'.$inputFileName.'" est introuvable.'; // METTRE A JOUR POUR ENVOYER UN MAIL AUX ADMINISTRATEURS !!!
        exit();
    }
     
    // Définition d'un tableau associatif qui contiendra l'ensemble des données des cellules.
    $arrayExcel = [];
     
    // Séléction de la feuille du document à insérer
    $sheet = $spreadsheet->getSheet(0);
    // Nombre de lignes de la feuille concernée.
    $highestRow = $sheet->getHighestRow();
    // Nombre de colonnes de la feuille concernée.
    $highestColumn = $sheet->getHighestColumn();
     
    // Boucle pour la création du tableau associatif.
    for ($row = 1; $row <= $highestRow; $row++)
    {
    	// On range la ligne dans l'ordre 'normal'
        $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
    	// rowData est un tableau contenant les données de la ligne
        $rowData = $rowData[0];
     
    	array_push($arrayExcel, ["idenfant"=>trim($rowData[0]), "datedebut"=>trim($rowData[1]), "datefin"=>trim($rowData[2]), "annulation"=>trim($rowData[3]), "site"=>trim($rowData[4]), "numadherent"=>trim($rowData[5]), "nomenfant"=>trim($rowData[6])]);
    }
    // Suppression de la première ligne qui contient les entêtes de colonnes.
    array_shift($arrayExcel);
    // Fin de gestion du fichier XLS.
     
    // Lancement de la connexion au serveur MariaDB via PDO.
    $base = mysqli_connect("127.0.0.1", "test", "123456", "tv_bat13");
     
    // Enregistrement des éléments du tableau dans la BDD.
    foreach($arrayExcel as $ligne)
    {
    	// Modification de la date d'entrée pour correspondre à une date MySQL. (Date Excel)
    	$dated = $ligne['datedebut'] * 86400 - 2209161600; // Conversion de la date en timestamp.
    	$datedebutmysql = date('Ymd', $dated);
    	//  Modification de la date de sortie pour correspondre à une date MySQL. (Date Excel)
    	$datef = $ligne['datefin'] * 86400 - 2209161600; // Conversion de la date en timestamp.
    	$datefinmysql = date('Ymd', $datef);
     
     
    	$idenfant = $ligne['idenfant'];
     
    	if ($ligne['annulation'] == "")
    	{
    		$annulation = 0;
    	}
    	else
    	{
    		$annulation = 1;
    	}
     
    	$site = $ligne['site'];
    	$numadherent = $ligne['numadherent'];
    	$nomenfant = $ligne['nomenfant'];
     
    	$sql = "INSERT INTO test (idenfant, datedebut, datefin, annulation, numadherent, nomenfant) VALUES ($idenfant, $datedebutmysql, $datefinmysql, $annulation, '$numadherent', '$nomenfant')";
     
    	// Exécution de la requête
    	$res = $base->query($sql);
     
        echo 'Entrée '.$nomenfant.' ajoutée dans la table'."</br>";
    }
    mysqli_close($base);
    ?>
    Mon problème :

    Quand je travaille sur une feuille contenant 10 enfants, ma requête fonctionne et ma table est correctement incrémentée.

    Quand je travaille sur une feuille contenant 150 enfants, ma requête semble fonctionner mais ma table ne se remplie pas.

    Je ne comprend pas pourquoi.

    J'utilise une VM pour mon développement ou j'ai installé XAMPP.

    Pourriez-vous m'aider ? Merci d'avance pour vos réponses.

    Merci d'avance.

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Bonjour, vous devriez prendre l'habitude d'activer la gestion d'erreur en dev.

    dans votre cas les variables $datedebutmysql, $datefinmysql doivent être inséré comme du texte

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut
    Merci pour votre réponse.

    Citation Envoyé par MaitrePylos Voir le message
    [...]vous devriez prendre l'habitude d'activer la gestion d'erreur en dev.[...]
    J'ai quelques bases minime en dev mais j'avoue ne pas savoir comment gérer les erreurs surtout dans ce cas précis.

    Citation Envoyé par MaitrePylos Voir le message
    [...]les variables $datedebutmysql, $datefinmysql doivent être inséré comme du texte[...]
    J'ai codé ma requête pas à pas. Tout fonctionne correctement jusqu'à ce que j'ajoute la dernière variable "'$nomenfant'". A ce moment, la page m'affiche que l'entrée a été correctement ajoutée pour chaque ligne mais plus aucune donnée dans la base de donnée. C'est pour cela que je pensais à un problème de temps d'exécution de la requête.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    faite un vardump pour voir ce qu'il y a dans cette variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $nomenfant = $ligne['nomenfant'];
    var_dump($nomenfant);
    die();

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 230
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    faite un vardump pour voir ce qu'il y a dans cette variable :
    Je n'avais pas précisé avoir déjà effectué cette vérification. J'ai utilisé gettype ($nomenfant) qui me retourne string.

    Dans ma table, j'ai défini ma colonne de type VARCHAR (150) et NULL par défaut si jamais le nom de l'enfant n'est pas défini. Cela arrive rarement mais c'est possible.

    Dans ma feuille de calcul, l'ensemble des noms est saisie.

Discussions similaires

  1. [MySQL] INSERT INTO qui ne fonctionne pas mais qui fonctionne
    Par quiky dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 09/12/2009, 15h31
  2. requête dont la modification qui ne fonctionne pas
    Par dj_techno dans le forum WinDev
    Réponses: 3
    Dernier message: 02/04/2009, 15h10
  3. Insert into qui ne fonctionne pas ?
    Par Little_flower dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/08/2008, 10h12
  4. [MySQL] insertion étendue qui ne fonctionne pas
    Par osseili20 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/02/2008, 10h39
  5. Requête toute bête mais qui ne fonctionne pas
    Par m51_2000 dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/11/2007, 13h15

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