[PHP] Kunnen geen enters aan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
--01.php3--

<?
echo"<form action=01.php3 method=post>";
echo"<textarea cols=40 rows=8 name=test>$test</textarea>"

if($test){
header("Location: 02.php3?test=$test");
}
?>

--02.php3--
<?
echo"$test";
?>

Het maakt niet uit wat voor functies je erop los gooit: nl2br, htmlspecialchars.. Als je enters zet in $test, en je verstuurd hem op deze manier.. Dan zal het gedeelte na de enters wegvallen.. Als ik bijvoorbeeld dit intik:
Dit is

een test

Dan zal bovenin je balk (na het verzenden) staan: 02.php3?test=Dit%20is.. En dus wordt dit geprint:
Dit is

Hoe kan ik ervoor zorgen dat het gedeelte na de enter ook weer wordt gegeven?

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

en urlencode? de functie die er dus voor bedoeld is?

[ Voor 38% gewijzigd door Bosmonster op 14-12-2002 17:48 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Met urlencode, worden alle enters weggekapt.. Kan ik het niet zo houden dat die enters en de tekst blijven staan?

[ Voor 177% gewijzigd door Verwijderd op 14-12-2002 17:53 ]


Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
ja he?

je moet in de form tag method=post zetten.

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Verwijderd schreef op 14 december 2002 @ 17:39:


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
echo"<form action=01.php3 method=post>";
echo"<textarea cols=40 rows=8 name=test>$test</textarea>"

if($test){
header("Location: 02.php3?test=$test");
}
?>

// 02.php3
<?
echo"$test";
?>


Het maakt niet uit wat voor functies je erop los gooit: nl2br, htmlspecialchars.. Als je enters zet in $test, en je verstuurd hem op deze manier.. Dan zal het gedeelte na de enters wegvallen.. Als ik bijvoorbeeld dit intik:
Dit is

een test

Dan zal bovenin je balk (na het verzenden) staan: 02.php3?test=Dit%20is.. En dus wordt dit geprint:
Dit is

Hoe kan ik ervoor zorgen dat het gedeelte na de enter ook weer wordt gegeven?
• Zet je code tussen php-tags
• Gebruik $_POST en $_GET als je met PHP 4 werkt, anders heb je kans dat het zowieso niet wil als je het op een server zet met register_globals op off.
• Gebruik post in plaats van get om lange gegevens te versturen. Get in principe alleen gebruiken voor parameters aan de pagina (bijvoorbeeld aantal berichten, topicnummer, maar *NOOIT* tekst).

:) en natuurlijk www.php.net

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ejz.. Alsjeblieft.. Geef even een antwoord waar ik wat aan heb.. Hier kan ik niks mee.. Lees de vraag eens goed, of probeer het zelf uit..

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
volgens mij moet je met een post actie ook een submit knopje op je form zetten.

dan hoor je wel de enters krijgen, en komt er niks in de url te staan
dus helemaal geen bla.php?blas=asdf (dus je gebruikt dan geen header)

verder mis ik een </FORM> (niet dat dat uitmaakt hoor)

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Je moet niet zo erg kijken naar het stukje script dat ik neer heb gezet (ik weet heus wel hoe dat moet), maar meer naar het probleem..

(Ennuh, ik werk wel met test=$test, omdat dat een functie heeft in mijn script), ik controleer namelijk of alles is ingevuld)

[ Voor 33% gewijzigd door Verwijderd op 14-12-2002 18:26 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 14:20
Verwijderd schreef op 14 December 2002 @ 18:16:
Ejz.. Alsjeblieft.. Geef even een antwoord waar ik wat aan heb.. Hier kan ik niks mee.. Lees de vraag eens goed, of probeer het zelf uit..
MisterData geeft een advies waar je juist wat aan hebt! Je wordt er een betere PHP programmeur door en dan kun je dit soort problemen in de toekomst vermijden! Je wordt er trouwens ook een betere GoT gebruiker door, iets wat je van het argumentloos bekritiseren van gerespecteerde authoriteiten niet kunt zeggen.

Overigens raakt /dev/null's opmerking kant noch wal. Zoals Bosmonster al zei, zou het met urlencode prima mogelijk moeten zijn om willekeurige tekenreeksen, zelfs al zitten er spaties of new-line karakters in, te coderen. Jij zegt dat het niet werkt, maar wat gaat er precies mis?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Enters worden geascaped, ze worden weggehaald met urlencode.. Ik wil dat de enters blijven staan en dat de gegevens blijven staan..

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Verwijderd schreef op 14 december 2002 @ 18:35:
Enters worden geascaped, ze worden weggehaald met urlencode.. Ik wil dat de enters blijven staan en dat de gegevens blijven staan..
een oplossing zou zijn om enters te vervangen door bijvoorbeeld '--blaat--' en dat later weer terug te veranderen.

niet echt profesioneel, maar het werkt wel

[ Voor 8% gewijzigd door BasieP op 14-12-2002 18:39 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe krijg ik de enters te pakken??

$vraag = str_replace("--blaat--", "<br>", $vraag);, of \n werkt niet..

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Verwijderd schreef op 14 December 2002 @ 18:25:
Je moet niet zo erg kijken naar het stukje script dat ik neer heb gezet (ik weet heus wel hoe dat moet), maar meer naar het probleem..

(Ennuh, ik werk wel met test=$test, omdat dat een functie heeft in mijn script), ik controleer namelijk of alles is ingevuld)
offtopic:
GoT != Helpdesk || scriptlibrary

een beetje inzet van jouw kant mag wel :)


