Avatar billede Slettet bruger
07. juli 2009 - 15:09 Der er 10 kommentarer og
1 løsning

Problem med preview funktion med 2 forms

God eftermiddag..

Jeg er stødt på et lille problem i forbindelse med en preview-funktion til mit kommentarsystem og jeg kan i midlertidigt ikke selv komme på en løsning til det - så derfor prøver jeg at høre jer af ;)

Min preview funktion ser i korte udtræk ud som her:

------------------------------------------------------------------------------------------------
MINE 2 FORMS
------------------------------------------------------------------------------------------------

<?php
echo '<input type="hidden" name="reply" value="1" />';
echo '<input type="hidden" name="userid" value="'.$_SESSION['SESS_MEMBER_ID'].'">';
echo '<input type="hidden" name="username" value="'.$_SESSION['SESS_USERNAME'].'">';
echo '<input type="hidden" name="parentuserid" value="'.$_GET['puserid'].'">';
echo '<input type="hidden" name="id" value="'.$_GET['id'].'">';
echo '<input type="hidden" name="replyID" value="'.$_GET['replyTo'].'">';
echo '<textarea name="text" rows="10" cols="62" class="input3"></textarea><br/>';
echo '<div class="text5">';
echo '<input type="image" name="send" class="input" src="images/buttonpost.png" />';
echo '</form></div>';
       
echo '<form method="post" action="" style="display:inline">';
echo '<input type="hidden" name="preview" value="1" />';
echo '<div class="textpreviewbreak">';
echo '<input type="image" name="send" class="input" src="images/buttonpreview.png" />';
'</form></div>';       
}
?>

------------------------------------------------------------------------------------------------
MIN INDSÆTTELSE I DATABASE
------------------------------------------------------------------------------------------------

<?php
if(isset($_POST['reply'])){
så bliverkommentaren skrevet ind I database…
}
?>

------------------------------------------------------------------------------------------------
MIN PREVIEW FUNKTION
------------------------------------------------------------------------------------------------

<?php       
if(isset($_POST['preview'])){
echo '<br /><br /><br />';
echo '<ul><li>';
echo '<div class="message">';
echo '<div class="messagetitlepreview"><div class="kommentaroverskrift">Preview</div>';
echo '<div class="kommentardato"></div>';
echo '</div>';
echo '<br />';
echo '<div class="messagecontent">';
echo clean($_POST['text']);
echo '</div>';
echo '<br />';
echo '<div class="kommentarforfatter"></div>';
echo '<div class="kommentarsvar"></div>';
echo '</div>';
}
?>


Problemet:
Problemet opstår i at når jeg prøver at udskrive " clean($_POST['text'])" i min preview funktion udskriver den intet pga. at min textarea ved navn "text" hører til i den første form. Hvis jeg kopierer textareaen ned i den anden form virker det, men så har jeg to kommentarfelter, hvilket ikke ligefrem er optimalt :)

Hvordan får jeg løst dette?
Avatar billede repox Seniormester
07. juli 2009 - 15:36 #1
Du kan godt have to <input> elementer af typen submit/image.
<input type="submit" name="preview" value="Preview" />
<input type="submit" name="opret" value="Opret" />

<?php

if(isset($_POST["preview"]))
{

}
elseif(isset($_POST["opret"]))
{

}


?>
Avatar billede Slettet bruger
07. juli 2009 - 16:19 #2
Det har jeg også før prøvet på i stedet for at have to forms, men det fungerer heller ikke efter hensigten.

Hvis jeg prøver med:

<?php
echo '<form method="post" action="">';
echo '<input type="hidden" name="reply" value="1" />';
echo '<input type="hidden" name="preview" value="2" />';
echo '<input type="hidden" name="userid" value="'.$_SESSION['SESS_MEMBER_ID'].'">';
echo '<input type="hidden" name="username" value="'.$_SESSION['SESS_USERNAME'].'">';
echo '<input type="hidden" name="parentuserid" value="'.$_GET['puserid'].'">';
echo '<input type="hidden" name="id" value="'.$_GET['id'].'">';
echo '<input type="hidden" name="replyID" value="'.$_GET['replyTo'].'">';
echo '<textarea name="text" rows="10" cols="62" class="input3"></textarea><br/>';
echo '<div class="text5">';
echo '<input type="image" name="reply" class="input" src="images/buttonpost.png" />';
echo '</div>';
echo '<div class="textpreviewbreak">';
echo '<input type="image" name="prewiew" class="input" src="images/buttonpreview.png" />';
echo '</form></div>';
?>

