Probleme mit Nocturns Gästebuch-Tut

Avariel

Erfahrenes Mitglied
Hallo zusammen,

also ich hab mir hier als ersten Schritt einfach mal das Tutorial geschnappt und unverändert in eine normale HTML-Datei eingefügt. Dann auf meiner DB die Tabelle nach den Vorgaben angelegt und nach einigem Gefummel auch rausgefunden was so genau Datenbank und Server bei mir sind *g*. Aber irgendwie will das nicht ganz... Um genau zu sein, das Eintragen der Daten über Formular in die DB funktioniert nicht. Wenn ich Daten direkt in die Datenbank eintrage funktioniert die Ausgabe einwandfrei. Bei der Eingabe übernimmt er die Daten aber nicht, gibt aber auch keine Fehlermeldung aus. Die Erfolgsmeldung "Eintragung erfolgreich hinzugefügt" bringt er allerdings auch schon nicht mehr.
Mir fallen momentan drei Fehlerquellen ein:

- Erstens: Fehler im Code
PHP:
$verbindung = mysql_pconnect
Ist da beim Connect nicht ein 'p' zuviel? Jedenfalls hab ich den Befehl schon mehrmals ohne das p gesehen. Aber das allein kanns nicht sein, ohne p gehts nämlich immernoch nicht.

