[PHP/MySQL] Update slaat niets op *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FrameWork.
  • Registratie: September 2007
  • Laatst online: 11:20
Goedemiddag,

Allereerst, ik ben nog redelijk nieuw met PHP maar voor mijn ervaring ben ik een nieuws systeem(pje) aan het bouwen. Ik zit al een tijdje met een probleem als ik een nieuwsbericht wil bewerken. De benodigde data wordt uit de MySQL database gehaald. Echter, als ik het bericht heb bewerkt en deze wil opslaan, gebeurd er 'niks'. Ik druk op de submit knop en dan staat er dat het bericht is ge-update. Helaas is dit niet het geval. :/

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
<?php
// Get the id from the URL
$id = $_GET['id'];

    // Retrieve the article by using the ID
    $result = mysql_query("SELECT * FROM news WHERE newsid='".$id."'");
    $row = mysql_fetch_assoc($result);
        
        // Get the title and content from the database
        $title = $row['title'];
        $content = $row['content'];

            if(!$_POST['submit']) {
                // The form
                echo '<form method="POST">';
                echo 'Titel: <br><input type="text" name="title" value="'.$title.'"> <br>';
                echo 'Bericht: <br><textarea name="content" cols="30" rows="5">'.$content.'</textarea><br>';
                echo '<input type="hidden" name="id" value="'.$id.'">';
                echo '<input type="submit" name="submit" value="Bewerk bericht"><br><br>';
            }
            else {
                
                // Send the edited information to the DB
                $id = $_POST['newsid'];
                $title = mysql_escape_string($_POST['title']);
                $content = mysql_escape_string($_POST['content']);

                $query = mysql_query("UPDATE news SET title='$title', content='$content' WHERE newsid='$id'");
echo 'Het bericht is aangepast. <a href="index.php?ap=news">Ga terug naar het nieuws overzicht</a>';
}
?>      


Wat heb ik geprobeerd? O-)
-De code doorgespit
-Andere variabelen aan de 'bewerkte' gebieden geven (ik dacht dat het misschien eraan lag dat er twee maal dezelfde soort variabele werd gebruikt).

Jammer genoeg komt er geen error uit waardoor ik niet precies kan zien waaraan het ligt. Ik denk dat het probleem in het update gedeelte ligt, hoewel ik daar niet zeker van ben. Helaas kom ik er niet uit wat het probleem precies is :X

Mijn mysql database:
newsid title date content

Wie kan mij zeggen waar het probleem zich bevindt? Alvast bedankt :)

Edit: Excuses voor de titel, realiseerde me niet dat deze half afgewerkt was :+

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Standaard regeltje maar weer: Lees je eerst in in SQL Injection en XSS voordat je verder gaat met wat dan ook...Je code is namelijk vatbaar voor beide ;) Leer daarna debuggen en je zult zien dat je je probleem prima zelf kunt oplossen ;)

Tot slot een titlefix: [PHP/MySQL] >> [PHP/MySQL] Update slaat niets op

[ Voor 54% gewijzigd door RobIII op 26-08-2009 16:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

In navolging van ^^ 2de standaard regeltje:
PHP:
1
or die(mysql_error());


* Mike2k strijkt met de hand over het hartje...
Kijk eens goed naar welke row je wilt updaten...

[ Voor 42% gewijzigd door Mike2k op 26-08-2009 16:27 ]

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:51

Janoz

Moderator Devschuur®

!litemod

En als je dat allemaal opgelost hebt moet je even kijken naar regel 18 en regel 24.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Je voert de query niet uit, je assigned hem alleen aan een variabel.

Acties:
  • 0 Henk 'm!

  • Luqq
  • Registratie: Juni 2005
  • Laatst online: 11:11
Verwijderd schreef op woensdag 26 augustus 2009 @ 16:28:
Je voert de query niet uit, je assigned hem alleen aan een variabel.
Mysql_query voert de query wel uit hoor :)

Acties:
  • 0 Henk 'm!

  • Recursio
  • Registratie: Mei 2006
  • Laatst online: 01-09 18:41
In regel 18 POST je "id",
In regel 24 lees je "newsid".
"newsid" wordt niet meegestuurd ==> is dus leeg.
Je UPDATE query op "geen enkel matchend record" slaagt altijd, mits syntactisch correct
(Ervan uitgaand dat je geen records hebt waar newsid == "" of newsid = NULL)

[ Voor 57% gewijzigd door Recursio op 26-08-2009 16:35 . Reden: vervolduidelijkheiding ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Recursio schreef op woensdag 26 augustus 2009 @ 16:32:
In regel 18 POST je "id",
In regel 24 lees je "newsid".
"newsid" wordt niet meegestuurd ==> is dus leeg.
Dan staat error_reporting voor het gemak dus ook uit, gaat lekker met de standaard programmer en debug 101.

{signature}


Acties:
  • 0 Henk 'm!

  • cariolive23
  • Registratie: Januari 2007
  • Laatst online: 18-10-2024
En vergeet niet om met mysql_affected_rows() te controleren of er wel iets is geupdate. Dat de query technisch is gelukt, zegt nog steeds niets.

Acties:
  • 0 Henk 'm!

  • FrameWork.
  • Registratie: September 2007
  • Laatst online: 11:20
Bedankt voor de reacties. Ik zal gaan kijken voor een SQL Injection oplossing en het andere commentaar word zeker meegenomen om er een veilige applicatie van te bouwen :)

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 09:07

MueR

Admin Tweakers Discord

is niet lief

