[PHP] Het importeren en updaten van een CSV bestand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Diversity
  • Registratie: Maart 2009
  • Laatst online: 17-09 17:05
Geachte tweakers,

Ik ben bezig met een schoolproject om een digitaal portfolio in elkaar te schroeven en daarvoor gebruik ik een optie voor de beheerder om een CSV lijst te kunnen importeren. Echter loop ik ergens tegenaan wanneer ik de CSV document er voor de 2de keer doorheen haal om te updaten. Ik hoop dat jullie mij verder kunnen helpen.

De code is als volgt:

PHP: filename
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
57
58
59
60
61
<?php
/**
 * @author Sander
 * @copyright 2009
 */
session_start();
include_once("../config.php");

function convertCSVtoArray($file, $delimiter) // met headers
{
   $result = Array();
   $size = filesize($file) +1;
   $file = fopen($file, 'r');
   $keys = fgetcsv($file, $size, $delimiter);
   while ($row = fgetcsv($file, $size, $delimiter))
   {
       for($i = 0; $i < count($row); $i++)
       {
           if(array_key_exists($i, $keys))
           {
               $row[$keys[$i]] = $row[$i];
           }
       }
       $result[] = $row;
   }
   fclose($file);
return $result;
}
/*------------------------------------------------------------------------------*/

//$infile=$_POST['infile'];
$infile=( $_FILES['infile']['tmp_name']);
$data = convertCSVtoArray($infile , ";");
?>

<?php for($i = 0; $i < sizeof($data); $i++){ ?>
<?php
$sql = "SELECT * FROM tbl_gebruikers WHERE gebruikersnaam = '".$data[$i]['leerlingnummer']."'";
$result = mysql_query($sql) or die(mysql_error());
$num_rows = mysql_num_rows($result);

if($num_rows==1){
    $sqlUpdate = "UPDATE tbl_gebruikers SET voornaam='".$data[$i]['voornaam']."', tussenvoegsel='".$data[$i]['tussenvoegsel']."', achternaam='".$data[$i]['achternaam']."',niveau='".$data[$i]['niveau']."'oudernummer='".$data[$i]['oudernummer']."' WHERE gebruikersnaam='".$data[$i]['leerlingnummer']."'";
    mysql_query($sqlUpdate) or die(mysql_error());
echo "Record ".$data[$i]['leerlingnummer']." ".$data[$i]['voornaam']." ".$data[$i]['tussenvoegsel']." ".$data[$i]['achternaam']." ".$data[$i]['niveau']." ".$data[$i]['oudernummer']." succesvol geupdate!<br>";
}else{
    $sqlInsert="INSERT INTO tbl_ouders (oudernummer) VALUES ('".$data[$i]['leerlingnummer']."')";
    mysql_query($sqlInsert) or die(mysql_error());

    $sqlInsert2="INSERT INTO tbl_gebruikers (gebruikersnaam,wachtwoord,gebruikersrol,voornaam,tussenvoegsel,achternaam,niveau,oudernummer)
    VALUES ('".$data[$i]['leerlingnummer']."','welkom01','leerling','".$data[$i]['voornaam']."','".$data[$i]['tussenvoegsel']."','".$data[$i]['achternaam']."',
    '".$data[$i]['niveau']."','".$data[$i]['leerlingnummer']."')";
    mysql_query($sqlInsert2) or die(mysql_error());
    echo "Record ".$data[$i]['gebruikersnaam']." ".$data[$i]['voornaam']." ".$data[$i]['tussenvoegsel']." ".$data[$i]['achternaam']." ".$data[$i]['niveau']." ".$data[$i]['oudernummer']." succesvol toegevoegd!<br>";
}


?>
<?php } ?>

 


De foutmelding die ik krijg als ik de lijst wil updaten is:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'oudernummer='60742' WHERE gebruikersnaam='60742'' at line 1

De CSV file structuur is als volgt:
leerlingnummer, voornaam, tussenvoegsel, achternaam, niveau, oudernummer
68794 - jaap - de - groot - 4 - 68794

Misschien is het een aardig lulig foutje, of ik zie het gewoon even niet maar dat kan komen omdat ik elke dag er 10 uur aan werk, mijn programmeer niveau is dan ook nog niet zo best.
Ohja ik werk op een lokale windows machine met xampp, misschien is dat nog belangrijk voor iets :P

