Importation au format CSV, exclure première ligne
Je suis l'importation de mon csv bien maintenant sauf une chose, comment puis-je obtenir à l'importation pour ignorer les données de la première ligne? Les employés seront en téléchargeant le même format qui a les noms de colonne dans la première ligne.
if (isset($_POST['submit'])) {
if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
echo "<h1>" . "File " . $_FILES['filename']['name'] . " uploaded successfully." . "</h1>";
echo "<h2>Displaying contents:</h2>";
readfile($_FILES['filename']['tmp_name']);
}
//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$import = "INSERT into tictoc(employee,taskname,tasktime,sessiontime,sessionstart,sessionend,sessionnotes) values('" . $userinfo['first_name'] . " " . $userinfo['last_name'] . "','$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]')";
mysql_query($import) or die(mysql_error());
}
fclose($handle);
print "Import done";
}
Votre code est vulnérable à une injection SQL. Vous vraiment doit être à l'aide de les instructions préparées, dans lequel vous passez vos variables comme paramètres qui ne sont pas évaluées pour SQL. Si vous ne savez pas de quoi je parle, ou comment résoudre le problème, de lire l'histoire de Bobby Tables. En particulier, le téléchargement de fichier peut contenir SQL qui sera injecté dans votre
INSERT
déclaration.OriginalL'auteur Hector | 2012-09-04
Vous devez vous connecter pour publier un commentaire.
juste définir une variable
$i = 0
Puis insérez uniquement lorsque$i = 1
ou plusMais vous question est de savoir comment ignorer la première ligne. voir mise à jour de réponse
C'est en fait une mauvaise forme, à avoir un contrôle conditionnel à l'intérieur d'une boucle qui pourrait être traité par une simple lecture de l'un de ligne avant la boucle. Pas besoin de compteur ou d'une boucle sur l'état.
OriginalL'auteur bretterer
Vous pouvez simplement utiliser MySQL
LOAD DATA INFILE
commande, qui sera beaucoup plus rapide que l'analyse de la CSV en PHP, la construction d'unINSERT
, pour chaque dossier, de le présenter comme une chaîne de caractères pour MySQL et ayant MySQL analyser dit chaîne de SQL (au risque d'injection SQL):Utiliser PDO:
Utiliser le
LOCAL
modificateur.OriginalL'auteur eggyal
peut-être que vous pouvez l'utiliser de cette façon, si vous le souhaitez:
OriginalL'auteur bungdito
Pas de variable nécessaires. Il est beaucoup plus simple que cela. Voici une solution qui demande le moins de code étranger, et fonctionne très bien. Essayez de mettre:
Avant ta boucle while() qui saisit les données au format CSV. Qui attrape les en-têtes, mais leur laisse d'être inséré dans la base de données. Une fois le début de la boucle while, la première ligne a déjà été retourné laissant ainsi de la base de données mysql insert. Sur le dessus de cela, il apparaît que les en-têtes ont besoin, et si cela résout.
Donc en fin de compte,
OriginalL'auteur J-J
Vous pouvez essayer ceci:
OriginalL'auteur Moe Tsao
J'ai appliquer le présent code et il est testé à code. Je pense qu'il est très utiliser plein
Vous devez suivre certaines règles:-
1.votre fichier csv selon la base de données nom de la table (ex: base de données nom de la table puis les utilisateurs csv doivent être des utilisateurs.csv)
2.Votre fichier csv de la première ligne doit être de la table db champs nom (ex: Id, nom, etc) après le début de votre entrée de données
3.vous pouvez télécharger de la source de données de la classe à partir de :- http://code.google.com/p/php-csv-parser/ parce que j'ai besoin ci-dessous le code: require_once 'CSV/DataSource.php';
OriginalL'auteur Abid Hussain
Déclarer une variable avant de
while
bouclepuis dans
while
boucle de mettre cette conditionOriginalL'auteur mohitkantgupta
}
OriginalL'auteur Ibrahim