[php]Terugsturen naar pagina na edit nieuwsbericht

Pagina: 1
Acties:
  • 176 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • OneUp
  • Registratie: September 2002
  • Laatst online: 08-05-2024
Ik ben bezig met een website voor een voetbalclub, hierop heb ik een functie gemaakt waarmee nieuws gepost kan worden. Uiteraard dient het nieuws ook gewijzigd te kunnen worden.

Ik heb het nou zo ver dat het nieuws wel in de database gewijzigd wordt maar ik krijg het niet voor elkaar om na het editten van het nieuws weer automatisch teruggestuurd te worden naar de nieuwspage.

Ik heb al geprobeerd om een header te plaatsen maar dit werkt niet.

Ik wil dus nadat je het nieuws gewijzigd hebt en je op de submit knop drukt om het nieuws te wijzigen je ook meteen doorgestuurd wordt naar de nieuwspage.

hieronder zie je het stuk code (misschien wel vies maar ik ben een php-naab)
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
<?
    $NewsID = $_GET['ID'] ; //read URL-pag parameter in 

    //Set SQL statement, Filter NWS_ID
    include("dbconnect.php");
    $SQL="SELECT NWS_Subject, NWS_News, NWS_DepartmentID FROM tblnews WHERE NWS_ID=$NewsID;"; 
    $result = mysql_query($SQL) or die ("fout: " . mysql_error());
    
    list($Subject, $Message, $DepartmentID)= mysql_fetch_row($result);

    echo "<form name=\"form1\" method=\"POST\" action=\"\"><p>"; 
    echo "  <input name=\"onderwerp\" type=\"text\" id=\"onderwerp\" value=$Subject>";
    echo "  <br>";
    echo "  <textarea name=\"bericht\" id=\"bericht\">$Message</textarea>";
    echo "  <br>";
    echo "    <select name=\"department\" id=\"department\">";
    echo "    </select></p><p>";
    echo "  <input name=\"cmdChange\" type=\"submit\" id=\"cmdChange\" value=\"Verander\">";
    echo "    </p>";
    echo "</form>";

if (!empty($_POST["cmdChange"]))
{
$subjectnew = $_POST["onderwerp"];
$messagenew = $_POST["bericht"];

$SQL2 = "update tblnews set NWS_Subject = '$subjectnew', NWS_News = '$messagenew' where NWS_ID = $NewsID;";
$result2 = mysql_query($SQL2);
    if (mysql_error()!="")
    {
    $ANTW=mysql_error();
    echo "oorzaak fout: ".$ANTW;
    }
}
?>

Iemand die mij kan helpen?

People are just like trees. They fall down when you hit them mutiple times with an axe.


Acties:
  • 0 Henk 'm!

  • Radiant
  • Registratie: Juli 2003
  • Niet online

Radiant

Certified MS Bob Administrator

Ik zou om te beginnen maar eens iets gaan lezen over SQL injection, ik zie zo al 2 queries waar iemand iets bij kan plakken.

Je zegt dat je een header hebt geplaatst en dat het niet werkt, wat werkt er dan precies niet en wat heb je geprobeerd?

[ Voor 14% gewijzigd door Radiant op 02-11-2005 10:29 ]


Acties:
  • 0 Henk 'm!

  • OneUp
  • Registratie: September 2002
  • Laatst online: 08-05-2024
Radiant schreef op woensdag 02 november 2005 @ 10:27:
Ik zou om te beginnen maar eens iets gaan lezen over SQL injection, ik zie zo al 2 queries waar iemand iets bij kan plakken.

Je zegt dat je een header hebt geplaatst en dat het niet werkt, wat werkt er dan precies niet en wat heb je geprobeerd?
Ik heb op zo ongeveer elke denkbare plek een header geplaatst. Maar wanneer je op de submit knop drukt gebeurt er gewoon niks. Ook wordt het gewijzigde nieuws niet weergegeven. Echter update hij de database wel goed.

Wat je met SQL injection bedoeld weet ik niet :X

