PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit dem Gästebuch


nate10
14.09.2005, 11:04:15
Hallo, nachdem ich mein Gästebuch ausprobierte erschien folgender Fehler:

fread() [function.fread]: Length parameter must be greater than 0 on line 19

hier die Codezeilen von line 18 bis 20:

$oeffne_eintragsdatei = fopen($entries_file,"r");// Öffnet die Datei mit den Einträgen
$lese_eintragsdatei = fread($oeffne_eintragsdatei,filesize($entries_file));// Liest sie
fclose ($oeffne_eintragsdatei);// und schließt diese

ich habe das Gästebuch runtergeladen um es selbst weiter zu entwickeln und herum zu probieren, bin noch am anfang, also muss ich der Variable eine Wert geben, wie kann ich diese anweisung um formulieren?

mfg nate

feuervogel
14.09.2005, 11:51:25
anscheinend ist die länge deiner datei 0 (sprich, sie ist leer) oder du hast keine leserechte (was ich mir aber nicht vorstellen kann).

xabbuh
14.09.2005, 12:12:43
Einfacher wäre es, wenn du den Dateiinhalt mit file_get_contents() (http://www.php.net/file_get_contents) ermittelst:

<?php
$lese_eintragsdatei = file_get_contents($entries_file);
?>

nate10
14.09.2005, 12:21:44
super dass har geklappt nun bin ich den schritt weiter und wenn du mir dieses problem noch erklären könntest und eine hilfestellung leisten könntest wäre ich sehr dankbar und hätte was gelernt:

Warning: range() [function.range]: step exceeds the specified range in /home/vhosts/5000130433/svschwabelweis.de/htdocs/guestbook/eintrag.php on line 58

Warning: Invalid argument supplied for foreach() in /home/vhosts/5000130433/svschwabelweis.de/htdocs/guestbook/eintrag.php on line 58

wiue kann ich dass umgehen?

xabbuh
14.09.2005, 13:00:31
Wie sehen denn die zugehörigen Zeilen aus?

nate10
14.09.2005, 13:03:25
vergaß ich zu posten:

$ip_open = fopen($entries_file,"r");
$ip_read = file_get_contents($entries_file);
fclose($ip_open);
$ip_split = explode("^",$ip_read);
foreach(range(0, (count($ip_split)/17)) as $vie) {
if($ip == $ip_split[$vie*17+8]) {
$check = time() - $ip_split[$vie*17+7] > $zeitzw2eintraegen ? 0 : 1;
}}

xabbuh
14.09.2005, 13:12:21
Wenn die Anzahl der Elemente von $ip_split kleiner als 17 ist, wird der Funktion range() als zweiten Parameter eine Zahl kleiner als 1 übergeben, was zu Konflikten mit der Schrittweite 1 führt, da dann keine Arrayelemente erstellt werden.

nate10
14.09.2005, 13:19:44
wie kann ich dass lösen?

xabbuh
14.09.2005, 13:21:46
Was willst du denn überhaupt mit den Zeilen machen?

nate10
14.09.2005, 13:41:27
dass ist die datei eintragen.php und ich hab dass script ja herunter geladen mit dieser anweisung kann ich auch noch nicht viel anfangen.

hier mehr aus dieser datei:


?>
<noscript><div class="nojs"><?php echo $nojserror ?></div></noscript>
<?php

$ip_open = fopen($entries_file,"r");
$ip_read = file_get_contents($entries_file);
fclose($ip_open);
$ip_split = explode("^",$ip_read);
foreach(range(0, (count($ip_split)/17)) as $vie) {
if($ip == $ip_split[$vie*17+8]) {
$check = time() - $ip_split[$vie*17+7] > $zeitzw2eintraegen ? 0 : 1;
}}
if($check == 0) {// Überprüft, ob die Zeitbegrenzung eingehalten wurde

if (!empty($_POST['user']) and !empty ($_POST['text'])) {
$freischalt_uri = str_replace("eintrag.php", "freischalt.php", "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);

if($_FILES['bild']['tmp_name'] != "none" and $_FILES['bild']['tmp_name'] != "") include("includes/upload_image.inc.php");

// Sonderzeichen, die als Trennzeichen verwendet werden, werden in ihre HTML-Entsprechungen umgewandelt
$user = eingabefeld($_POST['user']);
$mail = mailprotect($_POST['mail']);
$alter = is_numeric($_POST['alter']) ? $_POST['alter'] : "";
$wohnort = eingabefeld($_POST['wohnort']);
$homepage = eingabefeld($_POST['homepage']);
$homepage = str_replace("http://", "", $homepage);
$homepage = str_replace("noch keine", "", $homepage);
if(strlen($homepage) > 5) $homepage = "http://".$homepage;
$icq = is_numeric($_POST['icq']) ? $_POST['icq'] : "";
$bild = $name_bild;
$betreff = eingabefeld($_POST['betreff']);
$bewertung = eingabefeld($_POST['bewertung']);
$misc_1 = eingabefeld($_POST['misc_1']);
$misc_2 = eingabefeld($_POST['misc_2']);
$misc_3 = eingabefeld($_POST['misc_3']);
$misc_4 = eingabefeld($_POST['misc_4']);
$password = pwd($_POST['password']);// Passwort wird verschlüsselt gespeichert

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

if($aut_break == "ja") $text = preg_replace("/(\S{100})(\S)/", "\\1 \\2", $text);// Bricht lange Wörter alle 100 Zeichen um


$neuer_eintrag = "$user^$mail^$alter^$wohnort^$homepage^$icq^$bild^".time()."^$ip^$betreff^$bewertung^$text^^$misc_1^$misc_2^$misc_3^$misc_4^$passw ord|";// Neuer Eintrag wird erstellt

xabbuh
14.09.2005, 13:55:53
Benutze bitte die php-Tags des Forums und kommentiere dein Script durch, dann können wir dir auch helfen, den Fehler zu finden.

nate10
14.09.2005, 14:15:20
sorry aber was meinst du damit auch auf die gefahr hin dir jetzt auf die nervern zu gehen aber wie gesagt ich bin neu, sorry...

xabbuh
14.09.2005, 15:09:16
sorry aber was meinst du damit auch auf die gefahr hin dir jetzt auf die nervern zu gehen aber wie gesagt ich bin neu, sorry...
Es gibt im Forum php-Tags ([ php] und [ /php] - ohne Leerzeichen). Wenn du den PHP-Code dort reinpackst, wird er entsprechend hervorgehoben. Und Kommentare sind wichtig, damit wir verstehen können, was du in den einzelnen Anweisungen überhaupt vorhast: http://tut.php-q.net/kommentare.html

nate10
14.09.2005, 16:29:50
also neuer versuch:

<noscript><div class="nojs"><?php echo $nojserror ?></div></noscript>

$ip_open = fopen($entries_file,"r");
$ip_read = file_get_contents($entries_file);
fclose($ip_open);
$ip_split = explode("^",$ip_read);
foreach(range(0, (count($ip_split)/17)) as $vie) {
if($ip == $ip_split[$vie*17+8]) {
$check = time() - $ip_split[$vie*17+7] > $zeitzw2eintraegen ? 0 : 1;
if($check == 0) {// Überprüft, ob die Zeitbegrenzung eingehalten wurde

ich hoffe du kannst da was ruas lesen...

xabbuh
14.09.2005, 16:35:44
Das war jetzt ein bisschen zuviel des Guten. :-) Bitte nicht alle Zeilen einzeln in die php-Tags setzen. Außerdem hast du noch die Kommentare vergessen.

nate10
14.09.2005, 16:51:21
ok learning by doing bzw. looking..

mehr kann ich dazu nicht kommentieren wie gesagt ist ein vorgegebens script


?// Schaltet den Cache-Modus des Browsers (meistens) aus
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

// IP bestimmen
if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR");
else $ip = getenv("REMOTE_ADDR");

if (!empty ($_POST['text'])){
header("refresh:10;url=gbuch.php?seite=1");// Automatische Weiterleitung nach 10 Sekunden

// Setzen verschiedener Cookies. Diese sind dazu da, dass man ab dem zweiten Besuch nicht nochmal seine ganzen
// Daten wie Name, EMail, Alter usw. eingeben muss
setcookie("dasepp_php_gb_user", $_POST['user'], time()+365*48*3600);
setcookie("dasepp_php_gb_mail", $_POST['mail'], time()+365*48*3600);
setcookie("dasepp_php_gb_alter", $_POST['alter'], time()+365*48*3600);
setcookie("dasepp_php_gb_wohnort", $_POST['wohnort'], time()+365*48*3600);
setcookie("dasepp_php_gb_homepage", $_POST['homepage'], time()+365*48*3600);
setcookie("dasepp_php_gb_icq", $_POST['icq'], time()+365*48*3600);
setcookie("dasepp_php_gb_bild", $_POST['bild'], time()+365*48*3600);
}

include ("includes/optionen.inc.php");// Includiert die verschiedenen Optionsdateien
include ("includes/texte.inc.php");
include ("includes/smilies.inc.php");
include ("includes/design.inc.php");
$fenstertitel = $eintrag_php_titel;// Festlegen des Titels
include ("includes/gbheader.php");// Includiert die Header-Datei
include("includes/ersetzungsfunktionen.inc.php");
include("includes/eintraege_auslesen.inc.php");

?>
<noscript><div class="nojs"><?php echo $nojserror ?></div></noscript>
<?php

$ip_open = fopen($entries_file,"r");
$ip_read = file_get_contents($entries_file);
fclose($ip_open);
$ip_split = explode("^",$ip_read);
foreach(range(0, (count($ip_split)/17)) as $vie) {
if($ip == $ip_split[$vie*17+8]) {
$check = time() - $ip_split[$vie*17+7] > $zeitzw2eintraegen ? 0 : 1;
}}
if($check == 0) {// Überprüft, ob die Zeitbegrenzung eingehalten wurde

if (!empty($_POST['user']) and !empty ($_POST['text'])) {
$freischalt_uri = str_replace("eintrag.php", "freischalt.php", "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);

if($_FILES['bild']['tmp_name'] != "none" and $_FILES['bild']['tmp_name'] != "") include("includes/upload_image.inc.php");

// Sonderzeichen, die als Trennzeichen verwendet werden, werden in ihre HTML-Entsprechungen umgewandelt
$user = eingabefeld($_POST['user']);
$mail = mailprotect($_POST['mail']);
$alter = is_numeric($_POST['alter']) ? $_POST['alter'] : "";
$wohnort = eingabefeld($_POST['wohnort']);
$homepage = eingabefeld($_POST['homepage']);
$homepage = str_replace("http://", "", $homepage);
$homepage = str_replace("noch keine", "", $homepage);
if(strlen($homepage) > 5) $homepage = "http://".$homepage;
$icq = is_numeric($_POST['icq']) ? $_POST['icq'] : "";
$bild = $name_bild;
$betreff = eingabefeld($_POST['betreff']);
$bewertung = eingabefeld($_POST['bewertung']);
$misc_1 = eingabefeld($_POST['misc_1']);
$misc_2 = eingabefeld($_POST['misc_2']);
$misc_3 = eingabefeld($_POST['misc_3']);
$misc_4 = eingabefeld($_POST['misc_4']);
$password = pwd($_POST['password']);// Passwort wird verschlüsselt gespeichert

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

if($aut_break == "ja") $text = preg_replace("/(\S{100})(\S)/", "\\1 \\2", $text);// Bricht lange Wörter alle 100 Zeichen um


$neuer_eintrag = "$user^$mail^$alter^$wohnort^$homepage^$icq^$bild^".time()."^$ip^$betreff^$bewertung^$text^^$misc_1^$misc_2^$misc_3^$misc_4^$passw ord|";// Neuer Eintrag wird erstellt

$mailtext = preg_replace("/\[quote=(.*?)\](.*?)\[\/quote\]/si", "Zitat von \\1: \\2\n", $_POST['text']);
$mailtext = preg_replace("/\[(.*?)\]/si", "", $mailtext);// BBCodes werden aus Mailtext entfernt
$mailtext = preg_replace("/\[\/(.*?)\]/si", "", $mailtext);
$mailtext = stripslashes($mailtext);
$mailmail = empty($_POST['mail']) ? "keine.Angabe@unbekannt.org" : $_POST['mail'];

$mailtext_mail = !empty($_POST['mail']) ? "\nMail: ".$_POST['mail'] : "";
$mailtext_homepage = !empty($_POST['homepage']) ? "\nHomepage: ".$_POST['homepage'] : "";
$mailtext_icq = is_numeric($_POST['icq']) ? "\nICQ: ".$_POST['icq'] : "";
$mailtext_misc_1 = !empty($_POST['misc_1']) ? "\n$eintrag_php_misc_1: ".$_POST['misc_1'] : "";
$mailtext_misc_2 = !empty($_POST['misc_2']) ? "\n$eintrag_php_misc_2: ".$_POST['misc_2'] : "";
$mailtext_misc_3 = !empty($_POST['misc_3']) ? "\n$eintrag_php_misc_3: ".$_POST['misc_3'] : "";
$mailtext_misc_4 = !empty($_POST['misc_4']) ? "\n$eintrag_php_misc_4: ".$_POST['misc_4'] : "";
$mailtext_wohnort = !empty($_POST['wohnort']) ? "\nWohnort: ".$_POST['wohnort'] : "";
$mailtext_alter = is_numeric($_POST['alter']) ? "\nAlter: ".$_POST['alter'] : "";
$mailtext_bewertung = !empty($_POST['bewertung']) ? "\nBewertung: ".$_POST['bewertung'] : "";
$mailtext_betreff = !empty($_POST['betreff']) ? "\nBetreff: ".$_POST['betreff'] : "";

$mailtext_info = $mailtext_mail.$mailtext_homepage.$mailtext_icq.$mailtext_misc_1 .$mailtext_misc_2.$mailtext_misc_3.$mailtext_misc_4.$mailtext_alter.$m ailtext_wohnort.$mailtext_bewertung.$mailtext_betreff;

$bildinfotext = empty($name_bild) ? "" : "\n".$_POST['user']." hat ein Bild hochgeladen: ".str_replace(basename($_SERVER['PHP_SELF']), "", "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']).$name_bild."\nUm dieses Bild zu löschen, musst du diesen Eintrag erst freischalten und dann löschen.";

if ($send_mail == "ja" and $mod_gb == "nein") mail($user_mail,$mail_betreff,"Neuer Eintrag im Gästebuch. Dieser wurde sofort hinzugefügt.\n\n----------\n\nName: ".$_POST['user'].$mailtext_info."\nIP: ".$ip."\nText:\n\n".$mailtext,"From:".$_POST['user']."<$mailmail>\nReply-To: $mailmail");// Versendet die Info-Mail
if ($mod_gb == "ja") mail($user_mail,$mail_betreff, "Neuer Eintrag im Gästebuch. Dieser wurde noch nicht hinzugefügt.\n\n----------\n\nName: ".$_POST['user'].$mailtext_info."\nIP: ".$ip."\nText:\n\n".$mailtext."\n\n----------\n\nWenn dieser Eintrag ins Gästebuch soll, gehe auf ".$freischalt_uri." und füge dort folgenden Code ein:\n\n----------\n\n".wordwrap(base64_encode("$user^$mail^$alter^$wohnort^$homepage^$icq^$bild^".time()."^$ip^$betreff^$bewertung^$text^^$misc_1^$misc_2^$misc_3^$misc_4^$passw ord|"), 70, "\n", 1)."\n\n----------\n\nGib dann noch dein Passwort ein und sende das Formular ab. Der Eintrag wird dann hinzugefügt.$bildinfotext","From:".$_POST['user']."<$mailmail>\nReply-To: $mailmail");// Versendet die Info-Mail bei moderiertem Gästebuch

if ($mod_gb != "ja") {
$oeffnen = fopen($entries_file,"r");// Öffnet,
$lesen = fread($oeffnen, filesize($entries_file));// liest
fclose($oeffnen);// und schließt die Datei mit den Einträgen

$derzuspeicherndetext = $lesen . $neuer_eintrag;// Der neue Eintrag wird hinzugefügt

$speichern = fopen ($entries_file,"w");// Öffnet
fwrite($speichern,$derzuspeicherndetext);// Speichert
fclose($speichern);//Schließt
}

}

$option_array = explode("|", $eintrag_php_bewertung_opt);// Auswahlliste für Bewertung

if(is_numeric($_GET['id'])) {
$idcode = "\n<input type=\"hidden\" name=\"id\" value=\"" . $_GET['id'] . "\">";
}
else $idcode = "";

if(empty ($_POST['text']) and empty($_POST['regeln']) and $zeige_regeln == "ja") {
echo "<div class=\"regeln\">\n$regeln";
echo "\n<form action=\"eintrag.php\" method=\"post\" name=\"regeln\" class=\"regeln\">\n<input type=\"hidden\" name=\"regeln\" value=\"ok\">$idcode\n";

if($buttontyp == "a") {
$acc_inf = getimagesize($image_acc);
echo "<a href=\"javascript:document.regeln.submit()\"><img src=\"$image_acc\" alt=\"$eintrag_php_button_ak\" width=\"".$acc_inf[0]."\" height=\"".$acc_inf[1]."\" border=\"0\"></a>&nbsp;";
} if($buttontyp == "b") { ?>
<a href="javascript:document.regeln.submit()"><?php echo htmlentities($eintrag_php_button_ak, ENT_QUOTES) ?></a>
<?php }

echo "</form>\n</div>\n";
}

elseif(empty ($_POST['text']) and $_POST['regeln'] == "ok") {
include("includes/formular.inc.php");
}

elseif(empty ($_POST['text']) and $zeige_regeln != "ja") {
include("includes/formular.inc.php");
}

else echo $mod_gb == "ja" ? $erfolgsmeldung_freischalt : $erfolgsmeldung;// Gibt die Erfolgsmeldung aus
}

else echo $unterschreit;// Fehlermeldung bei Unterschreiten der Zeitbegrenzung

include ("includes/gbfooter.php");






ich hoffe dass war jetzt nicht zu viel code, aber dass ist die komplette datei eintrag.php

und nochmals danke für deine geduld, aber nun weiß ich wie es funktioniert und nun bin ja immer öfter hier.