Hulp nodig bij een script DB Update

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark van den Brink

Mark van den Brink

13/09/2012 15:49:25
Quote Anchor link
Ik heb een vraag met betrekking tot me script vandaar hier gepost ik kom er even echt niet meer uit hij wil hem wel update maar hij zegt dat mijn formulier velden leeg zijn kan iemand mij helpen dit is mijn script: (Beetje rommelig geworden na van alles te testen...)

PHP Script
Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$Delete
= $_GET['D'];
if($Delete > "") {
mysql_query("DELETE FROM startpagina WHERE ID = '$Delete' ");
$melding = "Link Succesvol verwijderd!";
    }
  
    ?>


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
<?
$wijzig
= $_GET['W'];
if($wijzig > "") {
    
$titel = $_GET['U'];
$id = $_GET['ID'];
if($id > "") {
    $naam = $_POST['Naam.$id'];
    $url = $_POST['URL.$id'];

    $wijzigen = true;

if($naam == ""){
        $melding .= "Geen <strong>Naam</strong> ingevuld!<br>";
        $wijzigen = false;
}

if($url == ""){
        $melding .= "Geen <strong>URL</strong> ingevuld!<br>";
        $wijzigen = false;
}


    if($wijzigen == true) {

mysql_query("UPDATE startpagina SET Titel = '$naam', URL = '$url' WHERE Category = '$titel' AND ID = '$id'");
$melding = "Report: Link " . $naam . " is aangepast!";
}
    }
        }

?>



Het script wat alles weergeeft wat er in me database zit
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
<?php                        
$sql
  = "SELECT * FROM `startpagina` WHERE Category = '$link' ORDER BY Titel ASC";
$resultaat = mysql_query($sql) or die(mysql_error());
while ($rij = mysql_fetch_assoc($resultaat)) {

    $Titel = $rij["Titel"];
    $URL = $rij["URL"];
    $ID = $rij["ID"];    

    $Category = $rij["Category"];
    
    echo '<form method="POST">';
    echo '<input name="Naam';
    echo $ID;
    echo '" type="text" id="Naam" style=width:150px; value="';
    echo $Titel;
    echo '">&nbsp;';
    echo '<input name="URL';
    echo $ID;
    echo '" type="text" id="URL" style=width:170px; value="';
    echo $URL;
    echo '">';    
    echo '<a href="';
    echo $_SERVER['PHP_SELF'];
    echo '?D=';
        echo $ID;
        echo '&U=';
        echo $link;
        echo '"><IMG SRC="../Images/delete.png"></a>';
        echo '<a href="';
    echo $_SERVER['PHP_SELF'];
    echo '?ID=';
        echo $ID;
        echo '&U=';
        echo $link;
        echo '&W=1"><IMG SRC="../Images/bewerk.png"></a>';
    echo '</form>';
}

    echo "\n";
    ?>
</form><form method="POST" action="<? $_SERVER['PHP_SELF']; ?>?T=<? echo $link; ?>&U=<? echo $link; ?>" name="post">
          <em><strong>Nieuw</strong></em><br>
          <input name="Naam" type="text" class="cleardefault" id="textfield3" value="Naam" style='width:150px;'>
          <input name="URL" type="text" class="cleardefault" id="textfield6" value="http://" style='width:170px;'>
        <br>
          <input type="submit" name="button4" id="button4" value="Toevoegen">
        <br>
    
    </form>


Het gaat puur om het bewerken van de links hij ziet geen inhoud in mijn inputs

De delete functie werkt perfect en weergave werkt ook perfect..


Hoop dat jullie mij kunnen helpen!

Met vriendelijke groet,

Mark

Toevoeging op 13/09/2012 15:59:58:

Hij maakt er wel een rommeltje van zo met script herkenning!

kan ik dat uitzetten??
Gewijzigd op 13/09/2012 16:12:49 door Mark van den Brink
 
PHP hulp

PHP hulp

16/11/2024 01:46:03
 
Frank WD

Frank WD

13/09/2012 16:11:00
Quote Anchor link
Je moet om je code's [.code] en [./code] zetten. Maar dit dan zonder die . er in
 
Mark van den Brink

Mark van den Brink

