Wat is hier fout?
Ik ben vrij nieuw op gebied van PHP. Ik volg een cursus mbv het boek:
PHP5 en MySQL van Academic Service. Ik ben voorbeelden aan het testen.
Helaas kom ik foutmeldingen tegen, terwijl ik letterlijk het vb over tik.
Hier is de code:
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
80
81
82
83
84
85
86
87
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
80
81
82
83
84
85
86
87
<?php
// Open de verbinding met de database
mysql_connect("localhost", "user", "")
or die("Failure to communicate with database");
mysql_select_db("test");
if (isset($_POST['submit'])) {
// Maak de gegevens op
$comment_id = $_POST['comment_id'];
$comment_header = $_POST['comment_header'];
$as_comment_header = addslashes($comment_header);
$comment = $_POST['comment'];
$as_comment = addslashes($_POST['comment']);
//Werk de waarden bij
$query = "UPDATE comments
SET comment_header = '$as_comment_header',
comment = '$as_comment'
WHERE ID = $comment_id";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$succes_msg = '<p>Your comment has been updated.</p>';
} else {
error_log(mysql_error());
$succes_msg = '<p>Something went wrong.</p>';
}
} else {
// Haal de commentaarkop en het commentaar op
$comment_id = $_GET['comment_id']; // de regel levert een foutmelding op
//$comment_id = 2; // hier gaat het wel goed
$query = "SELECT
comment_header, comment
FROM
comments
WHERE ID
= $comment_id";
$result = mysql_query($query);
$comment_arr = mysql_fetch_array($result);
$comment_header = stripslashes($comment_arr[0]);
$comment = stripslashes($comment_arr[1]);
// Onderstaande regel toegevoegd, om foutmelding te voorkomen.
// Hoort niet in thuis in het oorspronkelijke script.
$succes_msg = '<p>Pas de onderstaande tekst aan.</p>';
}
$thispage = $_SERVER['PHP_SELF']; // Dit is nodig voor heredoc
$form_page = <<< EOFORMPAGE
<style type="text/css">
<!--
body, p {color: black; font-family: verdana;
font-size: 10pt}
h1 {color: black; font-family: arial; font-size: 12pt}
-->
</style>
</head>
<body>
<table border=0 cellpadding=10 width=100%>
<tr>
<td bgcolor="#f0f8ff" align=center valign=top width=17%>
</td>
<td bgcolor="#ffffff" align=center valign=top width=83%>
<h1>Comment edit</h1>
$succes_msg
<form method="post" action="$thispage">
<input type="text" size="40" name="comment_header"
value="$comment_header"><br><br>
<textarea name="comment" rows=10 cols=50>$comment</textarea>
<br><br>
<input type="hidden" name="comment_id" value="$comment_id">
<input type="submit" name="submit" value="submit">
</form>
</td>
</tr>
</table>
</body>
</html>
EOFORMPAGE;
echo $form_page;
?>
// Open de verbinding met de database
mysql_connect("localhost", "user", "")
or die("Failure to communicate with database");
mysql_select_db("test");
if (isset($_POST['submit'])) {
// Maak de gegevens op
$comment_id = $_POST['comment_id'];
$comment_header = $_POST['comment_header'];
$as_comment_header = addslashes($comment_header);
$comment = $_POST['comment'];
$as_comment = addslashes($_POST['comment']);
//Werk de waarden bij
$query = "UPDATE comments
SET comment_header = '$as_comment_header',
comment = '$as_comment'
WHERE ID = $comment_id";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$succes_msg = '<p>Your comment has been updated.</p>';
} else {
error_log(mysql_error());
$succes_msg = '<p>Something went wrong.</p>';
}
} else {
// Haal de commentaarkop en het commentaar op
$comment_id = $_GET['comment_id']; // de regel levert een foutmelding op
//$comment_id = 2; // hier gaat het wel goed
$query = "SELECT
comment_header, comment
FROM
comments
WHERE ID
= $comment_id";
$result = mysql_query($query);
$comment_arr = mysql_fetch_array($result);
$comment_header = stripslashes($comment_arr[0]);
$comment = stripslashes($comment_arr[1]);
// Onderstaande regel toegevoegd, om foutmelding te voorkomen.
// Hoort niet in thuis in het oorspronkelijke script.
$succes_msg = '<p>Pas de onderstaande tekst aan.</p>';
}
$thispage = $_SERVER['PHP_SELF']; // Dit is nodig voor heredoc
$form_page = <<< EOFORMPAGE
<style type="text/css">
<!--
body, p {color: black; font-family: verdana;
font-size: 10pt}
h1 {color: black; font-family: arial; font-size: 12pt}
-->
</style>
</head>
<body>
<table border=0 cellpadding=10 width=100%>
<tr>
<td bgcolor="#f0f8ff" align=center valign=top width=17%>
</td>
<td bgcolor="#ffffff" align=center valign=top width=83%>
<h1>Comment edit</h1>
$succes_msg
<form method="post" action="$thispage">
<input type="text" size="40" name="comment_header"
value="$comment_header"><br><br>
<textarea name="comment" rows=10 cols=50>$comment</textarea>
<br><br>
<input type="hidden" name="comment_id" value="$comment_id">
<input type="submit" name="submit" value="submit">
</form>
</td>
</tr>
</table>
</body>
</html>
EOFORMPAGE;
echo $form_page;
?>
Deze regel levert een foutmelding op:
$comment_id = $_GET['comment_id'];
Als ik een waarde invul voor $comment_id bijv..:
$comment_id = 2;
..dan krijg ik geen foutmelding.
Dit zijn de foutmeldingen:
Notice: Undefined index: comment_id in C:\xxx\xxxx\comment_edit.php on line 35
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xxx\xxxx\comment_edit.php on line 48
Ik heb tevens deze regel toe moeten voegen om geen foutmelding te krijgen:
$succes_msg = '<p>Pas de onderstaande tekst aan.</p>';
Wie kan mij helpen?
Met vriendelijke groet,
Jos de Vries
Gewijzigd op 15/08/2011 14:09:23 door Jos de Vries
Bedankt voor je snelle reactie. Ik zie nog niets in de kleurtjes.
Kun je iets meer aangeven?
Met vriendelijke groet,
Jos de Vries
dus:
http://www.google.nl/pagina.html?comment_id=2
Je kunt deze error voorkomen door te checken of hij bestaat dmv de empty()-functie. Als deze true retourneert, dan kun je de variabele een standaard waarde geven. Wil je hier verder in gaan, dan kun je zelfs met de functie is_numeric() kijken of het een getal is.
Als ik als achtervoegsel "?comment_id=2" gebruik werkt het inderdaad.
Maar het is de bedoeling, dat de ID uit de database wordt gehaald en
dat ik die niet zelf op geef. Daar loopt het script op vast.
Vandaar dat ik die regel "$comment_id = 2;" erin heb gezet om te testen
of het dan wel werkt.
Hoe kan ik dus zorgen dat de ID uit de db komt?
mvg, Jos
Toevoeging op 15/08/2011 15:40:43:
Ik heb de code inmiddels aangepast. En deze regels toegevoegd:
// Gegevens uit de DB halen
$query = "SELECT ID, comment_header, comment FROM comments";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
$comment_id = $row['ID'];
}
De code ziet er nu zo uit:
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
80
81
82
83
84
85
86
87
88
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
80
81
82
83
84
85
86
87
88
<?php
// Open de verbinding met de database
mysql_connect("localhost", "user", "")
or die("Failure to communicate with database");
mysql_select_db("test");
if (isset($_POST['submit'])) {
// Maak de gegevens op
$comment_id = $_POST['comment_id'];
$comment_header = $_POST['comment_header'];
$as_comment_header = addslashes($comment_header);
$comment = $_POST['comment'];
$as_comment = addslashes($_POST['comment']);
//Werk de waarden bij
$query = "UPDATE comments
SET comment_header = '$as_comment_header',
comment = '$as_comment'
WHERE ID = $comment_id";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$succes_msg = '<p>Your comment has been updated.</p>';
} else {
error_log(mysql_error());
$succes_msg = '<p>Something went wrong.</p>';
}
} else {
// Haal de commentaarkop en het commentaar op
$query = "SELECT ID, comment_header, comment FROM comments";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
$comment_id = $row['ID'];
}
$query = "SELECT
comment_header, comment
FROM
comments
WHERE ID
= $comment_id";
$result = mysql_query($query);
$comment_arr = mysql_fetch_array($result);
$comment_header = stripslashes($comment_arr[0]);
$comment = stripslashes($comment_arr[1]);
$succes_msg = '<p>Pas de onderstaande tekst aan.</p>';
}
$thispage = $_SERVER['PHP_SELF']; // Dit is nodig voor heredoc
$form_page = <<< EOFORMPAGE
<style type="text/css">
<!--
body, p {color: black; font-family: verdana;
font-size: 10pt}
h1 {color: black; font-family: arial; font-size: 12pt}
-->
</style>
</head>
<body>
<table border=0 cellpadding=10 width=100%>
<tr>
<td bgcolor="#f0f8ff" align=center valign=top width=17%>
</td>
<td bgcolor="#ffffff" align=center valign=top width=83%>
<h1>Comment edit</h1>
$succes_msg
<form method="post" action="$thispage">
<input type="text" size="40" name="comment_header"
value="$comment_header"><br><br>
<textarea name="comment" rows=10 cols=50>$comment</textarea>
<br><br>
<input type="hidden" name="comment_id" value="$comment_id">
<input type="submit" name="submit" value="submit">
</form>
</td>
</tr>
</table>
</body>
</html>
EOFORMPAGE;
echo $form_page;
?>
// Open de verbinding met de database
mysql_connect("localhost", "user", "")
or die("Failure to communicate with database");
mysql_select_db("test");
if (isset($_POST['submit'])) {
// Maak de gegevens op
$comment_id = $_POST['comment_id'];
$comment_header = $_POST['comment_header'];
$as_comment_header = addslashes($comment_header);
$comment = $_POST['comment'];
$as_comment = addslashes($_POST['comment']);
//Werk de waarden bij
$query = "UPDATE comments
SET comment_header = '$as_comment_header',
comment = '$as_comment'
WHERE ID = $comment_id";
$result = mysql_query($query);
if (mysql_affected_rows() == 1) {
$succes_msg = '<p>Your comment has been updated.</p>';
} else {
error_log(mysql_error());
$succes_msg = '<p>Something went wrong.</p>';
}
} else {
// Haal de commentaarkop en het commentaar op
$query = "SELECT ID, comment_header, comment FROM comments";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
$comment_id = $row['ID'];
}
$query = "SELECT
comment_header, comment
FROM
comments
WHERE ID
= $comment_id";
$result = mysql_query($query);
$comment_arr = mysql_fetch_array($result);
$comment_header = stripslashes($comment_arr[0]);
$comment = stripslashes($comment_arr[1]);
$succes_msg = '<p>Pas de onderstaande tekst aan.</p>';
}
$thispage = $_SERVER['PHP_SELF']; // Dit is nodig voor heredoc
$form_page = <<< EOFORMPAGE
<style type="text/css">
<!--
body, p {color: black; font-family: verdana;
font-size: 10pt}
h1 {color: black; font-family: arial; font-size: 12pt}
-->
</style>
</head>
<body>
<table border=0 cellpadding=10 width=100%>
<tr>
<td bgcolor="#f0f8ff" align=center valign=top width=17%>
</td>
<td bgcolor="#ffffff" align=center valign=top width=83%>
<h1>Comment edit</h1>
$succes_msg
<form method="post" action="$thispage">
<input type="text" size="40" name="comment_header"
value="$comment_header"><br><br>
<textarea name="comment" rows=10 cols=50>$comment</textarea>
<br><br>
<input type="hidden" name="comment_id" value="$comment_id">
<input type="submit" name="submit" value="submit">
</form>
</td>
</tr>
</table>
</body>
</html>
EOFORMPAGE;
echo $form_page;
?>
Ik weet niet of dit de ideale oplossing is, maar ik krijg in ieder geval
geen foutmelding meer en het script doet wat het moet doen.
Ik ben er nog niet achter, waarom deze regel niet werkt:
$comment_id = $_GET['comment_id'];
mvg, Jos