- Zweitens: Irgendwas passt nicht mit dem MySql-Statement. Für meine Augen siehts aber richtig aus irgendwie :(

- Drittens: Ich hab das mit Datenbank- und Servernamen verpfuscht. Kann aber eigentlich auch nicht sein, weil er dann ja schon am Anfang die Fehlermeldung bringen müsste.

Jetzt weiß ich auch nicht mehr so echt weiter, hab gestern so an die zweieinhalb Stunden dran rumgefummelt. Wie soll das nur erst werden wenn ich nachher anfang den Code ungehemmt zu verändern/erweitern! :eek:
 
... und unverändert in eine normale HTML-Datei eingefügt ...
Ich kenne das tutorial zwar nicht und habe auch keine Muse dieses durchzuarbeiten, aber eines ist mit aufgefallen. Füge den Code nicht in eine HTML-Datei ein, sondern in eine PHP-Datei! Stelle ausserdem sicher, dass Dein Webserver Dateien mit der Extension ".php" mit dem PHP-Interpreter verarbeitet.

mfg, snuu
 
Also gut...
- das mit $verbindung hab ich schon geändert, aber wie schon gesagt hilft das alleine auch noch nicht - aber danke das ich jetzt endgültig weiß das das ein Fehler im Tut ist.

- Mit *.php - Dateien kommt mein Webserver klar, weil ich die früher schon verwendet hab. Aber das war halt ein vorgefertigtes Script mit eigener Installroutine, das wirklich jeder gecheckt hat *g*

- Ich hab die Datei selbstverständlich schon in *.php umbenannt dann. Aber ich poste wohl am besten einfach mal meinen Code

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>guestbook</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body style="background-color: gray;">
<form action="<?php echo $PHP_SELF ?>" method="post" name="eintragung"> <!-- Anfang des Formulars -->
Name:<input type="text" name="name" size="25">
Email:<input type="text" name="email" size="25">
Homepage:<input type="text" name="homepage" size="25">
Message:<textarea name="message" cols="20" rows="25"></textarea>
<input type="submit" name="neueintrag" value="Eintragen">
<input type="reset" value="L&ouml;schen">
</form>
<?php
// Zunächst brauchen wir eine Datenbankverbindung:
$verbindung = mysql_connect("localhost", "ftp*****", "*****");

if (!$verbindung) // War die verbindung NICHT erfolgreich? -> Wenn ja: Fehler auswerfen und beenden
{
    echo "<br><center><b>- Keine Verbindung zur Datenbank -</b></center>";
    exit;
}

mysql_select_db("creativeplains_de"); //Datenbank auswählen in die geschrieben werden soll

if($neuintrag) //ueberprueft ob der submit button gedrückt wurde
{ //Wenn ja dann daten in den guestbook table eintragen

    $id = time(); //time() gibt die zeit seit dem beginn des Unix Zeitalters in sekunden zurück
                  //wir benutzen id als Datums und Identifikations-Angabe, doch mehr dazu später

    $name = addslashes($name);             //Zeichen die im Programm Probleme verursachen könnten in PHP Spezialzeichen umwandeln
    $email = addslashes($email);         // -"-
    $homepage = addslashes($homepage);    // -"-
    $message = addslashes($message);    // -"-

    $sqlkommando = "INSERT INTO guestbook (id, name, email, homepage, message) VALUES ('$id', '$name', '$email', '$homepage', '$message')";
    // Auf gut deutsch: Füge in guestbook bei "id, name, email, homepage, message" die werte der variablen "$id, $name, $email, $homepage, $message" ein

    mysql_query($sqlkommando) or die("Error: " . mysql_error()); // Kommando 'sqlkommando' ausfuehren
                                                                 // bei misserfolg beenden und fehlermeldung ausgeben

    echo "Eintragung erfolgreich hinzugefügt"; // Bestätigung ausgeben
}

?>
<p>&nbsp;</p>
<?php
    $sqlkommando = "SELECT * FROM guestbook ORDER BY id DESC";
    // Auf gut deutsch: Nimm aus allen feldern in table 'guestbook' die Daten und sortiere sie absteigend nach 'id'
    // Hier haben wir die Wahl zwischen ASC und DESC als Sortierungsreihenfolge
    // ASC = von 1-9 und A-Z
    // DESC = von Z-A und 9-1
    // da 'id' eine zeitangabe beinhaltet werden die felder hier absteigend nach datum sortiert, der neuste eintrag steht also
    // folglich ganz oben

    $sqlanfrage = mysql_query($sqlkommando) or die("Error: " . mysql_error()); // $sqlanfrage auf das Kommando:" 'sqlkommando' ausfuehren" setzen
                                                                                // bei misserfolg beenden und fehlermeldung ausgeben

    while($daten = mysql_fetch_object($sqlanfrage)) // Solange wie daten ausgelesen werden können sollen
    {                                                // sie in das Objekt '$daten' geladen und die folgende
                                                    // schleife ausgegeben werden
        $datum = getdate($daten->id); // Datum aus 'id' konvertieren und in das 'datum' array packen

        echo "Eintrag von ". stripslashes($daten->name) ."\n<br>"; // PHP sonderzeichen entfernen und name ausgeben
        echo "Email: <a href=\"mailto:".stripslashes($daten->email)."\">".stripslashes($daten->email)."</a>\n<br>";
        echo "Homepage: ".stripslashes($daten->homepage)."\n<br>";
        echo "Geschrieben: $ndate[weekday] - $ndate[mday]/$ndate[mon]/$ndate[year] $ndate[hours]:$ndate[minutes]"; // Datum ausgeben (Englisch siehe Moartel Tutorial)
        echo "<br>";
        echo "Kommentar: <br>";
        echo nl2br(stripslashes($daten->message)); //nl2br = Zeilenumbrüche in HTML-Umbrüche (<br>) umwandeln
        echo "\n<br><br>\n";
    }
?>

</body>
</html>

Anmerkungen:
Die CSS-Datei kann man bisher eigentlich ignorieren, weil sich an dem Pfad noch keine CSS-Datei befindet. Und ich weiß das der HTML-Teil bescheiden gecodet ist, ich wollt auch nur erstmal ausprobieren ob das ganze überhaupt läuft.
 
Nur zur Richtigstellung: mysql_pconnect ist kein Fehler im Script, sondern die Funktion für eine persistente Datenbankverbindung.
Erstens: vor dem Verbindungsaufbau wird zunächst versucht eine offene (persistente) Verbindung zum gleichen Host, mit dem gleichen Benutzernamen und Benutzerkennwort zu finden. Wenn das gelingt, wird die Verbindungskennung dieser Verbindung zurückgeliefert anstatt eine neue Verbindung aufzubauen.

Zweitens: die Verbindung zum SQL Server wird beim Beenden des PHP-Skripts nicht geschlossen. Sie bleibt zur zukünftigen Verwendung bestehen. (mysql_close() schließt keine von mysql_pconnect() geöffneten Verbindungen).

snuu
 
Nur das ist zu beachten:

Note: Note, that these kind of links only work if you are using a module version of PHP. See the Persistent Database Connections section for more information.
 
Zuletzt bearbeitet:
Okay..dann passt pconnect schonmal.
Aber funktionieren tut hier immernoch nix...
Kanns sein das das PHP von meinem Webhoster vielleicht irgendwas nicht unterstützt, was in dem Code verwendet wird?
Und was gehört eigentlich genau bei Datenbankserver rein, mein Hoster hat da sowohl den 'Namen des Datenbankservers' also auch den 'externen Namen des Datenbankservers' zu bieten. Funktionieren tut das ganze allerdings mit keinem von beidem :(
 
*Thread ausgrab*
Okay..lange hats gedauert, aber jetzt hab ich ne Lösung gefunden. Es gibt nen Fehler im Tutorial.
PHP:
if($neuintrag) //ueberprueft ob der submit button gedrückt wurde
Das muss selbstverständlich neueintrag heißen.
Vielleicht ist irgendein Mod oder Admin mal so nett und editiert das ins Tutorial rein, damit nicht noch jemand sich halb kaputt sucht, wo denn sein Fehler liegt ;)
 

Neue Beiträge

Zurück