13/09/2012 16:13:23
Quote Anchor link
Dat is veel beter en duidelijker!

Dank u!
 
- Ariën  -
Beheerder

- Ariën -

13/09/2012 16:21:35
Quote Anchor link
- Codeblok 1, lijn 2, waarom sja je $_GET op in een nieuwe variabele, dat is onnodig.
- Codeblok 1, lijn 3, waarom sta je te kijken of een getal groter of kleiner is dan een string? Dit is hetzelfde als appels en peren vergelijken.
- Variabelen horen buiten quotes.
- Ik zie SQL-injection op lijn 4
- Ik mis goede foutafhandeling op je queries
- Laatste codeblok, lijn 40 mis ik een echo bij de variabele. Je kan hem ook leeglaten, want $_SERVER['PHP_SELF'] is gevoelig voor XXS.
 
N K

N K

13/09/2012 16:23:12
Quote Anchor link
echo eens al je post/get variabelen ( of je update query)
Gewijzigd op 13/09/2012 16:24:04 door N K
 
Kris Peeters

Kris Peeters

13/09/2012 16:38:35
Quote Anchor link
Dit vind ik vreemd

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
...
    echo '<input name="Naam';
    echo $ID;
    echo '" type="text" id="Naam" style=width:150px; value="';
...

?>

en dan
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$id
= $_GET['ID'];
if($id > "") {
    $naam = $_POST['Naam.$id'];
?>


Dus je past de name van de input aan aan de waarde van een id.
Dit is wat een vreemde manier van werken.

Waar is dat goed/nodig/nuttig voor?
Gewijzigd op 13/09/2012 16:39:34 door Kris Peeters
 
Mark van den Brink

Mark van den Brink

13/09/2012 16:58:41
Quote Anchor link
Nou daar was ik dus mee aan het spelen omdat hij niet de gegevens ziet zeg maar uit me formulier dacht ik koppel ik aan mijn name=blabla55 die 55 is dan me id bijv: om zo verchillende input namen te krijgen voor script afwerking.Maar ook dat mocht niet lukken want hij herkent hem nogsteeds niet.

Quote:
- Codeblok 1, lijn 2, waarom sja je $_GET op in een nieuwe variabele, dat is onnodig.
- Codeblok 1, lijn 3, waarom sta je te kijken of een getal groter of kleiner is dan een string? Dit is hetzelfde als appels en peren vergelijken.
- Variabelen horen buiten quotes.
- Ik zie SQL-injection op lijn 4
- Ik mis goede foutafhandeling op je queries
- Laatste codeblok, lijn 40 mis ik een echo bij de variabele. Je kan hem ook leeglaten, want $_SERVER['PHP_SELF'] is gevoelig voor XXS.


1) Klopt is inderdaad onnodig want het is al een variable opzicht.
2) Staat genoteerd
3) Hoe bedoel je buiten quotes
4) Mag je me uitleggen rookie op gebied van injections
5) Hoe moet ik hem goed afhandelen?
6) Die hoeft inderdaad leeg te zijn want dat is mijn te toevoegen form, en wat is xxs?

Bedankt voor jullie aandacht misschien kunnen we het samen oplossen?


Dit is eigenlijk de bedoeling op mijn website heb ik een pagina met links naar andere website's soort startpagina.

Nu bewerk ik die via mijn admin pagina.
En daar heb ik een dropbox in waar ik kan kiezen uit welke startpagina ik wil wijzigen dus zeg maar algemeen met (8 links) of webdesign met (9 links)is een voorbeeld he.
Als je dan algemeen selecteert krijg je alle inhoud van die startpagina links te zien in dit geval dus 8

