Bonjour,
Voici des semaine que je travaille sur un vieux script qui me permet d'importer des fichiers csv dans mes tables .
J'avais récupérer ce script sur internet et adapté pour mon cas perso.
Je changé de version php pour passer à la 7.3 en sachant que je devrais mettre à jour ce script.
J'ai réussi avec un peut d'aide de Julp pour ne pas le nommer lol. je le remercie encore au passage.
Je bloque sur la requête d'insertion.
Voici les fonctions qui fonction sur ancienne version de php
et l'ancien bout de code que je n'arrive pas à modifier
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 <? function connecter(){ // ouverture de connection include('config.inc.php'); $connexion = mysql_connect($host, $user, $pass)or die('Erreur SQL : '.mysql_error()); $choix_base = mysql_select_db($bdd, $connexion)or die('Erreur SQL : '.mysql_error()); } function deconnecter(){ // fermeture de connection en cours mysql_close(); } function requette($str_query, $connect=1){ if ($connect==1){connecter();} // si connect =1 on se connect $resultat = mysql_query($str_query)or die('Erreur SQL : '.mysql_error()); if ($connect==1){deconnecter();} // si connect =1 on se deconnect return $resultat; } function ajouter($bd_table, $str_champs_valeurs, $connect = 1){ $i=0; $champs=""; $valeurs=""; if ($connect==1){connecter();} // si connect =1 on se connect $resultat = split("#", $str_champs_valeurs); // decoupage ds le tableau sous forme: 'nom_de_chapmp=text a insere' for ($i = 0; $i<sizeof($resultat); $i++){ // boucle - parcourir tableau $pos=strpos($resultat[$i],"=") ; // on recupere la position de carractaire de decoupage $champs.=substr($resultat[$i], 0, $pos) . ", "; // on decoupe et stock des champs sous forme: 'champ1, champ2, ...' $valeurs.="'".substr($resultat[$i], $pos+1,strlen($resultat[$i])- $pos+1 )."', "; // sous forme: "'val1', 'val2', ..." } $champs=substr($champs,0,sizeof($valeurs)-3); // il faut enleve dernier - ", " $valeurs=substr($valeurs,0,sizeof($valeurs)-3); // il faut enleve dernier - ", " $str_query="INSERT INTO ".$bd_table."(".$champs.") VALUES (".$valeurs.")"; //construction de query $resultat = requette($str_query ,0); // envoi de query if ($connect==1){deconnecter();} // si connect =1 on se deconnect return $resultat; } //fonction qui verrifie l'existence d'un libelé dans un champ de la bdd // ex verif_libelle ("contact", "nom", "toto"); function verif_exist($table, $champ, $exist, $connect=1){ if ($connect==1){connecter();} // si connect =1 on se connect $resultat = mysql_query("select * from ".$table." where ".$champ." ='".$exist."'")or die('Erreur SQL : '.mysql_error()); $nb_result_e = mysql_num_rows($resultat); if ($nb_result_e > 0){ return 1; }else { return 0; } if ($connect==1){deconnecter();} // si connect =1 on se deconnect } ?>
Et voici comme j'ai modifier les fonctions
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 <?php function requette_avec_erreur($str_query, $connect=1){ if ($connect==1){connecter();} // si connect =1 on se connect $resultat = mysql_query($str_query); if ($connect==1){deconnecter();} // si connect =1 on se deconnect if ($resultat) { return $resultat; } else { return 0; //erreur(3); //si on veux renvoyer ? une action pr?cise en cas d'erreur } } echo '<br /><strong>import en cours</strong> <br /><br />'; $erreur_sql = ""; //on initialise le journal des erreurs //insert dans la base echo 'La ligne 1 du fichier CSV correspond à la définition des champs. <br />'; connecter(); for ($u=1; $u<$numligneval; $u++) { if ($valeurs[$u] != ""){ $req = "INSERT INTO $table $colones VALUES ".utf8_encode($valeurs[$u])." "; //echo "<br>".$req.'<br />'; if (requette_avec_erreur($req,0)) { echo 'ajout de la ligne '.($u+1).' du fichier '.$name_file.'.<br />'; } else { $erreur_sql .= '<font color="red">ligne '.($u+1).' du fichier '.$name_file.' -> Erreur SQL '.mysql_errno().' : '.mysql_error().'</font><br>'; echo '<font color="red">ligne '.($u+1).' -> Erreur SQL</font><br />'; } } } deconnecter(); echo '<br /><strong>Fin de l\'import</strong><br /> '; // affich age des erreurs echo '<strong> JOURNAL DES ERREURS SQL</strong><br />'; if (!empty($erreur_sql)){ echo $erreur_sql; } else { echo 'Pas d\'erreur détectée lors de l\'import'; } ?>
et le bout de 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 <? function connecter(){ try { $bdd = new PDO('mysql:host=***;dbname=***;charset=utf8', '***', '***', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } } function deconnecter(){ unset($bdd); } function requette($str_query, $connect=1){ if ($connect==1){connecter();} $resultat->execute(); $str_query = $resultat->fetchAll(PDO::FETCH_ASSOC); if ($connect==1){deconnecter();} return $resultat; } function ajouter($bd_table, $str_champs_valeurs, $connect = 1){ $i=0; $champs=""; $valeurs=""; if ($connect==1){connecter();} $resultat = split("#", $str_champs_valeurs); // decoupage ds le tableau sous forme: 'nom_de_chapmp=text a insere' for ($i = 0; $i<sizeof($resultat); $i++){ // boucle - parcourir tableau $pos=strpos($resultat[$i],"=") ; // on recupere la position de carractaire de decoupage $champs.=substr($resultat[$i], 0, $pos) . ", "; // on decoupe et stock des champs sous forme: 'champ1, champ2, ...' $valeurs.="'".substr($resultat[$i], $pos+1,strlen($resultat[$i])- $pos+1 )."', "; // sous forme: "'val1', 'val2', ..." } $champs=substr($champs,0,sizeof($valeurs)-3); // il faut enleve dernier - ", " $valeurs=substr($valeurs,0,sizeof($valeurs)-3); // il faut enleve dernier - ", " $str_query = $bdd->query('INSERT INTO '.$bd_table.' ('.$champs.') VALUES ('.$valeurs.')'); //construction de query $resultat = requette($str_query ,0); // envoi de query if ($connect==1){deconnecter();} // si connect =1 on se deconnect return $resultat; } //fonction qui verrifie l'existence d'un libelé dans un champ de la bdd // ex verif_libelle ("contact", "nom", "toto"); function verif_exist($table, $champ, $exist, $connect=1){ if ($connect==1){connecter();} // si connect =1 on se connect $resultat = $bdd->query('SELECT * FROM '.$table.' WHERE '.$champ.'= '.$exist.''); $nb_result_e = $resultat->rowCount(); if ($nb_result_e > 0){ return 1; }else { return 0; } if ($connect==1){deconnecter();} // si connect =1 on se deconnect } ?>
Voici le message d"erreur
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 function requette_avec_erreur($str_query, $connect=1) { if ($connect==1){connecter();} // si connect =1 on se connect $resultat = $bdd->prepare($str_query); $resultat->execute(); $str_query = $resultat->fetchAll(PDO::FETCH_ASSOC); if ($connect==1){deconnecter();} // si connect =1 on se deconnect if ($resultat) return $resultat; else return 0; //erreur(3); //si on veux renvoyer ? une action pr?cise en cas d'erreur } echo '<br /><strong>import en cours</strong> <br /><br />'; $erreur_sql = ""; //on initialise le journal des erreurs //insert dans la base echo 'La ligne 1 du fichier CSV correspond à la définition des champs. <br />'; connecter(); for ($u=1; $u<$numligneval; $u++) { if ($valeurs[$u] != "") { $req = $bdd->query('INSERT INTO '.$table.' '.$colones.' VALUES '.utf8_encode($valeurs[$u]).''); $req = "INSERT INTO $table $colones VALUES ".utf8_encode($valeurs[$u])." "; //echo "<br>".$req.'<br />'; if (requette_avec_erreur($req,0)) { echo 'ajout de la ligne '.($u+1).' du fichier '.$name_file.'.<br />'; } else { $erreur_sql .= '<font color="red">ligne '.($u+1).' du fichier '.$name_file.'</font><br>'; echo '<font color="red">ligne '.($u+1).' -> Erreur SQL</font><br />'; } } } deconnecter(); echo '<br /><strong>Fin de l\'import</strong><br /> '; // affichage des erreurs echo '<strong> JOURNAL DES ERREURS SQL</strong><br />'; if (!empty($erreur_sql)) echo $erreur_sql; else echo 'Pas d\'erreur détectée lors de l\'import'; echo '<p> </p>';
Fatal error: Uncaught Error: Call to a member function prepare() on null in /home/dansleq/www/admin/import_csv.php:361 Stack trace: #0 /home/dansleq/www/admin/import_csv.php(381): requette_avec_erreur('INSERT INTO Lis...', 0) #1 /home/dansleq/www/admin/admin.php(81): include('/home/dansleq/w...') #2 {main} thrown in /home/dansleq/www/admin/import_csv.php on line 361
Merci beaucoup à tout ceux et celles qui voudrons bien m'aider à faire les modifications.
Partager