Fout in $sql ?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sven Onbekend

Sven Onbekend

24/08/2009 23:23:00
Quote Anchor link
Het script dat ik geschreven hebt werkt, maar niet helemaal.

Hij zou de waarden die ik bij het bewerken veranderd heb, moeten updaten. Hij zegt wel dat ie het doet, maar doet het niet. Ik zie niet waar de fout zit, omdat het script gewoon draait.

Dit 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
<?php
  ...

  if(isset($_POST['submit'])) {
   // Wijzigingen uitvoeren
    $sql = "UPDATE gastenboek SET `naam` = '".$_POST['naam']."', `website` = '".$_POST['website']."', `email` = '".$_POST['mail']."', `zichtbaar` = '".$_POST['zichtbaar']."', `bericht` = '".$_POST['bericht']."' WHERE `id` = '".$_GET['bewerk']."'";
    $query = mysql_query($sql);
     if($query == TRUE) {
      echo "Het bericht is succesvol gewijzigd en opgeslagen.<br>\n  <a href='?pagina=edit_gastenboek'>&laquo; Terug naar 'Edit Gastenboek'</a>\n";
     }
else{
      echo mysql_error();
     }
 }
else{
  // Bericht bewerken
  $id = $_GET['bewerk'];

  $query = "SELECT * FROM gastenboek WHERE id='".$id."'";
  $r = mysql_query($query);  // Run the query.

  while ($row = mysql_fetch_array($r)) {
      $naam = $row['naam'];
      $ip = $row['ip'];
      $mail = $row['email'];
      $website = $row['website'];
      $zichtbaar = $row['zichtbaar'];
      $bericht = $row['bericht'];
?>

  <form method='POST' action='<?=$_SERVER['PHP_SELF']?>?pagina=edit_gastenboek&menuid=7&bewerk=<? echo $id; ?>'>
   <table border='0' cellspacing='0' class='text2'>
    <tr>
     <td>Naam:</td>
     <td><input type='text' name='naam' maxlength='50' size='30' value='<?=$naam?>'></td>
    </tr>
    <tr>
     <td>IP:</td>
     <td><? echo $ip ?></td>
    </tr>
    <tr>
     <td>E-mail:</td>
     <td><input type='text' name='email' maxlength='70' size='30' value='<?=$mail?>'></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
     <td valign='top' class='text1'><input type='checkbox' name='zichtbaar' value='<? if($zichtbaar == 1) { echo "1"; }else{ echo "0"; }?>'>&nbsp;<small>E-mailadres mag zichtbaar zijn in het gastenboek?</small></td>
    </tr>
    <tr>
     <td>Website:</td>
     <td><input type='text' name='website' maxlength='100' size='30' value='<?=$website?>'></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td valign='top'>Bericht:</td>
     <td><textarea name='bericht' cols='55' rows='10'><? echo stripslashes($bericht); ?></textarea></td>
    </tr>
    <tr>
     <td>&nbsp;</td>
     <td>&nbsp;</td>
    </tr>
    <tr>
     <td>&nbsp;</td>
     <td><input type="hidden" name="id" value=<? echo $id; ?>><input class='inputbutton' type='submit' name='submit' value='Verzenden'></td>
    </tr>
   </table>
  </form>
<?
  }
 }

 ...

?>
Gewijzigd op 01/01/1970 01:00:00 door Sven Onbekend
 
PHP hulp

PHP hulp

14/05/2024 20:20:49
 
- Ariën  -
Beheerder

- Ariën -

25/08/2009 00:01:00
Quote Anchor link
- Ik zie een leuke plek voor SQL-injection waarmee je site kan worden gehacked
- gebruik om te versturen: $_SERVER['REQUEST_METHOD']=="POST"
- Ik mis foutafhandeling met mysql_error();
 
Sven Onbekend

Sven Onbekend

25/08/2009 00:07:00
Quote Anchor link
- ^o)... hoe moet ik die $_SERVER['REQEUST_METHOD'] == "POST" toepassen dan?

- foutafhandeling heb ik idd niet gemaakt.
 
- Ariën  -
Beheerder

- Ariën -

25/08/2009 00:09:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if($_SERVER['REQUEST_METHOD'] == "POST") {
// er is gepost
} else {
// er is niet gePOST, toon je formulier
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
 
Sven Onbekend

Sven Onbekend

25/08/2009 00:13:00
Quote Anchor link
Ik heb op http://us3.php.net/manual/en/reserved.variables.server.php zitten lezen over $_SERVER, maar snap niet waarom dit een SQL-injection voorkomt. Zou je dit uit kunnen leggen?
 
Gerben Jacobs

Gerben Jacobs

25/08/2009 01:55:00
Quote Anchor link
Aar bedoelt dat jij $_POST["naam"] er gewoon zomaar in zet.

Als je dus als naam dit invult: naam'; DELETE FROM gastenboek;

Ben je alles kwijt. Gebruik daarom mysql_real_escape_string();
 
Ivo K

Ivo K

25/08/2009 07:32:00
Quote Anchor link
sven schreef op 25.08.2009 00:13:
Ik heb op http://us3.php.net/manual/en/reserved.variables.server.php zitten lezen over $_SERVER, maar snap niet waarom dit een SQL-injection voorkomt. Zou je dit uit kunnen leggen?


$_SERVER verkomt op helemaal geen SQL-injection, daarvoor heb je mysql_real_escape_string. $_SERVER['REQUEST_METHOD'] == POST is een betere manier om te controleren of een forum gepost is met POST als method.
 

25/08/2009 08:03:00
Quote Anchor link
"Hij zegt wel dat ie het doet, maar doet het niet. Ik zie niet waar de fout zit, omdat het script gewoon draait."

Dat krijg je als je geen foutafhandeling maakt...
 
- Ariën  -
Beheerder

- Ariën -

25/08/2009 12:42:00
Quote Anchor link
En een goede tip. Geef je database nooit DELETE rechten mee.
Als je iets wilt deleten, doe dat dan soft, door iets als verwijderd te markeren.
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
 
Sven Onbekend

Sven Onbekend

25/08/2009 21:34:00
Quote Anchor link
Heb de fout gevonden --> regel 6

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$sql = "UPDATE gastenboek SET `naam` = '".$_POST['naam']."', `website` = '".$_POST['website']."', `email` = '".$_POST['mail']."', `zichtbaar` = '".$_POST['zichtbaar']."', `bericht` = '".$_POST['bericht']."' WHERE `id` = '".$id."'";

// moet worden

$sql = "UPDATE gastenboek SET `naam` = '".$_POST['naam']."', `website` = '".$_POST['website']."', `email` = '".$_POST['mail']."', `zichtbaar` = '".$_POST['zichtbaar']."', `bericht` = '".$_POST['bericht']."' WHERE `id` = '".$_GET['bewerk']."'";


$id was leeg :s....
 
Matthias R

Matthias R

25/08/2009 21:35:00
Quote Anchor link
waar staat dit script atm??
 
Matthias R

Matthias R

25/08/2009 21:38:00
Quote Anchor link
@aar
Hoe zet je database rechten in???

Gelieve Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door Matthias R
 



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.