Die staan allemaal in <form> om ze te allemaal apart te kunnen aanpassen of verwijderen.
Zo ziet dat form script eruit:

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
<table width="944" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="500" valign="top"><strong>Algemeen      </strong><br>
      <form method="POST"><input name="Naam10" type="text" id="Naam" style=width:150px; value="Google">&nbsp;<input name="URL10" type="text" id="URL" style=width:170px; value="http://www,google.nl"><a href="/Admin/Admin-Portaal.php?D=10&U=Algemeen"><IMG SRC="../Images/delete.png"></a><a href="/Admin/Admin-Portaal.php?ID=10&U=Algemeen&W=1"><IMG SRC="../Images/bewerk.png"></a></form><form method="POST"><input name="Naam11" type="text" id="Naam" style=width:150px; value="Hotmail">&nbsp;<input name="URL11" type="text" id="URL" style=width:170px; value="http://www.hotmail.com"><a href="/Admin/Admin-Portaal.php?D=11&U=Algemeen"><IMG SRC="../Images/delete.png"></a><a href="/Admin/Admin-Portaal.php?ID=11&U=Algemeen&W=1"><IMG SRC="../Images/bewerk.png"></a></form><form method="POST"><input name="Naam12" type="text" id="Naam" style=width:150px; value="Marktplaats">&nbsp;<input name="URL12" type="text" id="URL" style=width:170px; value="http://www.marktplaats.nl"><a href="/Admin/Admin-Portaal.php?D=12&U=Algemeen"><IMG SRC="../Images/delete.png"></a><a href="/Admin/Admin-Portaal.php?ID=12&U=Algemeen&W=1"><IMG SRC="../Images/bewerk.png"></a></form><form method="POST"><input name="Naam14" type="text" id="Naam" style=width:150px; value="Snowplanet">&nbsp;<input name="URL14" type="text" id="URL" style=width:170px; value="http://www.snowplanet.nl"><a href="/Admin/Admin-Portaal.php?D=14&U=Algemeen"><IMG SRC="../Images/delete.png"></a><a href="/Admin/Admin-Portaal.php?ID=14&U=Algemeen&W=1"><IMG SRC="../Images/bewerk.png"></a></form><form method="POST"><input name="Naam13" type="text" id="Naam" style=width:150px; value="Wikipedia">&nbsp;<input name="URL13" type="text" id="URL" style=width:170px; value="http://www.wikipedia.nl"><a href="/Admin/Admin-Portaal.php?D=13&U=Algemeen"><IMG SRC="../Images/delete.png"></a><a href="/Admin/Admin-Portaal.php?ID=13&U=Algemeen&W=1"><IMG SRC="../Images/bewerk.png"></a></form><form method="POST"><input name="Naam1" type="text" id="Naam" style=width:150px; value="Youtube">&nbsp;<input name="URL1" type="text" id="URL" style=width:170px; value="http://www.youtube.nl"><a href="/Admin/Admin-Portaal.php?D=1&U=Algemeen"><IMG SRC="../Images/delete.png"></a><a href="/Admin/Admin-Portaal.php?ID=1&U=Algemeen&W=1"><IMG SRC="../Images/bewerk.png"></a></form>
</form><form method="POST" action="?T=Algemeen&U=Algemeen" name="post">
          <em><strong>Nieuw</strong></em><br>
          <input name="Naam" type="text" class="cleardefault" id="textfield3" value="Naam" style='width:150px;'>
          <input name="URL" type="text" class="cleardefault" id="textfield6" value="http://" style='width:170px;'>
        <br>
          <input type="submit" name="button4" id="button4" value="Toevoegen">
        <br>
    
    </form></td>
    
</tr>
</table>    


Dus dan doormiddel van die moet ik ze kunnen aanpassen!
Gewijzigd op 13/09/2012 17:03:34 door Mark van den Brink
 
- Ariën  -
Beheerder

- Ariën -

13/09/2012 17:02:35
Quote Anchor link
1) Het is onnodig, je hebt alles wat je nodig hebt al in je $_HET
3) echo "Dit is $fout"; is fout, en echo "Dit is ".$goed; is goed.
Variabelen horen niet binnen quotes.
4) Kijk eens op WIkipedia naar SQL-Injection en er gaat een wereld voor je open
5) Kijk eens op http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/. Op zo een manier, met if-else....
6) Tja, kijk eens op Google/Wikipedia/tutorials....
Gewijzigd op 13/09/2012 17:02:56 door - Ariën -
 
Kris Peeters

Kris Peeters

13/09/2012 17:16:57
Quote Anchor link
De gebruiker stuurt maar 1 formulier tegelijk op. Er is dus geen enkel overlap met gegevens van andere formulieren.