Met vriendelijke groet,
Sander

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Debuggen: Hoe doe ik dat?
Echo je query eens i.p.v. hem uit te voeren?

Kijk eens naar het stukje (en net ervoor) waar oudernummer in voorkomt, het staat notabene létterlijk in de foutmelding ;)

Overigens, je escaped geen waardes ;) Je queries zullen ook op hun bek gaan op namen waar een apostrof in voorkomt.

[ Voor 61% gewijzigd door RobIII op 23-10-2009 21:57 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Diversity
  • Registratie: Maart 2009
  • Laatst online: 17-09 17:05
Haha bedankt (leuke strip). Maar dit is mijn aller eerste applicatie die ik maak dus gelukkig zijn ze nog niet zo heel streng :P. Ik zie idd dat er iets niet goed zit met die oudernummer maar als ik die weizig of iets dergelijks krijgt iedereen dezelfde naam na de update :P. misschien moet ik ook maar even kappen voor vandaag, zie het verschil niet meer tussen haken en puntjes en komma's :P

Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Je bent een komma in je query vergeten

spoiler:
die voor de ordernummer=, om precies te zijn

offtopic:
en ik ben te traag
oudernummer. Traag én scheel. T'is wat :+
offtopic:
ik snapte dat ordernummer ook al niet. geen wonder :')

[ Voor 99% gewijzigd door ValHallASW op 23-10-2009 23:56 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Diversity schreef op vrijdag 23 oktober 2009 @ 22:02:
Haha bedankt (leuke strip). Maar dit is mijn aller eerste applicatie die ik maak dus gelukkig zijn ze nog niet zo heel streng :P
Maar ik wel :+ :P
Zorg gewoon dat je dit meteen vanaf de eerste minuut jezelf aanleert (input sanitizen, escapen); voor je het weet word je lui hierin en ga je 't met regelmaat vergeten of achterwege laten en ik kan je op een briefje geven dat 't je vandaag of morgen terugkomt om je op je smoelwerk te meppen :P
Diversity schreef op vrijdag 23 oktober 2009 @ 22:02:Ik zie idd dat er iets niet goed zit met die oudernummer maar als ik die weizig of iets dergelijks krijgt iedereen dezelfde naam na de update :P
Daarom zei ik ook: echo je query eens i.p.v. hem uit te voeren. Dan zie je geheid het probleem (er mist een komma)
ValHallASW schreef op vrijdag 23 oktober 2009 @ 22:04:
spoiler:
die voor de ordernummer=, om precies te zijn
oudernummer. Traag én scheel. T'is wat :+

[ Voor 10% gewijzigd door RobIII op 23-10-2009 22:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Diversity
  • Registratie: Maart 2009
  • Laatst online: 17-09 17:05
lol, soms is de fout ook te simpel ook he, wordt je toch moe van :P. Anyway hardstikke bedankt ik durf te wedden dat ik nog uren aan het zoeken was geweest om die komma te vinden. Ik kijk morgen wel even om de boel te beveiligen. Ik dank u zeer een prettig weekend gewenst heren!

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Heb je stiekem iets gesnoept Rob, wat een melige bui :D

Ik vind je manier van data inlezen uit de csv ook veel complexer dan nodig :?

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Diversity schreef op vrijdag 23 oktober 2009 @ 22:11:
ik durf te wedden dat ik nog uren aan het zoeken was geweest om die komma te vinden
Daarom moet je leren debuggen. Dat is minstens zo belangrijk als het daadwerkelijke programmeren. Sterker: het gaat hand in hand en is gewoon onderdeel van 't proces. Leer je niet debuggen dan blijf je uren en uren verkwisten aan je nutteloos blindstaren op 't verkeerde punt.
Cartman! schreef op vrijdag 23 oktober 2009 @ 22:17:
Heb je stiekem iets gesnoept Rob, wat een melige bui :D
:D Nee, niets gesnoept. Frietje gehad en een Cola op. Verder doe ik niet aan 'melige snoepjes' maar ik heb wel zo nu en dan gewoon goeie zin. Geniet er maar van want meestal duurt 't niet lang :+ Dan is 't weer: "Zoek dekking!" :P

[ Voor 29% gewijzigd door RobIII op 23-10-2009 22:20 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Zie je me genieten? :) :) :)

edit: t weer geniet niet echt mee alleen <---

[ Voor 46% gewijzigd door Cartman! op 23-10-2009 22:33 ]

Pagina: 1