Avatar billede r.hegaard Nybegynder
16. august 2004 - 23:10 Der er 5 kommentarer og
1 løsning

Problemer med textarea som sendes til php

Jeg har en lavet en kode, som jeg har lidt problemer med.
Koden skal gerne indsætte et "å" mellem to tabulatorstop, hvis de kommer lige efter hinanden og så skal den indsætte et "å" i slutningen af linien, hvis det sidste tegn er et tabulatorstop.
Det virker desværre ikke helt som det skal, når variablen $text bliver defineret fra et textarea ved at klikke på knappen "Vis". Hvis derimod definerer variablen $text direkte, ved at fjerne "//" i fjerde linie og klikke på "Vis", så virker det helt som det skal.
Hvad gør forskellen og hvordan får jeg det til at virke ordentligt, når det kommer fra et textarea ??

Koden er følgende (tabulatorstop er her erstattet med ¤, da flere tabulatorstop i træk, ikke ville blive vist rigtigt her):
<?
if($vis == "ok")
{
//    $text = "1¤XXO¤XO¤XXX¤¤\n2¤XO¤XO¤XO¤XXO¤XXX\n3¤XO¤XXX¤¤¤\n";

    $text = str_replace("¤\n","¤å\n",$text);
    $text = str_replace("¤¤","¤å¤",$text);
    $text = str_replace("¤¤","¤å¤",$text);

    $opdel = explode("\n",$text);

    for($i=0;$i<count($opdel);$i++) $opdel2[$i]  = explode("¤",$opdel[$i]);

    echo "<pre>\n";
    for($i=0;$i<count($opdel2);$i++) {
        for($ii=0;$ii<count($opdel2[$i]);$ii++) {
            echo $opdel2[$i][$ii]."¤";
        }
        echo "\n";
    }
    echo "</pre>";

    for($i=0;$i<count($opdel);$i++) {
        for($i=0;$i<count($opdel);$i++) {
            $opdel2[$i]  = explode("¤",$opdel[$i]);
        }
    }
}

echo <<<END_HTML
<form name="form1" action="$PHP_SELF?vis=ok" method="post">
<textarea name="text" cols="50" rows="5">
1¤XXO¤XO¤XXX¤¤
2¤XO¤XO¤XO¤XXO¤XXX
3¤XO¤XXX¤¤¤
</textarea><br>
<input type="submit" name="Submit" value="Vis">
END_HTML;
?>
Avatar billede dennismp Nybegynder
16. august 2004 - 23:24 #1
Hvordan taster du en tab ind? Jeg kan ikke med opera, uden den hopper ud af textarea'et.. Tror du ikke problemet er i samme dur for dig? Er du sikker på at du får lavet tabs (at de evt ikke bliver lavet om til mellemrum?

Du kan evt prøve at submitte et tab via textarea - og så bruge
print ord($text); for at se hvilken ascii værdi den (første karakter) har. (Det burde være 9)..
Avatar billede detox Nybegynder
16. august 2004 - 23:30 #2
Prøv med stripslashes() og \r\n istedet for \n:

<?
if(isset($_GET['vis']) && $_GET['vis'] == "ok")
{
//    $text = "1¤XXO¤XO¤XXX¤¤\n2¤XO¤XO¤XO¤XXO¤XXX\n3¤XO¤XXX¤¤¤\n";
    $text = stripslashes($_POST['text']);
    $text = str_replace("¤\r\n","¤å\r\n",$text);
    $text = str_replace("¤¤","¤å¤",$text);
    $text = str_replace("¤¤","¤å¤",$text);

    $opdel = explode("\r\n",$text);

    for($i=0;$i<count($opdel);$i++) $opdel2[$i]  = explode("¤",$opdel[$i]);

    echo "<pre>\n";
    for($i=0;$i<count($opdel2);$i++) {
        for($ii=0;$ii<count($opdel2[$i]);$ii++) {
            echo $opdel2[$i][$ii]."¤";
        }
        echo "\n";
    }
    echo "</pre>";

    for($i=0;$i<count($opdel);$i++) {
        for($i=0;$i<count($opdel);$i++) {
            $opdel2[$i]  = explode("¤",$opdel[$i]);
        }
    }
}

echo <<<END_HTML
<form name="form1" action="$_SERVER[PHP_SELF]?vis=ok" method="post">
<textarea name="text" cols="50" rows="5">
1¤XXO¤XO¤XXX¤¤
2¤XO¤XO¤XO¤XXO¤XXX
3¤XO¤XXX¤¤¤
</textarea><br>
<input type="submit" name="Submit" value="Vis">
END_HTML;
?>
Avatar billede detox Nybegynder
16. august 2004 - 23:32 #3
Men uha det ser indviklet ud ;o)
Avatar billede r.hegaard Nybegynder
16. august 2004 - 23:37 #4
Ja, det ser ud til at det virker. Jeg tester det lige lidt mere i morgen.
Kan du forklare lidt dybere, hvad de 2 følgende linier gør:
if(isset($_GET['vis']) && $_GET['vis'] == "ok")
$text = stripslashes($_POST['text']);

Hvad står \r for ??

Lægger du også lige et svar ??
Avatar billede detox Nybegynder
16. august 2004 - 23:49 #5
if(isset($_GET['vis']) && $_GET['vis'] == "ok")

er bare en nyere måde at tjekke om 'vis=ok' i url'en. Den bruger det superglobale $_GET array og sikrer samtig at man ikke refererer til en variabel, der ikke er sat.

$text = stripslashes($_POST['text']);

fjerner evt. backslashes (\) fra teksten. Det er ikke sikkert det er nødvendigt i dette tilfælde, men det skader ikke at bruge den. Her er osse brugt et superglobalt array nemlig: $_POST. Se mere om disse array's her:
http://dk2.php.net/manual/en/language.variables.predefined.php

'Ny linie' bliver angivet forskelligt på forskellige styresystemer. Nogen gange er det: \n og andre gange \r\n eller bare \r, det er lidt forskelligt.
Avatar billede r.hegaard Nybegynder
17. august 2004 - 17:32 #6
Mange tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester