[RESOLU] problème lors de l'insertion de plusieurs données en même temps ,erreur :trop de connexions

Petit nouveau ! | 5 Messages

21 févr. 2017, 02:10

Bonjour, je veux traiter plusieurs fichiers en php et faire l'insertion de contenus (de fichiers) dans la base de données ,le problème que lorsque j'ai fait l'insertion de plus de 6 fichiers l'application se bloque , l'erreur :trop de connexions

voici le code de formulaire

Code : Tout sélectionner

<?php echo"<form action =\"acceuil.php\" method=\"POST\"> <div class=\"scrollable\" style=\"color:black ; overflow:auto ; height:270px; border: 1px solid #DCDCDC ;\" > <table style=\"width:60% ;margin-left:280px; \"> <thead> <tr> <th>fichier</th> <th> date</th> <th>charger</th> <th> visualiser</th> </tr> </thead> <tbody>"; $liste_rep =scandir("C:\Users\Sabrine\Desktop\stage"); $i =2; $num =count($liste_rep); while($i < $num){ echo "<tr> <td> $liste_rep[$i] </td> <td> ".$datetime = date("Y-m-d "); echo "</td> <td> <input type=\"checkbox\" name=\"choix[]\" id=\"$i\" value=\"$liste_rep[$i]\"> </td> <td> <input type=\"hidden\" name='n[]' value=\"$liste_rep[$i]\"> <input type=\"submit\" value=\"$liste_rep[$i]\" name=\"visualiser[]\"> <input type=\"hidden\" name='n[]' value=\"$liste_rep[$i]\" > </td> </tr>"; $i++; } echo" </tbody> </table></div> <div style='padding-left:50px;'> <table with='50%' align='center' > <tr> <td align=center><input style=\"background-color:#771E44; color:white; \" type=\"submit\" value=\"charger\" name=\"charger\" /></td> <td align=center><button style=\"background-color:#771E44; color:white; \" type=\"button\" onclick=\"annuler();\">annuler</button></td> </tr></table> </div></form>"; ?>

et le contenu du fichiers acceuil.php

Code : Tout sélectionner

<?php require('blk.php'); require('gw.php'); require('a.php'); require('b.php'); require('m.php'); require_once('q.php'); require('c.php'); require('d.php'); require('g.php'); require('h.php'); require('k.php'); require('kft.php'); require('l.php'); require('n.php'); require('i.php'); require('t.php'); require('tax.php'); require('fp.php'); require('amd.php'); require('muc.php'); $db = new PDO('mysql:host=localhost;dbname=agence', 'root', ''); if (isset($_POST['visualiser'])){ $j=0; $fic=fopen($_POST['visualiser'][$j],"r"); $i=1; //Compteur de ligne while(!feof($fic)) { $ligne= fgets($fic,1024); echo $ligne . "<br />"; $i ++; } fclose($fic) ; } if (isset($_POST['charger'])) { for ($j=0;$j<count($_POST["choix"]);$j++) { $x=$_POST['choix'][$j]; $v=substr($x,0,8); $result=$db->query("INSERT INTO air VALUES ('$v')"); $fic=fopen($x, "r"); $i=1 ; while(!feof($fic)) { $ligne= fgets($fic,1024); $var =substr($ligne,0,2); if($var == "AI"){ inserer_blk($ligne,$x); } if($var == "A-"){ inserer_a($ligne,$x); } if($var == "B-"){ inserer_b($ligne,$x); } if($var == "C-"){ inserer_c($ligne,$x); } if($var=="D-"){ inserer_d($ligne,$x); } if($var=="G-"){ inserer_g($ligne,$x); } if($var=="K-") { inserer_k($ligne,$x); } if($var=="KF") { inserer_kft($ligne,$x); } if($var=="L-"){ inserer_l($ligne,$x); } if($var=="M-"){ inserer_m($ligne,$x); } if($var=="N-"){ inserer_n($ligne,$x); } if($var=="Q-"){ } if($var=="I-"){ inserer_i($ligne,$x); } if($var=="T-" ) { inserer_t($ligne,$x);} if($var=="TF"){ } if($var=="FP") {inserer_fp($ligne,$x);} if($var=="AM"){ inserer_amd($ligne,$x); } if($var=="GW") { } if($var=="MU"){ exemple($ligne,$x); } if($var=="H-"){ inserer_h($ligne,$x); } if($var=="TA"){ inserer_tax($ligne,$x); } } fclose($fic) ; } echo "chargement avec succès"; } ?>
le problème est pour :charger == insérer dans la base. merci d'avance :D

Mammouth du PHP | 1235 Messages

21 févr. 2017, 03:50

Il doit y avoir une mauvaise architecture de ton bazar

avec autant de fichier inclu sans non compréhensible, une indentation inexistante et des noms de variable inexplicite, il n'y a que toi qui peux t'en sortir la dedans.

A priori, tu devrais tenter de n'utiliser qu'une seule connection pour toutes tes requètes, et les minimiser au maximum.
rapatrie les toutes sur une seule page en ajoutant une fonction de retour à tes fonctions inserer_XXX
Ceci n'est valable que si mes hypothèse tiré de ce bazar sont juste
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube
Ingénieur Industriel Chimie / Biochimie

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

21 févr. 2017, 11:36

salut,

Je vais dans le sens de Spols, a priori tes fonctions utilises des connexion à la base de données, il faut passer celle que tu crées au début en paramètre des fonctions pour qu'elle l'utilise.
Pourquoi avoir une seule connexion ?
simplement pour éviter de trimbaler partout dans le code la chaîne de connexion, les utilisateurs / mots de passe et autre options de connexion. Eviter cet éparpillement permet de ne pas avoir des infos différentes (tiens le mot de passe à changer, et puis zut j'en ai oublié 18 en fait ...) et pire des options de connexion qui ferais pas la même chose (auto commit ou pas, charset etc.)

il existe plusieurs solutions pour régler cela :
- Comme déjà indiqué : passer en paramètre l'instance de PDO déjà créé.
- Utiliser le motif de conception (pattern) singleton et éviter le paramètre contenant la connexion.

pour le reste du code effectivement c'est une hérésie d'avoir des noms de fichiers aussi peux parlant, voir autant de fichier sans aucune organisation est un gage d'ennuie pour l'avenir (lourdeur de maintenance principalement).

pour l'indentation un IDE ou un éditeur de texte avancée te réglera le problème ;)

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

23 févr. 2017, 21:14

oui lorsque je passe en paramètre l'instance de PDO le problème est résolu je vous remercie :)

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

24 févr. 2017, 09:00

de rien,

considère quand même le singleton :)


@+
Il en faut peu pour être heureux ......