Over je probleem: zoals je weet zijn er twee methoden om vars vanuit een andere pagina in PHP te krijgen via een HTTP request: POST en GET (en eigenlijk ook nog cookie, maar dat is nu even niet belangrijk). Een url met GET-parameters ziet er altijd zo uit:

http://www.domein.tld/file.php?param=value&param2=value2

Nou komt het eerste probleem al in beeld. Je wilt bijvoorbeeld een / in een value hebben:

http://www.domein.tld/file.php?param=werwer/werwer

Dit gaat niet goed (de webserver weet nu niet welk bestand er geopend moet worden), en dus is er urlencoding uitgevonden. Een spatie wordt bijvoorbeeld %20, en zo hebben alle 'verboden' tekens een eigen code.

Probleem met Get is dat het een maximale lengte heeft (tenminste in IE, ik had er eerst ook last van) en dat alles in de URL komt te staan. Er is een oplossing: de post-methode. Je moet in je form aangeven dat je POST gebruikt, namelijk als volgt:

PHP:
1
2
3
<form action="script_dat_iets_doet.php" method="post">
<!--  de rest mag hier -->
</form>


Wanneer je nu het form submit, zul je zien dat de vars niet meer in de URL staan, maar onzichtbaar worden doorgegeven aan de server. Probleem opgelost, want POST kan wel overweg met enters (de data wordt immers niet meer in de URL meegegeven, maar met de HTTP-header)

Nog even over wat ik zei over $_GET en $_POST: normaal gesproken komen zowel de vars die je in GET meegeeft, als die die je met post meegeeeft in een PHP variabele terecht:

file.php?param1=value1

resulteert in een $param1 met als value "value1". In PHP4 is het gebruikelijk om niet meer erop te vertrouwen dat een parameter in een PHP-var is gegooid, maar om je parameters uit een array (namelijk $_GET[] en $_POST[]) te halen. In plaats van:

PHP:
1
2
3
<?php
register_user($username,$password);
?>


(waarin je dus erop vertrouwd dat $username en $password vars zijn die als param zijn doorgegeven)

schrijf je dus:

PHP:
1
2
3
4
5
6
<?php
$username = $_GET['username']; /// of natuurlijk $_POST['username'] als je post gebruikt

$password = $_GET['password'];
register_user($username,$password);
?>



Duidelijk zo?

[ Voor 6% gewijzigd door MisterData op 14-12-2002 19:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik snap wat je bedoelt, alleen werkt het ook zo niet..

Hoe krijg ik de enters te pakken??

$test = str_replace("--blaat--", "<br>", $test);, of \n werkt niet..

[ Voor 51% gewijzigd door Verwijderd op 14-12-2002 19:15 ]


Acties:
  • 0 Henk 'm!

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 16-08 17:16
In dit soort gevallen (php controleert of alles is ingevuld) is het het handigst om het oorspronkelijke formulier weer te includen als er wat ontbreekt, met een foutmelding er bij. Op die manier hoef je ook niet je $test weer mee te geven aan je error-pagina.

Voorbeeld:
form.php:
code:
1
2
3
4
5
<?php echo $error; ?>
<form action="check.php" method="post">
<input type="text" name="naam">
<textarea cols=40 rows=8 name=test><?php echo $test; ?></textarea>
</form>

check.php:
PHP:
1
2
3
4
5
6
if (!$naam) {
$error = "je hebt je naam niet ingevuld";
include('form.php');
} else {
// redirect naar bedankt-pagina
}

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Verwijderd schreef op 14 december 2002 @ 19:13:
Ik snap wat je bedoelt, alleen werkt het ook zo niet..

Hoe krijg ik de enters te pakken??

$test = str_replace("--blaat--", "<br>", $test);, of \n werkt niet..
Als je je vars met $_POST in een var in php zet, dan zitten de enters erin als \r\n hoor :) Moet je wel post gebruiken. Dan kun je met nl2br de \r\n omzetten naar een <br/>

[ Voor 11% gewijzigd door MisterData op 14-12-2002 21:05 ]


Acties:
  • 0 Henk 'm!

  • Delpix
  • Registratie: September 2001
  • Laatst online: 27-11-2021

Delpix

Alanis Fan

Verwijderd schreef op 14 December 2002 @ 19:13:
Ik snap wat je bedoelt, alleen werkt het ook zo niet..

Hoe krijg ik de enters te pakken??

$test = str_replace("--blaat--", "<br>", $test);, of \n werkt niet..
PHP:
1
$test = ereg_replace("\n","--HIER WAT DE ENTER MOET WORDEN--",$test);

...beter bekend als AMFan


Acties:
  • 0 Henk 'm!

  • SuperRembo
  • Registratie: Juni 2000
  • Laatst online: 20-08 14:36
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php

    $text = isset($_POST['text']) ? $_POST['text'] : '';

?>
<html> 
<body>

<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
    <textarea name="text" cols="100" rows="10"><?= htmlentities($text) ?></textarea><br>
    <input type="submit" value="Submit">
</form>

</body>
</html>


Zo krijg je de tekst weer gewono terug zoals je 'm invoert. Geknoei met replace is nergens voor nodig.

| Toen / Nu


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 12:54

Bosmonster

*zucht*

MisterData schreef op 14 December 2002 @ 18:03:
[...]

• Gebruik $_POST en $_GET als je met PHP 4 werkt, anders heb je kans dat het zowieso niet wil als je het op een server zet met register_globals op off.


:P Volgens mij gebruikt ie aan zn bestandsextensie's te zien nog PHP3... Kwist niet dat dat nog serieus gebruikt werd ;)
Pagina: 1