People are just like trees. They fall down when you hit them mutiple times with an axe.


Acties:
  • 0 Henk 'm!

Verwijderd

@ radiant:

Het is misschien handing als je ook aan geeft waar de 2 injections zich bevinden dan kunnen de wat minder ervaren php proggers er ook ietvan leren.

Volgens mij bedoel je op regel 24 en regel 25...

:)

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
met Radiant..
erg belangrijk dat je daarop let

ontopic:
zoek eens naar $_SERVER['HTTP_REFERER'] en naar header("Location: ....")

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Tsja, een simpele oplossing lijkt me:
PHP:
1
2
3
<script language=javascript>
document.location = <?=$HTTP_REFERER?>
</script>

en als de locatie bekend is:
PHP:
1
2
3
<script language=javascript>
document.location = <?=$location?>
</script>

[ Voor 40% gewijzigd door sariel op 02-11-2005 10:36 ]

Copy.com


Acties:
  • 0 Henk 'm!

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 19:39
OneUp schreef op woensdag 02 november 2005 @ 10:25:
Ik heb al geprobeerd om een header te plaatsen maar dit werkt niet.
'werkt niet' is misschien leuk als omschrijving van het karakter van een houtsoort, maar wanneer jij het header commando gebruikt, is er niet zoiets als 'werkt niet'.

Hoe staat je error reporting ? Zet die eens aan. Dan krijg je de foutmeldingen ook te zien.

Was advocaat maar vindt het juridische nog steeds leuk


Acties:
  • 0 Henk 'm!

Verwijderd

