Undefined variable en undefined index
Code (php)
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
62
63
64
65
66
67
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
62
63
64
65
66
67
<?php
require_once "../conf.php";
//connection to the database
$mysqli = new mysqli($hostname, $username, $password, 'pdmklas');
if(mysqli_connect_errno())
trigger_error('Fout bij verbinding: '.$mysqli->error);
if ($_FILES['csv']['size'] > 0) {
//get the csv file
$file = $_FILES['csv']['tmp_name'];
$handle = fopen($file,"r");
/* change character set to utf8 */
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
}
//loop through the csv file and insert into database
do {
if ($data[0]) {
$naam=addslashes($data[2]) . ' ' . addslashes($data[3]) . ' ' . addslashes($data[4]);
$resultaat = $mysqli->query("INSERT INTO KLASSEN (klas, stamnummer, leerling) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".$naam."'
)
");
if ($resultaat == false)
echo "Query mislukt. Importeren: " . $mysqli->error;
}
} while ($data = fgetcsv($handle,1000,",","'"));
//
$mysqli->close();
//redirect
header('Location: ?success=1'); die;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Importeer klassenlijst</title>
</head>
<body>
[code]<?php if (!empty($_GET['success'])) { echo "<b>Bestand is geimporteerd.</b><br><br>"; } //generic success notice ?>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<h2>Selecteer bestand met leerling-namen:</h2> <br />
<input name="csv" type="file" id="csv" /> <br/><br/><br/>
<div align="center"><input type="submit" name="Submit" value="IMPORTEREN.." /> </div>
</form>
</body>
</html>
?>
require_once "../conf.php";
//connection to the database
$mysqli = new mysqli($hostname, $username, $password, 'pdmklas');
if(mysqli_connect_errno())
trigger_error('Fout bij verbinding: '.$mysqli->error);
if ($_FILES['csv']['size'] > 0) {
//get the csv file
$file = $_FILES['csv']['tmp_name'];
$handle = fopen($file,"r");
/* change character set to utf8 */
if (!$mysqli->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $mysqli->error);
}
//loop through the csv file and insert into database
do {
if ($data[0]) {
$naam=addslashes($data[2]) . ' ' . addslashes($data[3]) . ' ' . addslashes($data[4]);
$resultaat = $mysqli->query("INSERT INTO KLASSEN (klas, stamnummer, leerling) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".$naam."'
)
");
if ($resultaat == false)
echo "Query mislukt. Importeren: " . $mysqli->error;
}
} while ($data = fgetcsv($handle,1000,",","'"));
//
$mysqli->close();
//redirect
header('Location: ?success=1'); die;
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Importeer klassenlijst</title>
</head>
<body>
[code]<?php if (!empty($_GET['success'])) { echo "<b>Bestand is geimporteerd.</b><br><br>"; } //generic success notice ?>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<h2>Selecteer bestand met leerling-namen:</h2> <br />
<input name="csv" type="file" id="csv" /> <br/><br/><br/>
<div align="center"><input type="submit" name="Submit" value="IMPORTEREN.." /> </div>
</form>
</body>
</html>
?>
Dit werkt op zich prima maar krijg onderstaande meldingen in mijn log-file en die wil ik er graag nog uit hebben :D
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?
[Thu Aug 08 11:51:27 2013] [error] [client 192.168.1.2] PHP Notice: Undefined variable: data in /media/DATA-SCHIJF/TestW
eb/aoc_observatie/IMPORT/import_leerling.php on line 22, referer: http://pwserver/testweb/aoc_observatie/IMPORT/import_le
erling.php?success=1
[Thu Aug 08 11:51:27 2013] [error] [client 192.168.1.2] PHP Notice: Undefined index: csv in /media/DATA-SCHIJF/TestWeb/a
oc_observatie/IMPORT/import_leerling.php on line 9, referer: http://pwserver/testweb/aoc_observatie/IMPORT/import_leerlin
g.php?success=1
?>
[Thu Aug 08 11:51:27 2013] [error] [client 192.168.1.2] PHP Notice: Undefined variable: data in /media/DATA-SCHIJF/TestW
eb/aoc_observatie/IMPORT/import_leerling.php on line 22, referer: http://pwserver/testweb/aoc_observatie/IMPORT/import_le
erling.php?success=1
[Thu Aug 08 11:51:27 2013] [error] [client 192.168.1.2] PHP Notice: Undefined index: csv in /media/DATA-SCHIJF/TestWeb/a
oc_observatie/IMPORT/import_leerling.php on line 9, referer: http://pwserver/testweb/aoc_observatie/IMPORT/import_leerlin
g.php?success=1
?>
Heb bovenstaande ff in een php-identifier gehangen zodat het beter leesbaar is maar is natuurlijk in het echt geen php
Gewijzigd op 08/08/2013 11:59:49 door MArk Peters
De eerste iteratie zit je met een probleem.
Je wil weten of $data[0] een waarde heeft (die niet als false wordt geëvalueerd). Maar $data wordt pas aangemaakt op het einde an de eerste iteratie.
Een aantal dingen die je kan doen:
- een while in plaats van een do/while
------
Maar dan nog iets; dit geldt trouwens voor beide notice's:
Vooraleer je een variabele wil gebruiken, moet ze eerst bestaan.
Een voorbeeld
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
// niet doen!!
if($a > 5) { // hier bestaat $a nog niet. Het is dan ook compleet zinloos om te vragen of een niet-bestaande variabele groter is dan 5
...
}
$a = 7;
?>
// niet doen!!
if($a > 5) { // hier bestaat $a nog niet. Het is dan ook compleet zinloos om te vragen of een niet-bestaande variabele groter is dan 5
...
}
$a = 7;
?>
Weten of iets bestaat, doe je met isset().
bv zo:
Dan vraag je dus: "Als het bestaat; kijk dan of het groter is dan nul".
Snap je wat het probleem is, en wat je vanaf nu voor de rest van je leven zal doen wanneer je een notice ziet?
Gewijzigd op 08/08/2013 13:24:01 door Kris Peeters
Werkt nu perfect enne ik heb mijn lesje geleerd :D
Tja, als we gewoon zeggen: doe isset($variabele), komen ze vaak de volgende dag terug met exact het zelfde probleem, de volgende notice die ze krijgen.