Bonjour,
je suis entrain d'essayer de récupérer un fichier csv pour mettre a jour une table de ma base de données, j'arrive a lire le fichier mais j'ai un soucis pour faire le test pour savoir si l'enregistrement existe déjà( je fais un SELECT COUNT(*)) mais il me retourne cette erreur et je ne comprends pas pourquoi?
merci de votre aide par avance
Gilles
voici mon code:
<?php
include './lib/includes.php';
// définition des variables
$filename = './immat.csv';
// fonction lecture du fichier
function read_csv($filename)
{
// ouverture du fichier
$FILE=fopen($filename,"r");
// lire ligne par ligne et couper colonne par colonne
while ($ARRAY]=fgetcsv($FILE,1024,";"));
// fermer le fichier
fclose($FILE) ;
// effacer la dernière ligne
array_pop($ARRAY);
// renvoi le tableau
return $ARRAY ;
}
$data = read_csv($filename);
// requête SQL qui compte le nombre total d'enregistrements dans la table et qui récupère tous les enregistrements
$limite = sizeof($data) ;
for($i=0;$i<$limite;$i++){
if ($i > 1){
$select = $db->query("SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='$data$i][1]'");
var_dump($select);
die();
$rows=$select->fetch();
var_dump($rows);
die();
if(($rows->verif_chassis)>0){
setFlash("Le numero de contrat existe déja !!!", 'danger');
header('Location:order_edit.php');
die();
}
}
}
?>
c'est bon maintenant,
if( $select->fetch()->verif_chassis < 1 ){
echo "existe pas.";
} else {
echo "existe déjà!";
}
voilà
foreach ( array_slice( $data, 1 ) as $i => $line )
Bonjour Vallyan,
comme un gros bourin j'ai oublié de mettre le message d'erreur!!
le voici:
( ! ) Notice: Array to string conversion in C:\wamp\www\portail\import3.php on line 28
Call Stack
1 0.0006 260544 {main}( ) ..\import3.php:0
object(PDOStatement)[3]
public 'queryString' => string 'SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='Array[1]'' (length=72)
je t explique ce que je veux faire:
j ai un fichier csv que je veux parcourir et faire une requete qui va verifier si le chassis de la ligne du csv est deja presente dans ma table vehic_tmp, si l'enregistrement est present je fais une mise a jour de certaine donnees sinon je fait un insert de la ligne.
mais voila pour le moment ou je reste bloqué, merci de votre aide.
Gilles
l'erreur 'Array to string conversion', c'est que tu veux mettre un tableau dans une chaine de caractère. Il semble que dans ton cas ce soit $data$i][1] qui est un array.
Fais un var_dump($data), pour voir ce que ca donne.
Voila le var_dump($data)
array (size=21)
0 =>
array (size=2)
0 => string 'Immat' (length=5)
1 => string 'Chassis' (length=7)
1 =>
array (size=2)
0 => string 'AE998LV' (length=7)
1 => string 'JTDKG18C00N299517' (length=17)
2 =>
array (size=2)
0 => string 'AE660LT' (length=7)
1 => string 'JTDKG18C00N300746' (length=17)
3 =>
array (size=2)
0 => string 'AE094RY' (length=7)
1 => string 'JTDKG18C00N303114' (length=17)
Bon, c'est bizarre ton truc, je vois pas bien ou est le problème puisque $data a l'air OK.
Je suggère que tu laisses tomber la partie bdd pur le moment, et que tu fasses simplement un echo du chassis, en indiquant l'indice de la ligne de ton fichier csv (enfin de $data plutot).
Quelque chose comme ca:
$data = read_csv($filename); // Ca tu l'as déja, change ce qui est en dessous:
foreach ( $data as $i => $line ) {
echo ("ligne " . $i . " : chassis # " . $line[1] . "<br>");
}
die();
De cette facon tu verra si c'est une ligne en particulier qui merdouille, et le cas échéant laquelle c'est.
L'exemple que Vallyan a donné, je pense que c'est beaucoup mieux vu que tu veux parcourir tous les éléments de ton tableau. essaies avec le foreach.
Voila ce que cela donne avec le code de Vallyan:
ligne 0 : chassis # Chassis
ligne 1 : chassis # JTDKG18C00N299517
ligne 2 : chassis # JTDKG18C00N300746
ligne 3 : chassis # JTDKG18C00N303114
ligne 4 : chassis # JTDKG18C00N336534
ligne 5 : chassis # JTDKG18C00N341412
ligne 6 : chassis # JTDKG18C00N344004
ligne 7 : chassis # JTDKG18C10N301324
ligne 8 : chassis # JTDKG18C10N301338
ligne 9 : chassis # JTDKG18C10N301968
ligne 10 : chassis # JTDKG18C10N334064
ligne 11 : chassis # JTDKG18C10N336493
ligne 12 : chassis # JTDKG18C10N337160
ligne 13 : chassis # JTDKG18C20N334803
ligne 14 : chassis # JTDKG18C30N299916
ligne 15 : chassis # JTDKG18C40N299309
ligne 16 : chassis # JTDKG18C40N300295
ligne 17 : chassis # JTDKG18C40N301642
ligne 18 : chassis # JTDKG18C40N302659
ligne 19 : chassis # JTDKG18C40N345690
ligne 20 : chassis # JTDKG18C50N300905
$data = read_csv($filename);
foreach ( $data as $i => $line ) {
$select = $db->query("SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='". $line[1] ."'");
var_dump($select);
}
die();
Qu'est ce ça donne?
voila le résultat:
object(PDOStatement)[3]
public 'queryString' => string 'SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='Chassis'' (length=71)
object(PDOStatement)[4]
public 'queryString' => string 'SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='JTDKG18C00N299517'' (length=81)
object(PDOStatement)[3]
public 'queryString' => string 'SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='JTDKG18C00N300746'' (length=81)
object(PDOStatement)[4]
public 'queryString' => string 'SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='JTDKG18C00N303114'' (length=81)
object(PDOStatement)[3]
public 'queryString' => string 'SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='JTDKG18C00N336534'' (length=81)
Ah, j'ai oublié de récupérer le résultat de la requête
$select = $db->query("SELECT COUNT(*) AS verif_chassis FROM vehic_tmp WHERE chassis='". $line[1] ."'");
var_dump($select->fetch());
voila avec select->fetch
object(stdClass)[4]
public 'verif_chassis' => string '0' (length=1)
object(stdClass)[3]
public 'verif_chassis' => string '1' (length=1)
object(stdClass)[4]
public 'verif_chassis' => string '1' (length=1)
object(stdClass)[3]
public 'verif_chassis' => string '1' (length=1)
.....
merci RedaElkhayat et Vallyan,
je vais maintenant gerer la mise à jour ou l'entrée des differentes lignes.
autre petit soucis: je fais comment pour faire sauter la ligne des titres de mon csv?
gilles