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
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 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
<?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 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
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
}
?>
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
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>&nbsp;&nbsp;&nbsp;</p>';
Voici le message d"erreur
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.