yinyou Skrevet 15. mai 2007 Del Skrevet 15. mai 2007 (endret) Jeg har en utrolig kødde gjestebok på siden min. Den er bygd opp av noe jeg fant på et nettsted, og så har jeg gjort om litt på den. Og vil helst slipp å lære meg utrolig mye php, hvis noen kan hjelpe meg litt på vei og si hva jeg burde gjøre eventuelt komme med noen koder? Jeg vil helst slipp å begynne med mysql x P Dette er koden hvor folk skrver inn navn og kommentar: Klikk for å se/fjerne innholdet nedenfor <html> <head> <title>Yinyou</title> <style type="text/css"> .border {border: 1px ffdd77 dashed; color:aaaaaa;} </style> </head> <table> <form action="gjestebok_ny_noxss.php" method="post"> <tr><td> Navn:</td><td> <input type="text" name="navn" class="border"></td></tr></br> <tr><td> Melding:</td><td> <textarea name="hilsen" class="border"></textarea></td></tr></br> <tr><td> <input type="submit" name="ny" value="Send"> </form> Problemer: - jo lengre kommentarene blir jo lengre til høyre flytter boksene (navn og kommentar boksene) seg. Dette er er fil som "kontrollerer innholdet som blir sendt": Klikk for å se/fjerne innholdet nedenfor <?php $fp = fopen("gjester.txt", "a+"); //filpeker paa slutten av fil $linje .= $_POST['navn'] . "***---***"; $linje .= $_POST['hilsen'] . "***---***"; $linje .= date('d m. Y') . "***---***"; $linje .= $_SERVER['REMOTE_ADDR'] . "***---***"; //fjerne faren som er utgjort av HTML-tagger og andre spesialtegn //echo $linje . "<br>\n\n"; echo "<h3>Dette ble satt inn</h3>"; $linje = htmlentities($linje); echo $linje . "<br>"; fwrite($fp, $linje); //skriver strengen til fil fwrite($fp, "\n"); //sikrer at neste gang starter paa ny linje fclose($fp); ?> Problemer: - Når noen har skrevet i gjesteboken min kommer denne siden op hvor d står hva de har skrevet osv.. Utrolig teit liksom. Jeg tror jeg er avhengi av innholdet i denne fila for at gjesteboka skal fungere men lurer på om noen vet om det går av å legge denne fila i en annen fil. Elr eventuelt noen andre bedre løsninger? Et annet problem som muligens ligger i denne fila er at hvis de som skriver i gjesteboka mi bruker flere linjer i kommentaren sin blir det hver nye linje et navn... Dette er koden som henter innholdet i gjester.txt hvor kommentarene ligger. Og hviser fram kommentarene: Klikk for å se/fjerne innholdet nedenfor <?php $matrise = file("gjester.txt"); //ta bort kommentarene for Ã¥ se innholdet i matrisen //echo "<pre>"; //var_dump($matrise); $matrise = array_reverse($matrise); foreach ($matrise as $linje) { //deler opp hver bit av strengen til en ny matrise $neste = explode("***---***", $linje); echo "<b>" . $neste[0] . "</b>"; echo "<blockquote>" . $neste[1] . "</blockquote>"; echo "<blockquote>" . $neste[2] . "</blockquote>"; echo "<hr>"; } ?> Problemer: - Det siste problemet jeg skrev etter den siste koden er muligens denne filens feil. - Jeg lurer forresten om noen vet om noen bedre muligheter for denne filen? - Går det forresten an å bruke css i scriptet? I så fall hvordan? For ser at det er brukt html inni "" bak echo: echo "blockquote". Og hvis jeg skal bruke div style="..." så kommer det enda en " etterpå og det blir bare rart?... Så hvis noen kan gi meg noen tips om hvordan jeg kan gjøre gjesteboka slik jeg vil ha den, inkludert at jeg gjerne vil ha såkalt sikkerhet, så ville det vært kjempefint. Også forresten omk noen kan rense koden litt hvis dere skjønner. Det ble kanskje litt mye i en post, og ikke så bra detaljert, men bare spør hvis dere lurer på noe. Takker kjempe mye for tips osv. Endret 15. mai 2007 av yinyou Lenke til kommentar
-morten Skrevet 15. mai 2007 Del Skrevet 15. mai 2007 Er ikke den beste gjestebok-implementasjonen jeg har sett nei, men hvis du absolutt ikke vil lære deg sql, så fungerer den jo forsåvidt.. Klikk for å se/fjerne innholdet nedenfor <?php $matrise = file('gjester.txt'); $matrise = array_reverse($matrise); // Gå gjennom alle linjene/postene foreach ($matrise as $linje) { // Del opp linja i variabler list($navn, $hilsen, $dato, $ip) = explode("***---***", $linje); // Skriv ut posten ?> <!-- START PÅ HTML FOR HVER POST --> <b><?php echo $navn; ?></b> <blockquote><?php echo $hilsen; ?></blockquote> <blockquote><?php echo $dato; ?></blockquote> <hr> <!-- SLUTT PÅ HTML --> <?php } ?> På den måten kan du bruke vanlig html for å skrive ut postene, og ha <?php echo $variabel; ?> der du vil ha navn/hilsen/dato. (HTML-kommentarene kan du selvfølgelig fjerne.) Klikk for å se/fjerne innholdet nedenfor <?php // Fjern html fra data, samt gjør newline til <br> i poster $navn = htmlentities(strip_tags($_POST['navn'])); $hilsen = nl2br(htmlentities(strip_tags($_POST['hilsen']))); // Sett sammen til en lang linje $linje = $navn . '***---***'; $linje .= $hilsen . '***---***'; $linje .= date('d.m.Y') . '***---***'; $linje .= $_SERVER['REMOTE_ADDR'] . "***---***"; // Legg til på bunn av fila $fp = fopen("gjester.txt", "a+"); fwrite($fp, $linje."\n"); fclose($fp); // Videresend til en annen side header('Location: annenside.php'); exit; ?> Her er det lagt til litt mer sikkerhet på innleggene, samt sørget for at de kan ha flere linjer.I tillegg sender den brukeren videre til en annen side når den er ferdig, i stedet for å skrive ut posten. Forstod det som at det var det du ville? (Men merk at for at det skal funke, må du ikke skrive ut noe som helst i denne fila, og det må ikke være NOE før <?php. Ikke et mellomrom engang.) Du kunne også ha gjort echo '<blockquote style="lala">'. $var osv, eller echo "<blockquote style='lala'>". $var Lenke til kommentar
yinyou Skrevet 26. mai 2007 Forfatter Del Skrevet 26. mai 2007 Takk, skiftet ut gjesteboken med de tingene, men problemet mitt med når folk skriver flere linjer løste seg ikke. Noen som vet hva jeg må gjøre for at de kan skrive flere linjer? Ta gjerne utgangspunkt i de siste kodene som morten sendte meg. Takker for svar. Lenke til kommentar
Bakke Skrevet 26. mai 2007 Del Skrevet 26. mai 2007 (endret) Ser i den øverste HTML delen at du bruker textarea, da skal brukeren kunne skrive inn flere linjer. Vis du mener at det skal komme en linje eller to mellom hvert innlegg kan du prøve: PHP <?php // Fjern html fra data, samt gjør newline til <br> i poster $navn = htmlentities(strip_tags($_POST['navn'])); $hilsen = nl2br(htmlentities(strip_tags($_POST['hilsen']))); // Sett sammen til en lang linje $linje = $navn . '***---***'; $linje .= $hilsen . '***---***'; $linje .= date('d.m.Y') . '***---***'; $linje .= $_SERVER['REMOTE_ADDR'] . "***---***"; $linje .= "nn"; // Legg til på bunn av fila $fp = fopen("gjester.txt", "a+"); fwrite($fp, $linje); fclose($fp); // Videresend til en annen side header('Location: annenside.php'); exit; ?> Endret 29. mai 2007 av Mr. Bakke Lenke til kommentar
-morten Skrevet 28. mai 2007 Del Skrevet 28. mai 2007 Du mener vel \n\n og ikke nn, men det er ikke det som er problemet hans. Koden min la allerede til et linjeskift etter hver post, to linjeskift vil bare lage problemer. Problemet var at hvis noen skrev linjeskift inne i posten, så ble det en ny linje i fila, slik at den ble tolket som en ny post. Men nl2br() funksjonen skal gjøre alle linjeskift om til <br>, så kan ikke skjønne at det fortsatt er et problem..? Lenke til kommentar
yinyou Skrevet 29. mai 2007 Forfatter Del Skrevet 29. mai 2007 (endret) Du mener vel \n\n og ikke nn, men det er ikke det som er problemet hans. Koden min la allerede til et linjeskift etter hver post, to linjeskift vil bare lage problemer. Problemet var at hvis noen skrev linjeskift inne i posten, så ble det en ny linje i fila, slik at den ble tolket som en ny post. Men nl2br() funksjonen skal gjøre alle linjeskift om til <br>, så kan ikke skjønne at det fortsatt er et problem..? 8726477[/snapback] Hehe, nei linjeskift blir skrevet til ny linje i den fila bare at det kommer <br> i tillegg, slik at d blir som d var før i tilleg til extra mellomrom x'P Vet ikke helt hva som er feil men :s Hvis det ikke blir fikset kan jeg skifte til input=text der hvor man skriver, men hadde vært best å kunne ha textarea Endret 29. mai 2007 av yinyou Lenke til kommentar
-morten Skrevet 29. mai 2007 Del Skrevet 29. mai 2007 Sjekka PHP-manualen, og nl2br() legger til <br> før linjeskiftet, den bytter ikke linjeskiftet ut med <br>. Det var jeg ikke klar over Så bruk dette i stedet da: $hilsen = str_replace("\n", '<br>', htmlentities(strip_tags($_POST['hilsen']))); Lenke til kommentar
yinyou Skrevet 29. mai 2007 Forfatter Del Skrevet 29. mai 2007 Sjekka PHP-manualen, og nl2br() legger til <br> før linjeskiftet, den bytter ikke linjeskiftet ut med <br>. Det var jeg ikke klar over Så bruk dette i stedet da: $hilsen = str_replace("\n", '<br>', htmlentities(strip_tags($_POST['hilsen']))); 8731721[/snapback] Tusen takk ;P Funket kjempe fint nå. Det var forresten en liten ting til.. Lurt på om det går an å sjekke om feltene navn å hilsen er fylt ut ved hjelp av php. Og at hvis en av feltene ikke er fylt ut blir det "skrevet ut" at det ikke er fylt ut. (Ikke pop up!) Takker for svar Lenke til kommentar
-morten Skrevet 29. mai 2007 Del Skrevet 29. mai 2007 if (empty(strip_tags($_POST['hilsen'])) || empty(strip_tags($_POST['navn']))) { echo "Du må fylle ut begge feltene!"; exit; } eller noe slikt. Trikset er å bruke empty() for å sjekke om POST-variabelen har en verdi. Lenke til kommentar
yinyou Skrevet 29. mai 2007 Forfatter Del Skrevet 29. mai 2007 (endret) if (empty(strip_tags($_POST['hilsen'])) || empty(strip_tags($_POST['navn']))) { echo "Du må fylle ut begge feltene!"; exit; } eller noe slikt. Trikset er å bruke empty() for å sjekke om POST-variabelen har en verdi. 8732277[/snapback] TakkTakk ;P Men d virket ikke x'P Kom sånn: Parse error: parse error, unexpected T_STRING, expecting T_VARIABLE or '$' in /home/www... Sikkert bare en liten glipp eller noe?.. Men takk uansett! Endret 29. mai 2007 av yinyou Lenke til kommentar
-morten Skrevet 29. mai 2007 Del Skrevet 29. mai 2007 (endret) Hm, empty() tar kun variabler som input ja.. $navn = htmlentities(trim(strip_tags($_POST['navn']))); $hilsen = str_replace("\n", '<br>', htmlentities(trim(strip_tags($_POST['hilsen'])))); if (empty($navn) || empty($hilsen)) { die("Du må fylle ut alle feltene!"); } noe slikt da Endret 29. mai 2007 av -morten Lenke til kommentar
yinyou Skrevet 30. mai 2007 Forfatter Del Skrevet 30. mai 2007 Hm, empty() tar kun variabler som input ja.. $navn = htmlentities(trim(strip_tags($_POST['navn']))); $hilsen = str_replace("\n", '<br>', htmlentities(trim(strip_tags($_POST['hilsen'])))); if (empty($navn) || empty($hilsen)) { die("Du må fylle ut alle feltene!"); } noe slikt da 8736377[/snapback] Takk, men hvis jeg bare legger den inn i fila med input osv kommer d med en gang at man må fyle ut feltene før feltene kommer fram liksom så kan man legge den i en funksjon eller noe slik at det kommer når de trykker på submit? Hvis du sjønner hva jeg mener ;D Lenke til kommentar
-morten Skrevet 30. mai 2007 Del Skrevet 30. mai 2007 Du kan jo putte dem i hver sin fil. <form action="annenfil.php" method="post"> osv. Alternativt putte all php-koden inn i if (isset($_POST)) { ... } Lenke til kommentar
yinyou Skrevet 14. juni 2007 Forfatter Del Skrevet 14. juni 2007 Du kan jo putte dem i hver sin fil.<form action="annenfil.php" method="post"> osv. Alternativt putte all php-koden inn i if (isset($_POST)) { ... } 8739338[/snapback] Skjønt det ikke helt, ska jeg legge <?php $navn = htmlentities(trim(strip_tags($_POST['navn']))); $hilsen = str_replace("\n", '<br>', htmlentities(trim(strip_tags($_POST['hilsen'])))); if (empty($navn) || empty($hilsen)) { die("Du må fylle ut alle feltene!"); } ?> i fila me input navn og input hilsen? Lenke til kommentar
Martin A. Skrevet 14. juni 2007 Del Skrevet 14. juni 2007 Ja. Legg det over all annen tekst, og endre filetternavnet til php. Må dessuten nevne at det er utrolig tungvindt å jobbe med tekstfiler. Har du tilgang til SQL, så for guds skyld bruk det. Lenke til kommentar
yinyou Skrevet 16. juni 2007 Forfatter Del Skrevet 16. juni 2007 (endret) Ja. Legg det over all annen tekst, og endre filetternavnet til php. Må dessuten nevne at det er utrolig tungvindt å jobbe med tekstfiler. Har du tilgang til SQL, så for guds skyld bruk det. 8863157[/snapback] Men hvis jeg bare legger det over alt annet vises ikke noen av filene. Det står bare Du må fylle ut alle feltene! Hvorfor forsvinner inputene og de andre filene? Endret 16. juni 2007 av yinyou Lenke til kommentar
Martin A. Skrevet 16. juni 2007 Del Skrevet 16. juni 2007 Sett "if ( isset ( $_POST['ny'] ) ) {" etter <?php, og "} else {" før du starter på skjemaet. Og en } helt til slutt. PHP <?php if ( isset ( $_POST['ny'] ) ) { //skjemabehandling } else { // Sett en ?> her om du ikke skriver ut skjemaet med echo eller print //skjema //sett en <?php her om du skrev ?> etter "else {" } ?> Lenke til kommentar
yinyou Skrevet 17. juni 2007 Forfatter Del Skrevet 17. juni 2007 Sett "if ( isset ( $_POST['ny'] ) ) {" etter <?php, og "} else {" før du starter på skjemaet. Og en } helt til slutt. PHP <?php if ( isset ( $_POST['ny'] ) ) { //skjemabehandling } else { // Sett en ?> her om du ikke skriver ut skjemaet med echo eller print //skjema //sett en <?php her om du skrev ?> etter "else {" } ?> 8874430[/snapback] Får ikke til det. Kan du skrive det til meg? Klikk for å se/fjerne innholdet nedenfor <html> <head> <title>Yinyou</title> <style type="text/css"> .border1 {border: 1px ffdd77 dashed; color:99ccff;} .border2 {border: 1px ffdd77 dashed; color:aaaaaa;} span.test {color:aaaaaa;} .kjetil {border:1px #ffdd77 solid; color:99ccff; width:60;} </style> </head> <body> <form action="gjestebok_ny_noxss.php" name="gjestebok" method="post" onsubmit="return checkform();"> <span class="test">Navn:</span> <input type="text" maxlength="20" name="navn" class="border1"></br> <span class="test">Hilsen:</span> <textarea name="hilsen" maxlength="100" class="border2"></textarea></br> <a href="#" class="kjetil" onclick="document.gjestebok.submit();">Send</a> </form> </body> Lenke til kommentar
Martin A. Skrevet 17. juni 2007 Del Skrevet 17. juni 2007 Hva lærer man av at andre gjør det? Ingenting. Prøv og feil, så kan du heller spørre om ting du ikke skjønner senere. Lenke til kommentar
yinyou Skrevet 20. juni 2007 Forfatter Del Skrevet 20. juni 2007 (endret) Hva lærer man av at andre gjør det? Ingenting. Prøv og feil, så kan du heller spørre om ting du ikke skjønner senere. 8884562[/snapback] Hehe, okei, har prøvd det slik nå.. Klikk for å se/fjerne innholdet nedenfor <?php if ( isset ( $_POST['ny'] ) ) { $navn = htmlentities(trim(strip_tags($_POST['navn']))); $hilsen = str_replace("\n", '<br>', htmlentities(trim(strip_tags($_POST['hilsen'])))); if (empty($navn) || empty($hilsen)) { die("Du må fylle ut alle feltene!"); } } else { ?> <html> <head> <title>Yinyou</title> <style type="text/css"> .border1 {border: 1px ffdd77 dashed; color:99ccff;} .border2 {border: 1px ffdd77 dashed; color:aaaaaa;} span.test {color:aaaaaa;} .kjetil {border:1px #ffdd77 solid; color:99ccff; width:60;} </style> </head> <body> <form action="gjestebok_ny_noxss.php" name="gjestebok" method="post" onsubmit="return checkform();"> <span class="test">Navn:</span> <input type="text" maxlength="20" name="navn" class="border1"></br> <span class="test">Hilsen:</span> <textarea name="hilsen" maxlength="100" class="border2"></textarea></br> <a href="#" class="kjetil" onclick="document.gjestebok.submit();">Send</a> </form> </body> <?php } ?> Men det ble ikke no forskjell. Er det feil? Edit: du kan se gjesteboka her. Bare teste den hvis du vil ;] Endret 20. juni 2007 av yinyou Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå