Suche Kommentar-Script

rellek

relativ sensationell
Teammitglied
Was genau meinst du? Dass du eine Seite hast und Benutzer können diese kommentieren?
So als ganzes, eher als Newsscript oder dass du das Kommentarscript nur via Include einbaust?
 

Scotty

New Member
[quote='rellek',index.php?page=Thread&postID=105#post105]So als ganzes, eher als Newsscript oder dass du das Kommentarscript nur via Include einbaust?[/quote]
Genau, so das ich es auf diversen Seiten einbauen kann. Ich habe mich schon dusselig gesucht aber ich finde einfach nichts vernünftiges.
 

rellek

relativ sensationell
Teammitglied
Also aus dem Kopf wüsste ich nicht, dass es sowas gibt - aber ich kann mir vorstellen, dass es nicht allzu schwer sein sollte, sowas zu coden.

Könnt mich am WE ransetzen, wenn du Interesse hast...
 

Scotty

New Member
So ich habe es mal versucht, ist wirklich nur was kleines und es fehlt immer noch ein Spamschutz:

PHP:
<script type="text/javascript">
function checkform()
{
    if (document.Form.User.value.length < 3) {
        alert("Es wurde noch kein Name eingegeben!")
        document.Form.User.focus();
    return false} else if (document.Form.Comment.value.length < 20) {
        alert("Es wurde noch kein Kommentar eingegeben!")
        document.Form.Comment.focus();
    return false} else if (document.Form.Comment.value.length > 250) {
        alert("Dein Kommentar ist zu lang!\rMaximal 250 Zeichen.")
        document.Form.Comment.focus();
    return false} else {
        document.Form.elements["absenden1"].value="gesendet";
    }
    document.Form.elements["absenden1"].disabled="disabled";
    return true
}
</script>

<form name="Form" action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post" onSubmit="return checkform();">

<?php

$mailto = "support@e-hahn.de";

if ($_POST) {
    $Page = $_POST["Page"];
	$datum = date("d.m.y, H:i",time());
    $User = $_POST["User"];
	$Mail = $_POST["eMail"];
    $Comment = $_POST["Comment"];
    
    if ($Page !="" && $User !="" && $Comment !="") {
        $file = "comments/".$Page.".txt";
        
        // Kommentar schreiben
        $fp = fopen($file,"a+");
        fputs($fp,"

[b]$User[/b] ($datum):
$Comment</p>\n");
        fclose($fp);
    }

 // E-Mail versenden
 $betreff = "Neuer Kommentar";
 $text = "Datum: $datum - Seite: \"$Page\" - Autor: $User\nE-Mail: $eMail\n\nKommentar: $Comment\r";
 @mail($mailto,$betreff,$text,"From: ".$mailto);
}
?>
	
    <table>
        <tr>
            <td colspan="2">[b]Kommentar schreiben:[/b]

				<textarea style="width: 99%" rows="4" cols="21" name="Comment"></textarea>
			</td>
        </tr>
        <tr>
            <td style="width: 25%"><input type="text" name="User" size="28"></td>
            <td style="width: 75%">Name</td>
        </tr>
        <tr>
            <td style="width: 25%"><input type="text" name="eMail" size="28"></td>
            <td style="width: 75%">E-Mail (wird nicht veröffentlicht)</td>
        </tr>
        <tr>
            <td colspan="2"><input class="button" type="submit" name="sendfeedback" value="Speichern" /></td>
        </tr>
    </table>
   
<?php
 // Dateiname ermitteln
 $titel=explode("/","$_SERVER[PHP_SELF]");
 $file=explode('.',ucfirst($titel[count($titel)-1]));
 echo "   <input type='hidden' name='Page' value='".$file[0]."'>\r";
?>

	<div id="Comments">

<?php
 // Kommentarausgabe
 $ausgabe = "comments/".$file[0].".txt"; 
 if(file_exists($ausgabe)) {
  readfile($ausgabe);
  }
 else {
  echo "Es sind noch keine Kommentare vorhanden.";
 }
?>
	</div>

</div>
</form>

Ich bin nicht so der PHPler, wer also Verbesserungsvorschläge hat, immer her damit ;). Eingebunden habe ich es mal so zum Test auf dieser Seite von mir: http://www.e-hahn.de/sonstiges/stubentiger.php

Das Script besteht nur aus einer Datei und wird via Include eingebunden, die Kommentare werden im Ordner Comments gespeichert.
Was mich etwas stört, das der neuste Kommentar natürlich am ende ran gehangen wird, ich hätte es aber lieber andersherum, eine Idee?
 

Anhänge

  • comments.zip
    1,2 KB · Aufrufe: 49

rellek

relativ sensationell
Teammitglied
Also in dem Script fällt mir erst einmal auf, dass es gar nicht sicher vor Hacker-Angriffen ist :(
-> Sicherheit von PHP-Software

Code:
    $Page = $_POST["Page"];
    $datum = date("d.m.y, H:i",time());
    $User = $_POST["User"];
    $Mail = $_POST["eMail"];
    $Comment = $_POST["Comment"];

Das wäre dann:
Code:
    $Page = $_POST["Page"]; // hier intval() oder addslashes() benutzen - Je nach dem, ob es ein Text oder eine Zahl ist!
    $datum = date("d.m.y, H:i",time());
    $User = addslashes($_POST["User"]);
    $Mail = addslashes($_POST["eMail"]);
    $Comment = addslashes($_POST["Comment"]);

und hier:
Code:
 $ausgabe = "comments/".$file[0].".txt"; 
 if(file_exists($ausgabe)) {
  readfile($ausgabe);
  }

wäre das:
Code:
 $ausgabe = "comments/".$file[0].".txt"; 
 if(file_exists($ausgabe)) {
  htmlentities(readfile($ausgabe));
  }

Was den Spam-Schutz angeht. Da würde ich vielleicht weniger über ein Captcha gehen, als viel eher eine kleine Denkaufgabe verwenden, so z.B. eine Rechenaufgabe (die kann ja zufällig generiert sein), oder, vielleicht in der Umsetzung einfacher, eine Frage - beispielsweise "Wie heißt das Tier mit dem langen Rüssel", Antwort: "Elefant". Diese müsstest du dir jedoch ausdenken.
Packst du jede Frage und jede Antwort in je eine 2-dimensionale Array (1. Dimension -> ID, 2. Dimension Frage bzw. Antwort) und übergibst mit <input type="hidden" ...> nur die ID deiner Frage. Die ID der Antwort muss natürlich dieselbe sein.
Welche Frage das Script letztlich verwendet, entscheidest du vorher per Random...
 

Scotty

New Member
Danke für die Tipps :), daran hab ich überhaupt nicht gedacht gehabt :huh:.

Was den Spamschutz angeht werde ich das so machen wie bei meinem Feedbackformular, da hab ich es so wie du es schon sagst eine Denkaufgabe drin, eine einfache Rechenaufgabe, seit dem ich das so habe, habe ich kein Spam darüber bekommen, war vorher richtig schlimm.
 

rellek

relativ sensationell
Teammitglied
Naja genau eine Aufgabe ist vielleicht etwas dürftig. Wenns dann jemand echt drauf anlegt, dich zuzuspammen, wäre das kein Problem, dieses Feld noch einzubeziehen.

Aber wenns bisher für dich funktioniert hat, wäre das eine Lösung. :)
 

Scotty

New Member
Ja es funktioniert bestens, ich denke vorher waren das sicher vor allem SpamBots. Ich will es den Usern ja auch nicht so schwer machen, gerade beim Feedbackformular. Die meisten User sind im allgemeinen leider sehr faul, da lassen sie es lieber bleiben als kurz mal das Gehirn zu bemühen...

Das Kommentar-Script hab ich erstmal bei meinen Projektseiten eingebaut, mal schauen wie es ankommt und ob die User was schreiben.
 
Oben