• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Gästebuch funktioniert nicht...

Excelsion

Neues Mitglied
Hallo,
ich arbeite gerade an einem kleinen Gästebuch.
Man soll seinen Namen und die Nachricht angeben, ausserdem lese ich die IP des Nutzers aus und speichere diese in einer Variable ab.

Aus irgendeinem Grund wird aber nichts in die Datenbank eingetragen...
Es wäre wirklich nett wenn ihr mir bei der verbesserung helfen könntet :D

Mein PHP Code:
PHP:
<?php
$name      = $_POST["name"];
$nachricht = $_POST["nachricht"];
$ip        = $_SERVER["REMOTE_ADDR"];
if (isset($_POST["eintragen"]))
{
    mysql_connect("serverip", "username", "pw", "port");
    mysql_select_db("db_166581_4"); /* Das ist die Datenbank...^^ =D */

    $sqlab = "insert gaestebuch"
    . "(name, vorname, ip) values "
    . "('" . $name . "', "
    . "'" . $nachricht . "', "
    . "'" . $ip . "')";
    mysql_query($sqlab);

    $num = mysql_affected_rows();
    if ($num>0)
    {
        echo "<p><font color='#ff0000'>";
        echo "Die Nachricht wurde hinzugef&uuml;gt!";
        echo "</font></p>";
    }
    else
    {
        echo "<p><font color='#ff0000'>";
        echo "Es ist ein Fehler aufgetreten, ";
        echo "es wurde keine Nachricht eingetragen!";
        echo "</font></p>";
    }
}
?>

Keine Ahnung wieso das nicht geht, vielen dank für eure Hilfe im Vorraus :o)

mfg Daniel
 
Abgesehen davon, dass du die Post-Variablen unsicher einfach so übernimmst, ergänze mal das folgende hinter dem SQL-String:

Code:
echo $sqlab;
mysql_query($sqlab) || die("Fehlerhaftes SQL-Statement");

Dadurch lässt Du dir das SQL-Statement ausgeben und das kannst Du dir dann mal im phpmyadmin anschauen. Dann solltest Du schlauer sein ;)
 
Hmm. Funzt nicht, könnte mir denn jemand sagen, wie ich die Types der Felder in der Datenbank eingestellt haben muss?
 
Hmm ich probiers mal, denke aber, dass es auch so funktioniert, zumindest steht es SO^^ in meinem PHP Buch (PHP 5.3).
Und auch mit Insert Into gehts nich xD

Welchen Type müssen denn eig. die Felder in der Datenbank haben?
Hab die jetzt auf 'varchar'^^
 
Zuletzt bearbeitet:
Hmm. Funzt nicht, könnte mir denn jemand sagen, wie ich die Types der Felder in der Datenbank eingestellt haben muss?
So genau.. Was sagt PHPmyadmin dazu wenn du probierst die query dort ausführen zu lassen so wie threadi es dir vorgeschlagen hat?
Kopier uns das Statement und den fehler bitte ;) Und ja es heisst INSERT INTO ;)
 
Als erstes würde ich eine ID definieren.
ID -> auto_inc, primär schlüssel, int, not null

Den Rest auf varchar.

Wird hiermit eine Fehlermeldung ausgegeben?

PHP:
<?php
$name      = mysql_real_escape_string($_POST["name"]);
$nachricht = mysql_real_escape_string($_POST["nachricht"]);
$ip        = mysql_real_escape_string($_SERVER["REMOTE_ADDR"]);
if (isset($_POST["eintragen"])) {
    mysql_connect("serverip", "username", "pw", "port") or die("Datenbankverbindung fehlgeschlagen: ".mysql_error());
    mysql_select_db("db_166581_4") or die("Datenbank konnte nicht ausgewählt werden: ".mysql_error()); /* Das ist die Datenbank...^^ =D */

    $sqlab = "INSER INTO gaestebuch (name, vorname, ip) 
    VALUES ('" . $name . "', '" . $nachricht . "', '" . $ip . "')";
    mysql_query($sqlab) or die("Datensatz konnte nicht gespeichert werden: ".mysql_error());
    
    $num = mysql_affected_rows();
    echo "<p><font color='#ff0000'>";
    if ($num>0)
    {
        echo "Die Nachricht wurde hinzugef&uuml;gt!";
    }
    else
    {
        echo "Es wurde keine Nachricht eingetragen!";
    }
    echo "</font></p>";
}
?>
 
manche server mögen es auch nicht wenn du die feldnamen nicht mit einem `` umschließt kannst auch mal probieren, habe meinen auch so eingestellt das er das sonst nicht akzeptiert, weil ich bei mir alles mit sauberem Code haben möchte..
 
Das hat nichts mit "manchen Servern" zu tun sondern ist eine Grundfunktion von MySQL - schon seit den frühesten Versionen. Man muss die Backticks nicht immer schreiben, theoretisch nur bei Spalten- und Tabellennamen die vom Namen her einer MySQL-Funktion entsprechen. Z.B. "insert" oder "select".
 
Zurück
Oben