Wat dacht je van deze constructie?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
while ($rij = mysql_fetch_assoc($resultaat)) {
  ...

  echo '<form method="POST" action="">';
  echo '<input name="Naam" value="' . htmlentities($Titel) . '">' ;
  echo '<input type="hidden" name="id" value="' . (int) $ID . '">' ;
  ...
}

?>


Dan heb je dus $_POST['Naam'] voor de naam en $_POST['id'] voor de id
Gewijzigd op 13/09/2012 17:25:51 door Kris Peeters
 
Mark van den Brink

Mark van den Brink

13/09/2012 18:11:05
Quote Anchor link
Probleem is opgelost heb een beetje rond lopen kijken en dit is de oplossing!

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
<?
if(isset($_POST['wijzig'])){
    
    $wijzigen = true;

if($_POST['Naam'] == ""){
        $melding .= "Geen <strong>Naam</strong> ingevuld!<br>";
        $wijzigen = false;
}

if($_POST['URL'] == ""){
        $melding .= "Geen <strong>URL</strong> ingevuld!<br>";
        $wijzigen = false;
}


    if($wijzigen == true) {

mysql_query("UPDATE startpagina SET Titel = '".$_POST['Naam']."', URL = '".$_POST['URL']."' WHERE ID = '".$_POST['id']."'");
$melding = "Report: Link " . $_POST['Naam'] . " is aangepast!";
}
    }

?>


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
<?php                        
$sql
  = "SELECT * FROM `startpagina` WHERE Category = '$link' ORDER BY Titel ASC";
$resultaat = mysql_query($sql) or die(mysql_error());
while ($rij = mysql_fetch_assoc($resultaat)) {

    $Titel = $rij["Titel"];
    $URL = $rij["URL"];
    $ID = $rij["ID"];    

    echo '<form method="POST" action="'.$_SERVER['PHP_SELF'].'?U='.$link.'">';
    echo '<input name="Naam" value="' . htmlentities($Titel) . '">' ;
    echo '<input name="URL" value="' . htmlentities($URL) . '">' ;
    echo '<input type="hidden" name="id" value="' . (int) $ID . '">
    
    <input type="image" src="../Images/delete.png" name="delete" value="delete">
    <input type="image" src="../Images/bewerk.png" name="wijzig" value="wijzig">
    </form>'
;
}

    echo "\n";
    ?>


Hij werkt nu 100% naar behoren maar nu zou ik nog graag willen weten...hoe zouden jullie dit script "veilig maken"

Ik heb nu mijn delete functie aangepast in iets veiliger zoals gezegd..hoop ik tenminst!

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
<?php
 $sql
= "DELETE FROM startpagina WHERE ID = ".$_GET['D']." LIMIT 1";
                                              
    $voerin = mysql_query($sql);
    
    if(mysql_affected_rows() < 1)
    {

        $melding = 'Deze link stond niet in de database';
    }

    
    if(!isset($melding) && $voerin)
    {

        $melding = 'Succesvol verwijderd';
    }

    else
    {
}

?>


iemand suggesties of tips?
Gewijzigd op 13/09/2012 20:56:01 door Mark van den Brink
 
Wouter J

Wouter J

13/09/2012 22:13:28
Quote Anchor link
Kijk eens op sql boilerplate: https://wouterj.github.com/sql-boilerplate/ daar zie je een groot aantal code voorbeelden van PHP en SQL waarbij ik laat zien wat ik het veiligst en de beste foutafhandeling vind. (foutafhandeling is de fundering van elk script het zorgt ervoor dat je tijdens het developen snel kunt debuggen (fouten oplossen) en in productie omgeving de gebruiker geen PHP errors te zien krijgt)

1 hele belangrijke tip: Vertrouw nooit een variabele in een query.
Variabele zijn hartstikke handig alleen ze hebben 1 nadeel: Je weet nooit zeker wat ze voor waarde bevatten. Stel ik heb deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= 'DELETE FROM frontpage WHERE id = '.$id;
?>

Stel ik ben een hacker en vul voor $id dit in: '0 OR 1=1' Dat zorgt ervoor dat de query dit wordt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= 'DELETE FROM frontpage WHERE id = 0 OR 1=1';
?>