OneUp schreef op woensdag 02 november 2005 @ 10:32:
[...]
Ik heb op zo ongeveer elke denkbare plek een header geplaatst. Maar wanneer je op de submit knop drukt gebeurt er gewoon niks. Ook wordt het gewijzigde nieuws niet weergegeven. Echter update hij de database wel goed.
Ik zie die headers niet in je code?? Met header('$location') moet je geredirect worden, zorg dat deze code als eerste aangeroepen wordt (voor echo's e.d.).

[ Voor 14% gewijzigd door Verwijderd op 02-11-2005 10:36 ]


Acties:
  • 0 Henk 'm!

  • Tarin
  • Registratie: Januari 2001
  • Laatst online: 10:48

Tarin

Just plain weird.

Ik heb voor het websiteje van m'n korfbalvereniging per onderdeel (nieuws, activiteiten, gastenboek-bewerker, enz. enz.) een apart PHP-script gemaakt. Daarin worden bovenin de eventuele insert, update en de HTML-code voor bewerken en posten afgehandeld, en helemaal onderin wordt het nieuwtje weergegeven.

Als je dat dan bijv. aanroept met ?action=insert of ?action=update, zet je als je insert of update gelukt is de $action op "view" oid, en fietst het script door langs de eventuele andere uit te voeren $actions, komt het "view" tegen en wordt je nieuwtje weer getoond.

Misschien niet de meest praktische manier (ik zou het niet weten), maar ik ben ook maar een hobbyist :P.

[edit]
SQL Injection is inderdaad ook een nuttig puntje om op te letten, maar kijk dan meteen ook even naar Magic Quotes. Ik ben een half uur aan het kloten geweest om uit te vogelen waarom ik nou extra slashes kreeg op de live-server en niet in m'n testomgeving ;).

[ Voor 27% gewijzigd door Tarin op 02-11-2005 10:42 ]

Ik fiets op de accu van m'n iPod :) | Specs | Pics | Elektro: NL / EN


Acties:
  • 0 Henk 'm!

  • SnoW
  • Registratie: Februari 2000
  • Laatst online: 22-08 20:53

Acties:
  • 0 Henk 'm!

  • MuddyMagical
  • Registratie: Januari 2001
  • Nu online
Hij moet op de 1 na laatste regel van je script komen. (35)

PHP:
1
header('location: index.php');

Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Verwijderd schreef op woensdag 02 november 2005 @ 10:35:
[...]

Ik zie die headers niet in je code?? Met header('$location') moet je geredirect worden, zorg dat deze code als eerste aangeroepen wordt (voor echo's e.d.).
Maar als je dat doet, dan doet ie alles wat erna komt niet. Dus dan wordt z'n query en zo niet uitgevoerd.

Copy.com


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
mensen.. laat die jongen zelf eens wat uitzoeken..

hij kan zelf prima de 'header' handleiding lezen toch?
ik vind het prima om hem te helpen hoor, maar als iedereen zo geholpen word leert niemand ooit iets.

zoals ik in een ander topic net ook al zei:
code copy pasten kan iedereen.. het snappen is veel belangrijker
sariel schreef op woensdag 02 november 2005 @ 10:41:
[...]
Maar als je dat doet, dan doet ie alles wat erna komt niet. Dus dan wordt z'n query en zo niet uitgevoerd.
een query genereerd geen output (als het goed is)
een echo commando wel.
een header moet gestuurt worden VOOR de eerste output. dit kan dus NA de query's zijn

in dit geval zal de TS zijn query dus BOVEN zijn form moeten plaatsen (wat sowieso wel handig is btw)

[ Voor 48% gewijzigd door BasieP op 02-11-2005 10:44 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Verwijderd schreef op woensdag 02 november 2005 @ 10:33:
@ radiant:
Het is misschien handing als je ook aan geeft waar de 2 injections zich bevinden dan kunnen de wat minder ervaren php proggers er ook ietvan leren.
Volgens mij bedoel je op regel 24 en regel 25...
:)
Hij bedoelt waarschijnlijk dat NewsID rechtstreeks zonder checks uit de GET-parameter komt en zo direct in de WHERE-clause van die queries wordt gebruikt. Dit is pas een groot probleem als register_globals op on staat in je php.ini. Bovendien zal het wel meevallen als die pagina goed afgeschermd wordt, want als ik het goed begrijp is dit toch een beheerspagina voor een webmaster.
Dat het meevalt is overigens geen reden om zo te coden natuurlijk, dat ben ik wel met bovenstaande mensen eens. :P

Verder, als je een witte pagina krijgt, dan is de kans aanwezig dat er foutmeldingen onderdrukt worden. Dat is natuurlijk niet handig als je aan het proggen bent, dus ik zou even proberen om die reporting expliciet aan te zetten door dit boven álles in je scripts te zetten:
PHP:
1
error_reporting(E_ALL);

Dan weet je hopelijk misschien waar het mis gaat.

Tot slot: als je met header() een pagina doorstuurt, let er dan op dat je vóór dat moment geen enkele output naar de browser mag hebben gedaan. Je kunt niet eerst outputten naar je browser en daarná de headers nog even aanpassen (behalve door wat trucjes die je in jouw geval echt niet nodig hebt); die headers moeten eerst bij de browser aankomen en daarna de rest. ;)

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

Verwijderd

sariel schreef op woensdag 02 november 2005 @ 10:41:
[...]


Maar als je dat doet, dan doet ie alles wat erna komt niet. Dus dan wordt z'n query en zo niet uitgevoerd.
Je kunt toch in het begin van je php checken op een variabele die geset is na het submitten van de form en als die gezet: header('$location');?

Beetje simpel als je het mij vraagt.

Acties:
  • 0 Henk 'm!

Verwijderd

Superdeboer schreef op woensdag 02 november 2005 @ 10:43:
die headers moeten eerst bij de browser aankomen en daarna de rest. ;)
Ja het is insecten verkrachten, maar de header komt altijd als eerste aan bij de browser ;) Of het de header is die je zelf wilde sturen is dan natuurlijk de vraag.

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Verwijderd schreef op woensdag 02 november 2005 @ 10:46:
[...]

Ja het is insecten verkrachten, maar de header komt altijd als eerste aan bij de browser ;) Of het de header is die je zelf wilde sturen is dan natuurlijk de vraag.
hij bedoelt natuurlijk:
headers komen NIET aan als ze NIET als eerste aankomen

