Undefined index:
Ik ben bezig met de settings pagina te maken voor een klein bestel scriptje, maar als ik nu de waarde van een (kortings) code wil veranderen geeft hij aan "
Notice: Undefined index: code in F:\Portable Apps\USBWebserver\root\bestel\settings_module.php on line 3"
settings.php
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
68
69
70
71
72
73
74
75
76
77
78
79
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
68
69
70
71
72
73
74
75
76
77
78
79
<?php
/*
****************
* SETTINGS.PHP *
****************
*/
session_start();
// Controleren of de bezoeker ingelogd is
if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] == false)
{
header('Refresh: 3; url=login.php');
echo '<font color="red">Je bent niet ingelogd.</font>';
exit();
}
if($_SESSION['rechten'] == "gebruiker"){
header('Refresh: 3; url=beveiligd.php');
echo '<font color="red">Je hebt geen ADMIN rechten!</font>';
exit();
}
$con = mysql_connect("localhost","***","***");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("bestel", $con);
$result = mysql_query("SELECT * FROM klantengroep ORDER BY korting");
echo "<h1>Settings</h1>";
echo "Hier kun je alle instellingen van het bestel script aanpassen.";
echo "<br></br>";
echo '<form method="post" action="settings_module.php">
<b>Kortings persentage aanpassen:</b>
<br>';
echo '<table border="0" width="100%"><tr><td>';
echo '<label for="code">Code: </label>';
echo "<select>";
while($row = mysql_fetch_array($result))
{
echo '<option id="code" name="code" value="code">' . $row['code'] .'</option>';
}
echo "</select></td>";
echo '<td><label for="percentage">Percentage:</label>
<input type="text" name="percentage" id="percentage" /></td></tr>
<tr><td colspan=2><br><b>Nieuwe code toevoegen:</b></td></tr>
<tr>
<td>
<label for="nieuwecode">Code:</label>
<input type="text" name="nieuwecode" id="nieuwecode" />
</td>
<td>
<label for="nieuwepercentage">Percentage:</label>
<input type="text" name="nieuwepercentage" id="nieuwepercentage" />
</td>
</tr>
</table>
<p>
<input type="submit" value="Opslaan" />
</p>';
'</form>';
echo "<br></br>";
mysql_close($con);
?>
/*
****************
* SETTINGS.PHP *
****************
*/
session_start();
// Controleren of de bezoeker ingelogd is
if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] == false)
{
header('Refresh: 3; url=login.php');
echo '<font color="red">Je bent niet ingelogd.</font>';
exit();
}
if($_SESSION['rechten'] == "gebruiker"){
header('Refresh: 3; url=beveiligd.php');
echo '<font color="red">Je hebt geen ADMIN rechten!</font>';
exit();
}
$con = mysql_connect("localhost","***","***");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("bestel", $con);
$result = mysql_query("SELECT * FROM klantengroep ORDER BY korting");
echo "<h1>Settings</h1>";
echo "Hier kun je alle instellingen van het bestel script aanpassen.";
echo "<br></br>";
echo '<form method="post" action="settings_module.php">
<b>Kortings persentage aanpassen:</b>
<br>';
echo '<table border="0" width="100%"><tr><td>';
echo '<label for="code">Code: </label>';
echo "<select>";
while($row = mysql_fetch_array($result))
{
echo '<option id="code" name="code" value="code">' . $row['code'] .'</option>';
}
echo "</select></td>";
echo '<td><label for="percentage">Percentage:</label>
<input type="text" name="percentage" id="percentage" /></td></tr>
<tr><td colspan=2><br><b>Nieuwe code toevoegen:</b></td></tr>
<tr>
<td>
<label for="nieuwecode">Code:</label>
<input type="text" name="nieuwecode" id="nieuwecode" />
</td>
<td>
<label for="nieuwepercentage">Percentage:</label>
<input type="text" name="nieuwepercentage" id="nieuwepercentage" />
</td>
</tr>
</table>
<p>
<input type="submit" value="Opslaan" />
</p>';
'</form>';
echo "<br></br>";
mysql_close($con);
?>
settings_module.php
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
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
<?php
$code = $_POST['code'];
$con = mysql_connect("localhost","root","usbw");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("bestel", $con);
$result = mysql_query("SELECT * FROM klantengroep
WHERE code='$code'");
$row = mysql_fetch_array($result);
if(!empty($_POST['code']) && !empty($_POST['percentage'])){
mysql_query("UPDATE klantengroep SET korting = '$_POST[percentage]'
WHERE code = '$_POST' AND korting = '$row[korting]'");}
if(!empty($_POST['nieuwecode']) && !empty($_POST['nieuwepercentage'])){
mysql_query("INSERT INTO klantengroep (code, korting)
VALUES ('$_POST[nieuwecode]', '$_POST[nieuwepercentage]')");}
mysql_close($con);
header('Refresh: 3; url=settings.php');
echo 'De settings zijn aangepast.';
?>
Ik heb $_POST['code'] gewoon die naam gegeven maar als ik hem oproep geeft hij aan dat hij niet bestaat wat is de fout?!
MVG
$code = $_POST['code'];
$con = mysql_connect("localhost","root","usbw");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("bestel", $con);
$result = mysql_query("SELECT * FROM klantengroep
WHERE code='$code'");
$row = mysql_fetch_array($result);
if(!empty($_POST['code']) && !empty($_POST['percentage'])){
mysql_query("UPDATE klantengroep SET korting = '$_POST[percentage]'
WHERE code = '$_POST' AND korting = '$row[korting]'");}
if(!empty($_POST['nieuwecode']) && !empty($_POST['nieuwepercentage'])){
mysql_query("INSERT INTO klantengroep (code, korting)
VALUES ('$_POST[nieuwecode]', '$_POST[nieuwepercentage]')");}
mysql_close($con);
header('Refresh: 3; url=settings.php');
echo 'De settings zijn aangepast.';
?>
Ik heb $_POST['code'] gewoon die naam gegeven maar als ik hem oproep geeft hij aan dat hij niet bestaat wat is de fout?!
MVG
En dit klopt niet:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
echo "<select>";
while($row = mysql_fetch_array($result))
{
echo '<option id="code" name="code" value="code">' . $row['code'] .'</option>';
}
echo "</select></td>";
while($row = mysql_fetch_array($result))
{
echo '<option id="code" name="code" value="code">' . $row['code'] .'</option>';
}
echo "</select></td>";
De name attribuut moet in de select tag staan en elke optie dient (in de meeste gevallen) een unieke waarde te bevatten.
Dus:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
echo '<select name="code" id="code">';
while($row = mysql_fetch_array($result))
{
echo '<option value="'.$row['code'].'">' . $row['code'] .'</option>';
}
echo "</select></td>";
while($row = mysql_fetch_array($result))
{
echo '<option value="'.$row['code'].'">' . $row['code'] .'</option>';
}
echo "</select></td>";
En in de ontwikkelingsfase is het wellicht handig om notices aan te zetten, maar tijdens de operationalisatie is het handiger om deze meldingen uit te zetten.
En bij het beter bekijken van je code doe je gigantisch veel fout:
- Let op mysql injecties (gebruik mysql_real_escape_string() ).
- $_POST variabele kan je niet direct in de database stoppen. Dit is een array die uitgelezen kan worden.
- Variabelen buiten quotes (de ene keer doe je het wel en de andere keer niet)
- Bouw foutafhandeling en andere controles in om geen onverwachte waarden te krijgen in je output / database
- mysql_close() is niet nodig, aangezien standaard de mysql connectie sluit wanneer de pagina is geladen.
Gewijzigd op 13/04/2011 14:07:54 door Arjan -
Arjan - op 13/04/2011 14:03:44:
Controleer altijd eerst of er een post request is gedaan met if($_SERVER['REQUEST_METHOD'] == 'POST') !!! GEDAAN!
En dit klopt niet:
De name attribuut moet in de select tag staan en elke optie dient (in de meeste gevallen) een unieke waarde te bevatten.
Dus:
GEDAAN, BEDANKT!
En in de ontwikkelingsfase is het wellicht handig om notices aan te zetten, maar tijdens de operationalisatie is het handiger om deze meldingen uit te zetten.
En bij het beter bekijken van je code doe je gigantisch veel fout:
- Let op mysql injecties (gebruik mysql_real_escape_string() ). HEB IK DAT OP DEZE MANIER GOED GEDAAN?
- $_POST variabele kan je niet direct in de database stoppen. Dit is een array die uitgelezen kan worden. WAT IK NOU HEB GEDAAN KAN DAT WEL? GEWOON VARIABELE VAN GEMAAKT
- Variabelen buiten quotes (de ene keer doe je het wel en de andere keer niet) WANNEER DOE IK HET NIET BUITEN HAAKJES DAN?
- Bouw foutafhandeling en andere controles in om geen onverwachte waarden te krijgen in je output / database ZOU IK NOG DOEN
- mysql_close() is niet nodig, aangezien standaard de mysql connectie sluit wanneer de pagina is geladen. VERWIJDERD
En dit klopt niet:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
echo "<select>";
while($row = mysql_fetch_array($result))
{
echo '<option id="code" name="code" value="code">' . $row['code'] .'</option>';
}
echo "</select></td>";
while($row = mysql_fetch_array($result))
{
echo '<option id="code" name="code" value="code">' . $row['code'] .'</option>';
}
echo "</select></td>";
De name attribuut moet in de select tag staan en elke optie dient (in de meeste gevallen) een unieke waarde te bevatten.
Dus:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
echo '<select name="code" id="code">';
while($row = mysql_fetch_array($result))
{
echo '<option value="'.$row['code'].'">' . $row['code'] .'</option>';
}
echo "</select></td>";
while($row = mysql_fetch_array($result))
{
echo '<option value="'.$row['code'].'">' . $row['code'] .'</option>';
}
echo "</select></td>";
GEDAAN, BEDANKT!
En in de ontwikkelingsfase is het wellicht handig om notices aan te zetten, maar tijdens de operationalisatie is het handiger om deze meldingen uit te zetten.
En bij het beter bekijken van je code doe je gigantisch veel fout:
- Let op mysql injecties (gebruik mysql_real_escape_string() ). HEB IK DAT OP DEZE MANIER GOED GEDAAN?
- $_POST variabele kan je niet direct in de database stoppen. Dit is een array die uitgelezen kan worden. WAT IK NOU HEB GEDAAN KAN DAT WEL? GEWOON VARIABELE VAN GEMAAKT
- Variabelen buiten quotes (de ene keer doe je het wel en de andere keer niet) WANNEER DOE IK HET NIET BUITEN HAAKJES DAN?
- Bouw foutafhandeling en andere controles in om geen onverwachte waarden te krijgen in je output / database ZOU IK NOG DOEN
- mysql_close() is niet nodig, aangezien standaard de mysql connectie sluit wanneer de pagina is geladen. VERWIJDERD
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
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
<?php
$code = $_POST['code'];
$code = stripslashes($code);
$code = mysql_real_escape_string($code);
$percentage = $_POST['percentage'];
$percentage = stripslashes($percentage);
$percentage = mysql_real_escape_string($percentage);
$nieuwecode = $_POST['nieuwecode'];
$nieuwecode = stripslashes($nieuwecode);
$nieuwecode = mysql_real_escape_string($nieuwecode);
$nieuwepercentage = $_POST['nieuwepercentage'];
$nieuwepercentage = stripslashes($nieuwepercentage);
$nieuwepercentage = mysql_real_escape_string($nieuwepercentage);
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$con = mysql_connect("localhost","root","usbw");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("bestel", $con);
$result = mysql_query("SELECT * FROM klantengroep
WHERE code='$code'");
$row = mysql_fetch_array($result);
$korting = $row['korting'];
$korting = stripslashes($korting);
$korting = mysql_real_escape_string($korting);
if(!empty($code) && !empty($percentage)){
mysql_query("UPDATE klantengroep SET korting = '$percentage]'
WHERE code = '$code' AND korting = '$korting'");}
if(!empty($nieuwecode) && !empty($nieuwepercentage)){
mysql_query("INSERT INTO klantengroep (code, korting)
VALUES ('$nieuwecode', '$nieuwepercentage')");}
header('Refresh: 3; url=settings.php');
echo 'De settings zijn aangepast.';
}
else{
header('Refresh: 3; url=settings.php');
echo "Je hebt niets ingevuld.";
exit();
}
?>
$code = $_POST['code'];
$code = stripslashes($code);
$code = mysql_real_escape_string($code);
$percentage = $_POST['percentage'];
$percentage = stripslashes($percentage);
$percentage = mysql_real_escape_string($percentage);
$nieuwecode = $_POST['nieuwecode'];
$nieuwecode = stripslashes($nieuwecode);
$nieuwecode = mysql_real_escape_string($nieuwecode);
$nieuwepercentage = $_POST['nieuwepercentage'];
$nieuwepercentage = stripslashes($nieuwepercentage);
$nieuwepercentage = mysql_real_escape_string($nieuwepercentage);
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$con = mysql_connect("localhost","root","usbw");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("bestel", $con);
$result = mysql_query("SELECT * FROM klantengroep
WHERE code='$code'");
$row = mysql_fetch_array($result);
$korting = $row['korting'];
$korting = stripslashes($korting);
$korting = mysql_real_escape_string($korting);
if(!empty($code) && !empty($percentage)){
mysql_query("UPDATE klantengroep SET korting = '$percentage]'
WHERE code = '$code' AND korting = '$korting'");}
if(!empty($nieuwecode) && !empty($nieuwepercentage)){
mysql_query("INSERT INTO klantengroep (code, korting)
VALUES ('$nieuwecode', '$nieuwepercentage')");}
header('Refresh: 3; url=settings.php');
echo 'De settings zijn aangepast.';
}
else{
header('Refresh: 3; url=settings.php');
echo "Je hebt niets ingevuld.";
exit();
}
?>
Bedankt voor je hulp!!
Code (php)
1
2
3
2
3
<?php
$result = mysql_query("SELECT * FROM klantengroep WHERE code='".mysql_real_escape_string($code)."'");
?>
$result = mysql_query("SELECT * FROM klantengroep WHERE code='".mysql_real_escape_string($code)."'");
?>
Zoals hierboven raad ik je aan direct in de queries een mysql_real_escape_string() om alle variabelen te zetten (behalve wanneer het een integer betreft en je die van te voren goed hebt gecontroleerd op niet toegestane karakters).
Wanneer magic_quotes uitstaat (dat mag ik hopen) niet meer gebruik maken van strip-/addslashes! Krijg je altijd gezeik mee.
Op regel 3 gebruik je reeds een POST-waarde terwijl je op regel 16 pas kijkt of er gePOST is. Niet echt logisch. Verder ontbreekt elke vorm van foutafhandeling voor de query's.