waarbij dus alles wordt weggehaald (1=1 is namelijk altijd true).

Daarom gebruiken we hier typecasting, je zorgt dat $id altijd een int (int = integer = geheel nummer = ..., -2, -1 0, 1, 2, 3, ...) is. Dat doen we door er (int) voor te zetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= 'DELETE FROM frontpage WHERE id = '.(int) $id;
?>


Stel dat we i.p.v. id name gebruiken. Dan moet je wel een string (stukje tekst) invullen en kunnen we dus niet typecasten naar een int! Gelukkig heeft MySQL daarvoor de mysql_real_escape_string uit gevonden. Zoals de functienaam al zegt gebruik je dit voor elke string om deze veilig te maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql
= 'DELETE FROM frontpage WHERE name = '.mysql_real_escape_string($name);
?>


We hebben er nu voor gezorgd dat de SQL injection hack methode niet meer mogelijk is.
 
Mark van den Brink

Mark van den Brink

13/09/2012 22:27:28
Quote Anchor link
Ik ga ermee aan de slag en dan post ik hier me resultaat nog 1x heb net ook nog even vaan -aar- geprint en gelezen en het is me nu duidelijk hoe ik te werk moet gaan.

Bedankt Wouter voor de heldere uitleg over Injections nu begrijp ik die codes wat beter.
1 ding je website werkt niet krijg een foutmelding! "Pagina is niet beschibaar!"
 
- Ariën  -
Beheerder

- Ariën -

13/09/2012 22:30:04
 
Mark van den Brink

Mark van den Brink

13/09/2012 22:40:51
Quote Anchor link
Nu heb ik hem inderdaad handige site van het weekend maar even voor gaan zitten.

Ik heb 1 deel alvast beveiligd...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
    if(isset($_POST['delete'])){
         $sql = "DELETE FROM startpagina WHERE ID = ".(int)$_POST['id']." LIMIT 1";
                                              
    if(($sql = mysql_query($sql)) === false) {
        $melding = showSQLError($sql,'Fout bij verwijderen link.');
    }

    else
    {
        $melding = 'Link is succesvol verwijderd!';
    }
}

?>


Geen overbodige variable
Goeie foutafhandeling
en volgens mij ook veilig!

Van het weekend de rest moet goed uitrusten heb morgen een marathon te werken.
 
- SanThe -

- SanThe -

14/09/2012 00:38:07
Quote Anchor link
$melding = 'Link is succesvol verwijderd!';

Dat is een aanname.
Je hebt dat nergens gecontroleerd.

Zie mysql_affected_rows().
 
Mark van den Brink

Mark van den Brink

15/09/2012 18:29:17
Quote Anchor link
Dan krijg je hem zeker zo:
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
<?php
    if(isset($_POST['delete'])){
         $sql = "DELETE FROM startpagina WHERE ID = ".(int)$_POST['id']." LIMIT 1";
                                              
    if(($sql = mysql_query($sql)) === false) {
        $melding = showSQLError($sql,'Fout bij verwijderen link.');
    }

elseif(mysql_affected_rows() == 0)
{

    $melding = 'Geen records verwijderd. <br />Query: '.$sql;
}

else
{
    $melding = 'Link is succesvol verwijderd!';
}


?>
Gewijzigd op 15/09/2012 18:29:50 door Mark van den Brink
 
Niels Peeren

Niels Peeren

15/09/2012 18:33:50
Quote Anchor link
ik zie dat je al je html in php echo'd als je dat doet probeer dan dit eens

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
    echo '<form method="POST">'.
         '<input name="Naam'.
          $ID.
         '" type="text" id="Naam" style=width:150px; value="'.
          $Titel.
         '">&nbsp;'.
         '<input name="URL'.
          $ID.
         '" type="text" id="URL" style=width:170px; value="'.
          $URL;


of dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<title></title>
<head>
</head>
<body>

<?php

?>


</body>

</html>


je html buiten de php tags
 
Mark van den Brink

Mark van den Brink

17/09/2012 16:51:17
Quote Anchor link
Oke en wat is het grote voordeel daarvan?
 



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.