[PHP]Meta-refresh maar niet in meta

Pagina: 1
Acties:
  • 69 views sinds 30-01-2008

  • sjaakaq
  • Registratie: September 2003
  • Laatst online: 17-04 10:24

sjaakaq

It might get loud

Topicstarter
Ik heb voor een gastenboek (onder andere) dit scriptje 'geleend' van hotscripts:
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
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
<?php
/*
Aplomb Guestbook - Version 2.0
Copyright (C) 2002 Aplomb Scripts
http://www.global-centre.com/aplomb/

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

// Include the Configuration
require "config.php";

// Include the Header
require "templates/header.inc";

// Checks if the user wants to view the form or add a entry
if (
$_SERVER['REQUEST_METHOD'] == 'POST' ) {

             // Make sure the script works if register_globals is off
             $name = $HTTP_POST_VARS['name'];
             $post = $HTTP_POST_VARS['post'];

             // Process the Information Entered and Remove Stuff
             $post = strip_tags($post, $allowed_html_tags); // Strip HTML
             $post = stripslashes($post); // Strip Slashes

             // Define the Time and the IP
             $time = date("F jS Y, h:iA");
             $ip = $REMOTE_ADDR;  

             if ($addtotop == "0" ) {

                          // Writes the user's entry to a file
                          $fp = fopen("db/posts.php",  "a");  
                          fputs($fp, "<p><span class=\"post\"><b>Gepost door: " . $name . "</b><br>" . $post . "</span></p><p></p>");
                          fclose($fp);

             }

             if ($addtotop == "1" ) {

                          // Get all the current entries and put it in a string
                          $att1 = "db/posts.php";
                          $att2 = fopen ($att1, "rb");
                          $currententries = fread ($att2, filesize ($att1));
                          fclose ($att2);

                          // Writes the user's post to a file
                          $fp = fopen("db/posts.php",  "w+");  
                          fputs($fp, "<p><span class=\"post\"><b>Gepost door: " . $name . "</b><br>" . $post . "</span></p><p></p>".$currententries);
                          fclose($fp);

             }

             // Thank user for post
             echo "Bericht geplaatst<br><a href=\"view.php\"><br>Ga terug</a><br><br>";

} else {
require "templates/post_form.inc";
}

// Include the Footer
require "templates/footer.inc"
?>

Wat er dus gebeurd is dat het eerder ingevulde bericht in de DB wordt gezet. Dan krijg je een link met 'ga terug'. Dit wil ik echter niet, ik wil dat de user automatisch teruggaat. Dit zou kunnen met een META-refresh, maar als ik die bovenaan zet dan wordt de code niet uitgevoerd (toch?) zodat het bericht niet geplaatst wordt. Wat ik dus eigenlijk wil is dat er op of na deze regel:
PHP:
1
 echo "Bericht geplaatst<br><a href=\"view.php\"><br>Ga terug</a><br><br>";

iets komt, waardoor de user naar een ander php document wordt verwezen, wat geplaatst wordt over 'dit document heen' (target="_self") in het iframe waar het in staat.

Het script in de praktijk is te vinden op www.supersop.nl onder het kopje "sop-outs".

Alvast bedankt!

leoaq.fm // Jeune Loop


  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 14:20

glashio

C64 > AMIGA > PC

Ik zie in je CODE nergens <HEAD><BODY> enz... dus hoe kunnen wij nu zeggen dat jij een META-REFRESH doet in je HEAD :?

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Verwijderd

iets in de richting van JavaScript zou je kunnen proberen... weet de exacte syntax niet helemaal uit mn hoofd, maar dat zou moeten gaan lijken op:
JavaScript:
1
2
3
<script type="text/javascript">
  document.self.location = "pagina.php"
</script>

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
PHP:
1
 echo "Bericht geplaatst<br><a href=\"view.php\"><br>Ga terug</a><br><br>";


Vervangen door een 'header' redirect vanuit php (dus het posthandling script)
PHP:
1
2
header("Location: http://www.domein.nl/gahier.html\n\n");
exit(0);

  • sjaakaq
  • Registratie: September 2003
  • Laatst online: 17-04 10:24

sjaakaq

It might get loud

Topicstarter
glashio schreef op 26 april 2004 @ 16:03:
Ik zie in je CODE nergens <HEAD><BODY> enz... dus hoe kunnen wij nu zeggen dat jij een META-REFRESH doet in je HEAD :?
Hmm nee het is wel gewoon een PHP document waarin HTML code (dus ook <HEAD> enz.) werken.

Maar ik doe dus geen META-REFRESH omdat ik dan bang ben dat de refresh komt vóórdat de code is uitgevoer. En als ik een META-REFRESH doe van 10 seconden oid dan heb je er weinig aan, dan kun je beter op een link klikken ;)

Ik wil dus dat op het gegeven punt in de code een ander document geladen wordt.

leoaq.fm // Jeune Loop


  • pistole
  • Registratie: Juli 2000
  • Laatst online: 08:46

pistole

Frutter

ehh

als buffering aanstaat wordt sowieso eerst je code uitgevoerd voordat het naar de brahser gaat...

Ik frut, dus ik epibreer


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 01:17
Je hele php script wordt gewoon uitgevoerd ook al stuur je een meta refresh naar de browser.

Verwijderd

@TS: Je hebt het kennelijk niet eens even geprobeerd.

Maar die meta refresh zooi is een beetje een geval apart. Ik ben van mening dat je zulke dingen beter met een stukje javascript kunt doen. En dat is dus wel onload, niet zomaar in je code kwakken dat er een andere pagina geladen moet worden.

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 14:20

glashio

C64 > AMIGA > PC

leokennis schreef op 26 april 2004 @ 16:08:
Ik wil dus dat op het gegeven punt in de code een ander document geladen wordt.
PHP:
1
2
header("Location: http://www.domein.nl/gahier.html\n\n");
exit(0);

Zal na enige OUTPUT (echo,print_r) NIET meer werken ivm verzonden Headers..
code:
1
<SCRIPT>document.location.href='nieuwscript.php';</SCRIPT>

Dit kan je OUTPUT'en tussen de bestaande HTML door ;)

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

PHP:
1
header("Refresh: 1;http://www.google.com");

:?

  • sjaakaq
  • Registratie: September 2003
  • Laatst online: 17-04 10:24

sjaakaq

It might get loud

Topicstarter
Beetle71: met jouw methode krijg ik terug:
Warning: Cannot modify header information - headers already sent by (output started at c:\domains\supersop.nl\wwwroot\Gastenboektest\templates\header.inc:3) in c:\domains\supersop.nl\wwwroot\Gastenboektest\sign.php on line 69

leoaq.fm // Jeune Loop


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 19:24
leokennis schreef op 26 april 2004 @ 16:13:
Beetle71: met jouw methode krijg ik terug:
[...]line 69[/b]
Wat staat er dan al boven header() ?

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

leokennis schreef op 26 april 2004 @ 16:13:
Beetle71: met jouw methode krijg ik terug:
Warning: Cannot modify header information - headers already sent by (output started at c:\domains\supersop.nl\wwwroot\Gastenboektest\templates\header.inc:3) in c:\domains\supersop.nl\wwwroot\Gastenboektest\sign.php on line 69
conclusie, je moet een vorm outputbuffering toepassen :)

  • sjaakaq
  • Registratie: September 2003
  • Laatst online: 17-04 10:24

sjaakaq

It might get loud

Topicstarter
Glashio:
Parse error: parse error, unexpected '<' in c:\domains\supersop.nl\wwwroot\Gastenboektest\sign.php on line 69

OK ik zal eerst een META-REFRESH proberen...

leoaq.fm // Jeune Loop


  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 14:20

glashio

C64 > AMIGA > PC

Erkens schreef op 26 april 2004 @ 16:15:
conclusie, je moet een vorm outputbuffering toepassen :)
Geen lapmiddelen gebruiken...
Dat is oplossingen ROND bestaande problemen/fouten maken ;)
[Wet van Programeren]
Je moet het constructief oplossen ;)
[/Wet van Programeren]
leokennis schreef op 26 april 2004 @ 16:16:
Glashio:
Parse error: parse error, unexpected '<' in c:\domains\supersop.nl\wwwroot\Gastenboektest\sign.php on line 69
OK ik zal eerst een META-REFRESH proberen...
t'is
code:
1
echo "<SCRIPT>document.location.href='nieuwscript.php';</SCRIPT>";

<SCRIPT> = HTML ELEMENT!!! Geen PHP Functie!!!

[ Voor 45% gewijzigd door glashio op 26-04-2004 16:19 ]

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Verwijderd

Erkens schreef op 26 april 2004 @ 16:15:

conclusie, je moet een vorm outputbuffering toepassen :)
Mijn conclusie is anders. Mijn conclusie is dat de client een pagina te zien moet krijgen, en dat na een bepaalde tijd automatisch wordt geredirect naar een andere pagina. Dat klinkt als een client-side actie. En toch is het niet verplicht te redirecten. Ik stel voor om op die pagina gewoon een link naar de vervolgpagina te zetten, en een javascriptje te maken dat na een x aantal seconden redirect. Als de client het dan niet ondersteunt, dan geeft dat ook niets.
<SCRIPT> = HTML ELEMENT!!! Geen PHP Functie!!!
Ik heb eerlijk geen idee van wat je hier nu mee bedoelt.
Ah, ok, nu vat ik hem :)

[ Voor 14% gewijzigd door Verwijderd op 26-04-2004 16:23 ]


  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 14:20

glashio

C64 > AMIGA > PC

@Cheatah
leokennis schreef op 26 april 2004 @ 16:16:
Glashio:
Parse error: parse error, unexpected '<' in c:\domains\supersop.nl\wwwroot\Gastenboektest\sign.php on line 69

OK ik zal eerst een META-REFRESH proberen...
Daarvoor....

* glashio geeft Cheatah groot gelijk

[ Voor 161% gewijzigd door glashio op 26-04-2004 16:21 ]

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
Beetle71: met jouw methode krijg ik terug:
Warning: Cannot modify header information - headers already sent by (output started at c:\domains\supersop.nl\wwwroot\Gastenboektest\templates\header.inc:3) in c:\domains\supersop.nl\wwwroot\Gastenboektest\sign.php on line 69
Ahh, aan jouw script zag ik niet dat 'ie al html verstuurd voor dat punt, maar dat zal dus wel door de header.inc gebeuren.

Dit kun je oplossen door helemaal aan het begin van je code
PHP:
1
ob_start();

te zetten.

Maar op zich heeft cheatah wel een beetje gelijk ;)
Hoewel..., persoonlijk vindt ik het wel een voordeel als je dmv. de header redirect voorkomt dat je een 'pagina is verlopen' melding krijgt als je daarna op de backbutton drukt.. })

[ Voor 41% gewijzigd door beetle71 op 26-04-2004 16:25 ]


  • sjaakaq
  • Registratie: September 2003
  • Laatst online: 17-04 10:24

sjaakaq

It might get loud

Topicstarter
OK heel dom 8)7
Het script werkt vrij vreemd:
als je sign.php opent (dat is het bestand met de PHP code van hierboven) dan opent hij 'post_form.inc' Daarin staat een leuk formuliertje waar je je bericht moet posten én een submit knop. Als je daar op drukt voert hij de rest van sign.php uit (dus in de database zetten enz.). Als ik een meta-refresh doe van 1 seconde dan is na 1 seconde dat formuliertje dus ook weg 8)7

leoaq.fm // Jeune Loop


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

* Janoz heeft nog een andere conclusie :) :

Gewoon zorgen dat je niks output vorodat je die header zet.

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


  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 14:20

glashio

C64 > AMIGA > PC

beetle71 schreef op 26 april 2004 @ 16:21:
Dit kun je oplossen door helemaal aan het begin van je code
PHP:
1
ob_start();

te zetten.
waarom OUTPUT genereren als je het vervolgens weer leegt in je Output Buffer ( ivm HEADER() sturen ) :?
* glashio geeft OOK Janoz gelijk

[ Voor 7% gewijzigd door glashio op 26-04-2004 16:25 ]

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:01

Janoz

Moderator Devschuur®

!litemod

leokennis schreef op 26 april 2004 @ 16:23:
OK heel dom 8)7
Het script werkt vrij vreemd:
als je sign.php opent (dat is het bestand met de PHP code van hierboven) dan opent hij 'post_form.inc' Daarin staat een leuk formuliertje waar je je bericht moet posten én een submit knop. Als je daar op drukt voert hij de rest van sign.php uit (dus in de database zetten enz.). Als ik een meta-refresh doe van 1 seconde dan is na 1 seconde dat formuliertje dus ook weg 8)7
Zo werkt het niet. Probeer even goed voor de geest te halen waneer wat wordt uitgevoerd. Je complete script wordt uitgevoerd voordat het naar de browser wordt gestuurt. Jij vult je formulier in en vervolgens wordt weer het hele script uitgevoerd. Wat er precies gedaan wordt is de tweede keer echter anders aangezien er nu wel een formulier is. Waarschijnlijk staat ergens een if die kijkt of er wel of geen submit is.

Het is dus niet zo dat het verwerken van je script op pauze wordt gezet en verder gaat zodra het formulier is gesubmit.

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


  • sjaakaq
  • Registratie: September 2003
  • Laatst online: 17-04 10:24

sjaakaq

It might get loud

Topicstarter
Beetle71: zelfde error als eerst :?

BTW sorry dat ik niet constructief kan meedenken, ik weet echt 0,0 van PHP....

Maar tot nu toe iig bedankt voor de posts!

leoaq.fm // Jeune Loop


Verwijderd

leokennis schreef op 26 april 2004 @ 16:23:
Als ik een meta-refresh doe van 1 seconde dan is na 1 seconde dat formuliertje dus ook weg 8)7
Wil je nu wél of geen resultaatpagina laten zien na het submitten? Eén seconde is wel heel erg kort, dat zou ik eerder op 3 of 5 seconden houden. Als je juist wilt dat er zo snel mogelijk geredirect wordt, genereer dan gewoon geen output en gebruik in dat geval wél een location header. Dat moet je dus niet doen als je wél output wilt laten zien.

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 14-05 15:52
glashio schreef op 26 april 2004 @ 16:23:
[...]

waarom OUTPUT genereren als je het vervolgens weer leegt in je Output Buffer ( ivm HEADER() sturen ) :?
* glashio geeft OOK Janoz gelijk
Daar heb je een punt >:)

Maar goed, volgens mij maakt het hier niet zoveel uit waar je je output opslaat. In een variabele of in de buffer.
Maar het is inderdaad netter om eerst je post te verwerken en dan te kijken of en wat je wilt outputtten.

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 14:20

glashio

C64 > AMIGA > PC

leokennis schreef op 26 april 2004 @ 16:26:
ik weet echt 0,0 van PHP....
T'is mooi weer vandaag 8) Dus ik help graag.
leokennis schreef op 26 april 2004 @ 16:35:
@Glashio: die lees ik nog wel eens ;)
Liefst voordat je gelijksoortige Topic opend ;)

[ Voor 34% gewijzigd door glashio op 26-04-2004 16:46 ]

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


  • sjaakaq
  • Registratie: September 2003
  • Laatst online: 17-04 10:24

sjaakaq

It might get loud

Topicstarter
Verwijderd schreef op 26 april 2004 @ 16:27:
[...]

Wil je nu wél of geen resultaatpagina laten zien na het submitten? Eén seconde is wel heel erg kort, dat zou ik eerder op 3 of 5 seconden houden. Als je juist wilt dat er zo snel mogelijk geredirect wordt, genereer dan gewoon geen output en gebruik in dat geval wél een location header. Dat moet je dus niet doen als je wél output wilt laten zien.
Nu gaat het zo: gebruiker gaat van view.php naar sign.php via een normale link. Daar typt hij een bericht (het FORM daarvoor staat in post_form.inc) sign.php zet het bericht vervolgens in de database. Daarna 'echo't' sign.php een link die je terugvoert naar view.php. Ik wil dat de users niet op die link hoeft te klikken, en dat ze na het plaatsen van het bericht meteen naar view.php worden 'teruggebracht'. Op view.php, die de resultaten uit de database laat zien, staat hun bericht er dan dus mooi bij.

@Glashio: die lees ik nog wel eens ;)

Nee serieus, ik denk niet dat ik dan al gelijk dit kan oplossen (of ik heb er 2 weken voor nodig en das wat lang....voor dit probleem)

[ Voor 8% gewijzigd door sjaakaq op 26-04-2004 16:36 ]

leoaq.fm // Jeune Loop


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:56

.oisyn

Moderator Devschuur®

Demotivational Speaker

leokennis schreef op 26 april 2004 @ 16:01:
Ik heb voor een gastenboek (onder andere) dit scriptje 'geleend' van hotscripts:
Ten eerste is het een heel basic vraag, ten tweede gaan we geen hulp verlenen voor code die je ergens anders vandaan hebt gehaald. Hier in P&W programmeren wij onze dingen namelijk zelf. Veel succes ermee :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.