Avatar billede jv Nybegynder
23. maj 2001 - 18:36 Der er 20 kommentarer og
1 løsning

Preview funktion

Jeg bruger nedenstående script til at indsætte nyheder på en hjemmeside. Systemet virker som det skal, men jeg kunne godt tænke mig en \"preview\" funktion.

Det vil sige istedet for den indsætter nyheden i databasen med det samme, så skal man først gennem en side hvor man kan se det indtastede. Herefter kan det godkendes eller man kan gå tilbage og rette.

Er der en der kan lave en sådan funktion eller give mig noget hjælp til det?

<? if (!$do) { ?>

<?
    $dato = date(\"j/n-Y\");
    mysql_connect($mysqlhost, $mysqlusr, $mysqlpass);
    mysql_select_db($dbname);
   
    if ($action == \"add\") {
        mysql_query(\"insert into nyheder (overskrift, text, dato) values (\'$overskrift\',\'$text\',\'$dato\')\");
        print \"Nyhed tilføjet databasen.\";
    }
    else {
        $script = getenv(\"SCRIPT_NAME\");
?>
        <form action=\"<? $php_self; ?>\" method=\"post\">
        <input type=\"hidden\" name=\"action\" value=\"add\">
        <input type=\"hidden\" name=\"do\" value=\"\">
             
        <small>Overskrift:</small><br>
        <input class=\"textbox\" type=\"text\" name=\"overskrift\" size=\"25\"><br>
        <small>Nyhed:</small><br>
        <textarea class=\"textbox\" rows=\"8\" cols=\"40\" name=\"text\"></textarea>
        <br>
        <input type=\"image\" name=\"submit\" value=\"send\" src=\"<? $DOCUMENT_ROOT ?>/images/send.png\" border=\"0\">
<? } ?>       
<? } ?>


<? if ($do == \"edit_news\") { ?>

<?
    mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
    mysql_select_db($dbname);
   
    if ($action == \"edit\") {
        mysql_query(\"update nyheder set overskrift=\'$overskrift\' where ID=\'$id\'\");
        mysql_query(\"update nyheder set text=\'$text\' where ID=\'$id\'\");
        print \"Nyheden er nu rettet.\";
    }
    else if ($action == \"view\") {
        $get = mysql_fetch_row(mysql_query(\"select * from nyheder where ID=\'$id\'\"));
        $script = getenv(\"SCRIPT_NAME\");
?>
          <form action=\"<? $php_self; ?>\" method=\"post\">
        <input type=\"hidden\" name=\"action\" value=\"edit\">
        <input type=\"hidden\" name=\"do\" value=\"edit_news\">
        <input type=\"hidden\" name=\"id\" value=\"<? echo \"$get[0]\"; ?>\">
        <small>Overskrift:</small><br>
        <input class=\"textbox\" type=\"text\" name=\"overskrift\" size=\"25\" value=\"<? echo \"$get[1]\"; ?>\"><br>
        <small>Nyhed:</small><br>
        <textarea class=\"textbox\" rows=\"5\" cols=\"30\" name=\"text\"><? echo \"$get[2]\"; ?></textarea><br>
        <input type=\"image\" name=\"submit\" value=\"send\" src=\"<? $DOCUMENT_ROOT ?>/images/knap_send.png\" border=\"0\">
        <?
    }
    else {
        $script = getenv(\"SCRIPT_NAME\");
        ?>
        Vælg på listen den nyhed, der skal rettes og tryk på knappen \"Send\".
        <p>
        <form action=\"<? $php_self; ?>\" method=\"post\">
        <input type=\"hidden\" name=\"action\" value=\"view\">
        <input type=\"hidden\" name=\"do\" value=\"edit_news\">
        <select class=\"textbox\" name=\"id\" size=\"15\">
        <?
            $get = mysql_query(\"select * from nyheder\");
            while ($stuff = mysql_fetch_array($get)) {
                print \"<option value=\\\"$stuff[0]\\\">$stuff[1]\\n\";
            }
        ?>       
        </select>
        <input type=\"image\" name=\"submit\" value=\"send\" src=\"<? $DOCUMENT_ROOT ?>/images/send.png\" border=\"0\">
<? } ?>
<? } ?>


<? if ($do == \"delete_news\") { ?>

<?
    mysql_connect($mysqlhost,$mysqlusr,$mysqlpass);
    mysql_select_db($dbname);
   
    if ($action == \"delete\") {
        mysql_query(\"delete from nyheder where ID=\'$id\'\");   
        print \"Nyhed slettet fra databasen.\";
    }
    else {
    $script = getenv(\"SCRIPT_NAME\");
        ?>
        Vælg på listen den nyhed der skal slettes.
        <p>
        <form action=\"<? $php_self; ?>\" method=\"post\">
        <input type=\"hidden\" name=\"action\" value=\"delete\">
        <input type=\"hidden\" name=\"do\" value=\"delete_news\">
        <select class=\"textbox\" name=\"id\" size=\"15\">
        <?
            $get = mysql_query(\"select * from nyheder\");
            while ($stuff = mysql_fetch_array($get)) {
                print \"<option value=\\\"$stuff[0]\\\">$stuff[1]\\n\";
            }
        ?>       
        </select>
        <input type=\"image\" name=\"submit\" value=\"send\" src=\"<? $DOCUMENT_ROOT ?>/images/send.png\" border=\"0\">
<? } ?>
<? } ?>
Avatar billede barefoot Nybegynder
23. maj 2001 - 19:26 #1
okay, du skal først sende dataene til en mellem side før de bliver kylet i databasen.
På den mellemside tager du de tilsendte variabler og udskriver dem på samme måde som du ville gøre det hvis de blve set af en bruger.

Så skal de sendes videre:


<?php
echo \"$overskfift<br>\";
echo $nyhed;
?>
<br>
<form action=\"filen_som_smider_skidtet_i_en_database.php\" amethod=\"post\">
<input type=\"hidden\" name=\"overskrift_ok\" value=\"<?php echo $overskrift; ?>\">
<input type=\"hidden\" name=\"nyhed_ok\" value=\"<?php echo $nyhed; ?>\">>
<input type=\"hidden\" name=\"prew_ok\" value=\"ok\">
<input type=\"submit\" value=\"godkend?\" name=\"prew_submit\">
</form>

Når man trykker på ok bliver det så sendt hen til den side som smider det i databasen

Så vil jeg iøvrigt gerne henvise til: http://www.eksperten.dk/spm/74977
Der kommer jeg faktisk med samme svar...
Hvis du læser det skulle det kunne forstås...
Avatar billede technux Nybegynder
23. maj 2001 - 19:56 #2
Kan du prøve at implementere det ind i min kode? Jeg har lidt problemer med at få det til at virke.
Avatar billede annika Nybegynder
23. maj 2001 - 19:58 #3
En smart måde er at have to databaser.

A: Database til at rette i og se preview.
B: Database til at vise verden.

Alt hvad din preview skal gøre, er at sætte en site-wide cookie. Dine scripts som bruger mysql skal så alle hente informationer om database og password fra et centralt sted. Her ser du om preview cookie er sat og vælger den rigtige database.

Du skal så også have en update funktion, som kopierer indhold af preview database over i den anden.
Avatar billede jv Nybegynder
23. maj 2001 - 20:01 #4
Hovsa jeg glemte at logge min ven ud efter han lånte min computer. Det \"Technux\" har skrevet er mig.
Avatar billede wizprod.com Nybegynder
23. maj 2001 - 21:18 #5
Hmmm lettere offtopic, men hvad mener du med sitewide cookie?? setcookie() gør det da heeelt automatisk!

MHT ovenstående så vil jeg ville altså slet ikke lave to tabeller!
Avatar billede annika Nybegynder
23. maj 2001 - 21:27 #6
En site-wide cookie er en cookie som kan læse i alle relevante subdirectories på domænet. Dvs. sat med path \"/\" eller lign.

To databaser er en suveræn løsning, hvis du vil lave mange ændringer til dit site. Du har nemlig også mulighed for at fortryde alle ændringer.
Avatar billede wizprod.com Nybegynder
23. maj 2001 - 21:43 #7
men man kunne vel sådan ogdå bare lave en if sætning inden i dokumentet, så man første gang fik hvis en form, man udfylder den, hvorefter man reloadersiden, men nu i en anden mode, nemlig prewiev.
Herfra kan så vælges at gå tilbage eller godkende
Avatar billede annika Nybegynder
23. maj 2001 - 21:48 #8
Yep, så har du preview på en side.
Jeg kan bedre lide ideen med preview på et helt site. Hvis man altså har brug for det.
Avatar billede jv Nybegynder
25. maj 2001 - 00:08 #9
Jeg vil mene det er lidt overkill for mig at anvende 2 databaser, da det pt. kun drejer som om dette ene script.

Er der ikke en af jer, der kan give et eksempel på Barefoot\'s kode implementeret i min? Kan simpelthen ikke få det til at virke.
Avatar billede barefoot Nybegynder
25. maj 2001 - 14:29 #10
Har du læst det som står i mit link?
Avatar billede jv Nybegynder
25. maj 2001 - 14:55 #11
Ja
Avatar billede barefoot Nybegynder
25. maj 2001 - 15:09 #12
Den kode som du har nu ligger du en fil som kunne hedde submit.php
Så laver du en fil som hedder indsend.php
Og en som hedder preview.php

submit.php skal ikke indeholde andet end den kode som du havde i starten.

indsend.php skal indeholde de <form> man skriver i.
Indholdet skal sendes til preview.php (action=\"preview.php\")

I preview.php udskriver du så det som bliver tilsendt sådan som der kommer til at se ud endeligt.

Prøv først at lave det inden vi går til sidste trin.
Når du har lavet det, så skriv hvad du kalder de variabler som bliver sendt til preview.php - eller hvad du nu kalder filen. Så forklarer jeg resten.
Avatar billede jv Nybegynder
29. maj 2001 - 17:01 #13
Beklager, at det har taget nogle dage inden jeg svarer, men har haft meget travlt.

submit.php -> Har den kode jeg har pasted aller øverst på denne side.

indsend.php -> Her er jeg ikke helt med på de forms, da jeg allerede har dem i submit.php?

Og så lige en ting mere: Er det ikke muligt at lave submit.php, indsend.php og preview.php til een fil hvor de 2 af dem blot er funktioner i siden. Det vil være rart at slippe for flere filer og det gør vel ikke noget om man sender til xx.php?action=preview eller bare preview.php.
Avatar billede barefoot Nybegynder
29. maj 2001 - 23:59 #14
Jeg ville faktisk have svaret for laaang tid siden, men jeg kom til at poste svaret i et forkert forum:-)
Her er det så:

<?php
/*
* Den del af siden som brugeren starter med at se.
* Det er her han/hun sender oplysningerne
* Oplysningerne bliver sendt til preview siden
*/

if($action == \"\"){
   
?>
<FORM METHOD=\"POST\" ACTION=\"\"> <!-- action=\"\" da den skal sendes til sig selv -->
<INPUT TYPE=\"text\" NAME=\"noget\"> <!-- $noget er det som du sender -->
<INPUT TYPE=\"hidden\" name=\"action\" value=\"preview\"> <!-- $action fortæller siden hvad den skal gøre med det som bliver tilsendt -->
<INPUT TYPE=\"submit\" value=\"Preview\">
</FORM>

<?php
}
/*
* Preview delen som udskriver det der blev sendt fra forrige side
* Det er her validerer oplysningerne
* Oplysningerne bliver sendt til gem siden
*/

if($action == \"preview\"){
    echo $noget; //udskriver det som blev sendt
   
?>
<FORM METHOD=\"POST\" ACTION=\"\">
<INPUT TYPE=\"hidden\" name=\"noget\" value=\"<?php echo $noget; ?>\"> <!-- Sørger for at $noget har samme værdi som på siden før -->
<INPUT TYPE=\"hidden\" name=\"action\" value=\"gem\"> <!-- Fortæller at siden skal gemme oplysningerne næste gang -->
<INPUT TYPE=\"submit\" Value=\"Gem\">
</FORM>

<?php

}


* Gem delen som gemmer det der blev sendt fra preview siden
* Det er her gemmer oplysningerne
*
if($action == \"gem\"){
    //noget som gemmer $noget eller hvad du nu har sendt med
}

?>
Avatar billede barefoot Nybegynder
30. maj 2001 - 00:02 #15
hmm, jeg mangler lige to / i den sidste del, her er det igen:

<?php
/*
* Den del af siden som brugeren starter med at se.
* Det er her han/hun sender oplysningerne
* Oplysningerne bliver sendt til preview siden
*/

if($action == \"\"){
   
?>
<FORM METHOD=\"POST\" ACTION=\"\"> <!-- action=\"\" da den skal sendes til sig selv -->
<INPUT TYPE=\"text\" NAME=\"noget\"> <!-- $noget er det som du sender -->
<INPUT TYPE=\"hidden\" name=\"action\" value=\"preview\"> <!-- $action fortæller siden hvad den skal gøre med det som bliver tilsendt -->
<INPUT TYPE=\"submit\" value=\"Preview\">
</FORM>

<?php
}
/*
* Preview delen som udskriver det der blev sendt fra forrige side
* Det er her validerer oplysningerne
* Oplysningerne bliver sendt til gem siden
*/

if($action == \"preview\"){
    echo $noget; //udskriver det som blev sendt
   
?>
<FORM METHOD=\"POST\" ACTION=\"\">
<INPUT TYPE=\"hidden\" name=\"noget\" value=\"<?php echo $noget; ?>\"> <!-- Sørger for at $noget har samme værdi som på siden før -->
<INPUT TYPE=\"hidden\" name=\"action\" value=\"gem\"> <!-- Fortæller at siden skal gemme oplysningerne næste gang -->
<INPUT TYPE=\"submit\" Value=\"Gem\">
</FORM>

<?php

}

/*
* Gem delen som gemmer det der blev sendt fra preview siden
* Det er her gemmer oplysningerne
*/
if($action == \"gem\"){
    //noget som gemmer $noget eller hvad du nu har sendt med
}

?>
Avatar billede jv Nybegynder
31. maj 2001 - 16:23 #16
Jeg har fået det hele til at virke nu, men en ting der mangler er:

Når man står på preview siden og finder en fejl, så vil man tilbage og rette. Det linker jeg til med java script:history.go(-1), men når den går tilbage, så er formen TOM. Det vil sige man skal indtaste alt forfra. Kan dette undgås?
Avatar billede barefoot Nybegynder
31. maj 2001 - 17:26 #17
I formen udskriver du værdierne som balue=\"\".
Altså: <input type=\"text\" name=\"noget\" value=\"<?php echo $noget; ?>\">
Så får det den værdi som man vil have.
Men du skal ikke bruge javascript hvis det skal virke. Du skal sende folk tilbage via en submit knap, eller et link. Ellers tror jeg ikke at værdierne bliver udskrevet...
Avatar billede jv Nybegynder
31. maj 2001 - 18:11 #18
Hvordan kan jeg sende variablerne via et link isf. formen?
Avatar billede barefoot Nybegynder
31. maj 2001 - 20:24 #19
Her er det hele igen med rettelse:

<?php
/*
* Den del af siden som brugeren starter med at se.
* Det er her han/hun sender oplysningerne
* Oplysningerne bliver sendt til preview siden
*/

if($action == \"\"){
   
?>
<FORM METHOD=\"POST\" ACTION=\"\"> <!-- action=\"\" da den skal sendes til sig selv -->
<INPUT TYPE=\"text\" NAME=\"noget\" value=\"<?php echo $noget; ?>\"> <!-- $noget er det som du sender -->
<INPUT TYPE=\"hidden\" name=\"action\" value=\"preview\"> <!-- $action fortæller siden hvad den skal gøre med det som bliver tilsendt -->
<INPUT TYPE=\"submit\" value=\"Preview\">
</FORM>

<?php
}
/*
* Preview delen som udskriver det der blev sendt fra forrige side
* Det er her validerer oplysningerne
* Oplysningerne bliver sendt til gem siden
*/

if($action == \"preview\"){
    echo $noget; //udskriver det som blev sendt
   
?>
<FORM METHOD=\"POST\" ACTION=\"\">
<INPUT TYPE=\"hidden\" name=\"noget\" value=\"<?php echo $noget; ?>\"> <!-- Sørger for at $noget har samme værdi som på siden før -->
<INPUT TYPE=\"hidden\" name=\"action\" value=\"gem\"> <!-- Fortæller at siden skal gemme oplysningerne næste gang -->
<INPUT TYPE=\"submit\" Value=\"Gem\">
</FORM>

<FORM METHOD=\"POST\" ACTION=\"\">
<INPUT TYPE=\"hidden\" name=\"noget\" value=\"<?php echo $noget; ?>\"> <!-- Sørger for at $noget har samme værdi som på siden før -->
<INPUT TYPE=\"hidden\" name=\"action\" value=\"\"> <!-- Fortæller at oplysningerne skal vises i starten igen så de kan rettes -->
<INPUT TYPE=\"submit\" Value=\"Ret\">
</FORM>
<?php

}

/*
* Gem delen som gemmer det der blev sendt fra preview siden
* Det er her gemmer oplysningerne
*/
if($action == \"gem\"){
    //noget som gemmer $noget eller hvad du nu har sendt med
}

?>


Ideen er er der er to forme som gør noget forskelligt på preview siden.
Den ene sender personen tilbage for at rette, den anden sender vidre til gemning.
Avatar billede jv Nybegynder
01. juni 2001 - 01:46 #20
Perfekt! Mange tak for din hjælp
Avatar billede barefoot Nybegynder
01. juni 2001 - 11:32 #21
Selv mange tak:-)
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