Stiekem vermoed ik dat zijn probleem op regel 7 staat. Hij doet een query op basis van een GET parameter die er bij de post niet meer is.

Ik durf te wedden dat je fijne errors krijgt op die fetch_assoc call.

[ Voor 21% gewijzigd door MueR op 26-08-2009 16:48 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • FrameWork.
  • Registratie: September 2007
  • Laatst online: 11:20
Ik zal je eerlijk vertellen, ik krijg geen errors als ik de data nu verzend. Alles werkt zoals het zou moeten, oké, ik moet mysql_affected_rows() nog implementeren en de SQL injection / XSS bug verhelpen maar voor de rest werkt het.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
MueR schreef op woensdag 26 augustus 2009 @ 16:47:
Stiekem vermoed ik dat zijn probleem op regel 7 staat. Hij doet een query op basis van een GET parameter die er bij de post niet meer is.

Ik durf te wedden dat je fijne errors krijgt op die fetch_assoc call.
Die is er bij de post toch ook nog? Als je naar een pagina "somepage.php?id=10" gaat dan zal het form ( als er geen andere action is aangegeven ) toch ook gewoon naar somepage.php?id=10 posten? Dan is die Get param toch ook aanwezig?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Heb je uberhaupt de query al ge-echo't naar het scherm? En af en toe 'echo "test"; er tussen knallen en kijken of hij het stuk code wel uitvoert...

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:51

Janoz

Moderator Devschuur®

!litemod

Woy schreef op woensdag 26 augustus 2009 @ 16:59:
[...]

Die is er bij de post toch ook nog? Als je naar een pagina "somepage.php?id=10" gaat dan zal het form ( als er geen andere action is aangegeven ) toch ook gewoon naar somepage.php?id=10 posten? Dan is die Get param toch ook aanwezig?
maw, dat het werkt is eigenlijk meer een kwestie van geluk dan wijsheid.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 09:07

MueR

Admin Tweakers Discord

is niet lief

Woy schreef op woensdag 26 augustus 2009 @ 16:59:
[...]

Die is er bij de post toch ook nog? Als je naar een pagina "somepage.php?id=10" gaat dan zal het form ( als er geen andere action is aangegeven ) toch ook gewoon naar somepage.php?id=10 posten? Dan is die Get param toch ook aanwezig?
Dat is maar de vraag. TS heeft halfbakken HTML die in quirksmode schiet door niet gesloten tags (zoals form) en missende attributen (zoals action).

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
Ik zie hier staan:
echo '<input type="hidden" name="id" value="'.$id.'">'; op regel 18
Maar op regel 24 maak je gebruik van $id = $_POST['newsid'];
Je html code is brak, je php is brak, je sql is brak.

Ik zou eens met var_dump() kijken wat er nu in die variabelen zit.
Dus var_dump($id); Gaat waarschijnlijk NULL opleveren waardoor dus ook je where statement niet klopt.
Ook kan je na het uitvoeren van je mysql_query() met volgende code: mysql_affected_rows() kijken hoeveel rijen er zijn aangepast.

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Janoz schreef op woensdag 26 augustus 2009 @ 17:05:
[...]
maw, dat het werkt is eigenlijk meer een kwestie van geluk dan wijsheid.
Dat wel idd, maar als hij een post zou doen, dan zal hij het id waarschijnlijk wel gewoon meesturen.
MueR schreef op woensdag 26 augustus 2009 @ 17:42:
[...]

Dat is maar de vraag. TS heeft halfbakken HTML die in quirksmode schiet door niet gesloten tags (zoals form) en missende attributen (zoals action).
Dat er het een en ander aan schort is duidelijk, maar het lijkt me dat hij eerder totaal niet post, dan dat hij naar een andere url post.

Al met al wat leesvoer voor de TS: Tips bij het debuggen! en Tips voor nette code

offtopic:
@flanderssoft: Dat was allemaal idd al gezegd, dus voegt weinig toe aan het topic

[ Voor 32% gewijzigd door Woy op 26-08-2009 18:44 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • FrameWork.
  • Registratie: September 2007
  • Laatst online: 11:20
Nogmaals, bedankt voor jullie help. Ik heb inmiddels het een en ander aangepast en zal het bestand (de code) herschrijven. Mysql_affected_rows is inmiddels toegevoegd en ik heb een paar andere kleine bugs eruit gehaald.

Acties:
  • 0 Henk 'm!

  • ID-College
  • Registratie: November 2003
  • Laatst online: 18-09 18:03
Je moet nog een hoop leren, maar dat maakt niet uit! Error reporting altijd aanzetten zodat je syntax errors en andere terug krijgt. Daarnaast idd heel snel naar SQL injection kijken (FOK lag ermee plat) en verder zoals gezegd regel 24 :)

  • Mike2k
  • Registratie: Mei 2002
  • Laatst online: 22-08 11:59

Mike2k

Zone grote vuurbal jonge! BAM!

Kleine aanvulling @ ID-College,

Error reporting moet je inderdaad aanzetten maar alleen op je ontwikkel, test en acceptatie omgeving. Niet op je productie! Absoluut niet op je productie omgeving!

OTAP: Wikipedia: Ontwikkeling, test, acceptatie en productie

You definitely rate about a 9.0 on my weird-shit-o-meter
Chuck Norris doesn't dial the wrong number. You answer the wrong phone.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 08:51

Janoz

Moderator Devschuur®

!litemod

Error reporting mag wel aan op productie, maar de meldingen moeten niet bij de gebruiker terecht komen. Verder zou ik in de acceptatie omgeving dezelfde error reporting settings gebruiken als bij productie.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1