en ja dat is wat anders dan
headers werken alleen als ze als eerste aankomen

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

BasieP schreef op woensdag 02 november 2005 @ 10:52:
hij bedoelt natuurlijk:
headers komen NIET aan als ze NIET als eerste aankomen

en ja dat is wat anders dan
headers werken alleen als ze als eerste aankomen
Ik vond een opmerking noodzakelijk aangezien het mij leek dat headers nog wel eens misvat worden. En dit stukje tekst van jou maakt het er niet duidelijker op. Elke HTTP response heeft domweg een header en eventueel een data field. Als je dus je data field gaat vullen, dus bijvoorbeeld 'echo-en', moet je die client eerst een header sturen. Maak je zelf geen header dan zal er een standaard header worden gebruikt als response.

Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Mja de aanvulling (of correctie zo je wilt) was wel terecht op zich; mijn formulering was niet ideaal, maar was ook in beginsel aan de TS gericht. ;)
Ik meende dat mijn zinnetje "je kunt niet eerst outputten naar je browser en daarná de headers nog even aanpassen" overigens wel voldoende sluitend was, maar ik zie nu dat ik de waarheid van dat zinnetje weer geweld aan heb gedaan door vervolgens over trucjes (ik heb daar output buffering in mijn hoofd) te beginnen... :X

Met die methode is er echter *uiteraard* de facto nog steeds geen sprake van dat de server eerst een message-body naar de client verstuurt, waarna je in je scripts nog even een partij custom HTTP-headers kunt gaan zitten bouwen die je simpelweg achter die data aanstuurt, want die response is dan al van standaard headers voorzien inderdaad. :D
Het hele idee achter de outputbuffering is natuurlijk dat alles opgespaard, geordend en dan in één keer van de server naar de client getuft wordt. :)

Ik moet Mark dus wel gelijk geven met zijn verduidelijking van dat paragraafje van mij ja. d:)b

Zoals hij het formuleert is het juist: gebruik je geen outputbuffering en doe je output naar de client zónder zelf headers gemaakt te hebben, dan fixt Apache de responseheaders voor jou. Wil je dat niet, dan moet je niet gaan lopen outputten voordat je eigen headers gefixt hebt. :P

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • DDemolition
  • Registratie: Augustus 2003
  • Laatst online: 30-09-2024

DDemolition

slopen is mijn lust en leven

PHP:
1
echo "<META HTTP-EQUIV=Refresh Content=0;URL=home.php>";

mischien iets?

't was toch home.php of niet?? 8)

[ Voor 30% gewijzigd door DDemolition op 04-11-2005 20:27 ]

Specs: Server, WS boven, WS beneden


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 19:26
Superdeboer schreef op woensdag 02 november 2005 @ 10:43:
[...]

Hij bedoelt waarschijnlijk dat NewsID rechtstreeks zonder checks uit de GET-parameter komt en zo direct in de WHERE-clause van die queries wordt gebruikt. Dit is pas een groot probleem als register_globals op on staat in je php.ini.
register_globals heeft er in dit geval vrij weinig mee te maken? Zo lang $NewsID niet tussen quotes geplaatst wordt, of beter, gechecked met is_numeric() valt er SQL te injecten.

Acties:
  • 0 Henk 'm!

  • dajappie
  • Registratie: Januari 2005
  • Laatst online: 13:10
Waarom neem je je hele SQL UPDATE code niet op in je nieuwsoverzicht-pagina en laat je je edit-form daarnaar verwijzen? Dus action="index.php" of iets vergelijkbaars i.p.v. naar zichzelf? Dat bespaart je veel gerommel met headers...

Acties:
  • 0 Henk 'm!

  • Superdeboer
  • Registratie: December 2002
  • Niet online

Superdeboer

Sa-weee-tah

