Wat is hier fout?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jos de Vries

Jos de Vries

15/08/2011 14:07:33
Quote Anchor link
Dag allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
?>


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
 
PHP hulp

PHP hulp

25/12/2024 16:51:30
 
Gerhard l

gerhard l

15/08/2011 14:13:55
Quote Anchor link
Je titel.

ps: kijk naar de kleurtjes
Gewijzigd op 15/08/2011 14:14:29 door gerhard l
 
Jos de Vries

Jos de Vries

15/08/2011 14:46:37
Quote Anchor link
Hallo Gerhard,

Bedankt voor je snelle reactie. Ik zie nog niets in de kleurtjes.
Kun je iets meer aangeven?

Met vriendelijke groet,

Jos de Vries
 
Jacco Brandt

Jacco Brandt

15/08/2011 14:51:53
Quote Anchor link
Je stuurt geen comment_id mee. Probeer naar jouw site te gaan met als achtervoegsel ?comment_id=2
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.
 
Jos de Vries

Jos de Vries

15/08/2011 14:58:20
Quote Anchor link
Hallo Jacco,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
?>


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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.