<?php

if(isset($_POST["preview"]))
{
så vises preview...
}
?>

<?php
if(isset($_POST["reply"]))
{
så skrives der til databasen
}
?>


Så skriver den til databasen uanset om jeg trykker på reply knappen eller preview knappen.. Hvis jeg så prøver at fjerne:

echo '<input type="hidden" name="reply" value="1" />';
echo '<input type="hidden" name="preview" value="2" />';

Så sker der ingenting når man trykker på nogle af knapperne udover den "reloader" siden..
Avatar billede Slettet bruger
07. juli 2009 - 16:28 #3
.. og jeg har også fjernet den stavefejl, der var i preview-knappen, men lige lidt hjalp det :(
Avatar billede Slettet bruger
07. juli 2009 - 16:38 #4
Jeg har selv fundet problemet nu repox..

Det virker som det skal, hvis jeg benytter mig af inputs med type="submit", men ikke når jeg bruger billeder (type="image")..

Var du sikker på at man også kunne gøre det med billeder ? I så fald - hvordan?
Avatar billede repox Seniormester
07. juli 2009 - 18:49 #5
Det virker fint:

<form method="post" action="">

        <div>
        <input type="image" name="preview" value="Preview" />
            <input type="image" name="opret" value="Opret" />   
        </div>
        </form>
       
        <pre>
                <?php print_r($_POST); ?>
        </pre>
Avatar billede Slettet bruger
07. juli 2009 - 20:50 #6
Så snart jeg prøver den der får jeg blot:

Array
(
    [userid] => 1
    [username] => PSJ
    [parentuserid] => 1
    [id] => 154
    [replyID] => 0
    [text] => ttt
    [preview_x] => 22
    [preview_y] => 5
)

Her laver den altså bare nogle vilkårlige x/y værdier i preview.. Men hvis jeg laver type om til "submit" virker det igen fint som det skal:

Array
(
    [userid] => 1
    [username] => PSJ
    [parentuserid] => 1
    [id] => 154
    [replyID] => 0
    [text] => tttttttttttt
    [preview] => preview
)
Avatar billede repox Seniormester
07. juli 2009 - 22:10 #7
Her kommer guldet:
<?php
if(isset($_POST["preview"]) || isset($_POST["preview_x"]))
{

}
elseif(isset($_POST["post"]) || isset($_POST["post_x"]))
{

}


?>
Avatar billede Slettet bruger
07. juli 2009 - 22:38 #8
Jeps okay, så virker det godt nok når man gør det på denne måde.. Virker bare mystisk at det er nødvendigt synes jeg =)

En helt anden ting er at jeg ikke ved om jeg i stedet skal kaste mig ud i noget javascript.. Når preview-knappen bliver brugt "refresher" siden jo og så er man i toppen af siden, hvilket ikke er så hensigtsmæssigt.. Her ville jeg gerne have haft at man kørte ned til preview delen :/

Jeg har selv smidt en ancor ind i bunden ved preview delen:
<a id="#preview"></a>

Men eneste måde jeg lige kan komme i tanke på at man skal køre derned er ved at smide en header på + #preview.. Problemet er så bare her at den ikke gemmer oplysningerne fra textfeltet og jeg er ikke lysten i at smide det i en querystring... Eneste anden udvej jeg lige kan komme i tanke om er ved at gemme teksten i en session, men vil de ikke overlappe hinanden, hvis flere brugere benytter sig af preview knappen samtidigt?
Avatar billede Slettet bruger
07. juli 2009 - 23:40 #9
Nej okay.. Jeg prøver at kigge videre på det..

Men smid et svar så du ka få points ;)
Avatar billede repox Seniormester
07. juli 2009 - 22:58 #10
Nej, så har du ikke helt forstået konceptet med sessions.
En session er kun tilknyttet én klient, og sessions 'overlapper' ikke hinanden - hvis det var muligt, var det geniale ved sessions pludselig undermineret.

Så der er i princippet ikke noget i vejen for at gemme det postede i en session.

Men ja, fiks det ved at bruge en header der referer til dit anchor. Det fungerer fint, der er ingen grund til ikke at bruge det. For mig er det en bedre løsning end at forlade sig på javascript. Javascripten kan komme ind bagefter, for at give brugerne en bedre oplevelse af interfacet, men med sådan nogle systemer her, er det vigtigt at der er noget systemet kan falde tilbage på. imho.
Avatar billede repox Seniormester
08. juli 2009 - 08:40 #11
Jamen, værsgo' :)
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