Purechaos schreef op zaterdag 05 november 2005 @ 00:53:
register_globals heeft er in dit geval vrij weinig mee te maken? Zo lang $NewsID niet tussen quotes geplaatst wordt, of beter, gechecked met is_numeric() valt er SQL te injecten.
Sorry, ik was zelf op dat moment met wat dingen van register_globals aan het vechten; ik bedoelde uiteraard als magic_quotes uit staat en je doet verder geen checks op die userinput. My bad. ;)

When I write my code, only God and I know what it means. One week later, only God knows.
Hell yes it's a Cuban Cigar, but I'm not supporting their economy, I'm burning their fields.


Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

DDemolition schreef op vrijdag 04 november 2005 @ 20:26:
PHP:
1
echo "<META HTTP-EQUIV=Refresh Content=0;URL=home.php>";

mischien iets?

't was toch home.php of niet?? 8)
Al maak je zo nog geen goede html (niet dat je het ziet, dus eik is het mierenneuken), maar metatags moeten in de <head>. Het werkt wel maar dat is nog geen geldige oplossing ;)

Outputbuffering is eigenlijk de meest 'nette' oplossing.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • simon
  • Registratie: Maart 2002
  • Laatst online: 00:18
krvabo schreef op zaterdag 05 november 2005 @ 16:23:
[...]

Al maak je zo nog geen goede html (niet dat je het ziet, dus eik is het mierenneuken), maar metatags moeten in de <head>. Het werkt wel maar dat is nog geen geldige oplossing ;)

Outputbuffering is eigenlijk de meest 'nette' oplossing.
neuh, zorgen dat er niets voor de header komt, veel beter. outputbuffering is maar omslachtig, kun je het beter in 1 keer goed doen.

|>


Acties:
  • 0 Henk 'm!

Verwijderd

Purechaos schreef op zaterdag 05 november 2005 @ 00:53:
[...]

register_globals heeft er in dit geval vrij weinig mee te maken? Zo lang $NewsID niet tussen quotes geplaatst wordt, of beter, gechecked met is_numeric() valt er SQL te injecten.
En als de TS nou in een include het volgende heeft staan:

foreach($_GET as $key=>$value) {

$_GET[$key] = valdiatie_functie($value);

}

Dan kan je wel $_GET[] in je SQL gebruiken zonder een SQL injection te krijgen (als de validatie functie juist is ;) ) Uiteraard denk ik niet dat de TS zo'n oplossing heeft.
$NewsID hoeft dan niet tussen quotes te staan...

Verder zou ik absoluut niet alleen $_SERVER['HTTP_REFERER'] gebruiken, als je een programma hebt die referers afschermt in de browser heb je er niets aan...

Tip: url meegeven in de form mbv een hidden field, weet je zeker dat je de url krijgt waaarvan hij komt.

Alleen JS voor een redirect gebruiken is ook niet echt handig, als je JS uit hebt staan valt hij dood neer...

Acties:
  • 0 Henk 'm!

Verwijderd

Het lijkt wel alsof men de onderlinge discussies interessanter vind dan het onderwerp van het topic.. Maar in ieder geval @ TS, probeer abstract te denken. Wat wil je dat er gebeurd? Je wilt, indien je geen data ontvangt, een formulier tonen waarmee een gebruiker - na verzending - bepaalde velden in een database wijzigt. Oftewel,

- als je geen data ontvangen hebt, toon je een formulier zonder extra headers of refresh metatags
- als je wel data ontvangen hebt, test dit overigens vooral níet door de waarde van je submit-element te checken maar bijvoorbeeld door een hidden field te definieren, dan wil je dat de database een update ondergaat met behulp van de - gecontroleerde! - form variabelen en wil je tevens of extra headers versturen of een refresh laten plaatsvinden met behulp van een metatag.

Klinkt vrij simpel - en logisch, toch?
Succes!

(headers en de refresh metatag)

Hap-slik-weg :Y)

/me is weer veel te goed op de zaterdagavond

[ Voor 4% gewijzigd door Verwijderd op 05-11-2005 21:47 ]

Pagina: 1