PHP, OOP, MySQL Query geht nicht
-
Hi!
Nutze folgende Klasse für mein Projekt: http://www.devmag.net/webprog/php_oop_3.htm . Da ich neu in Sachen OOP bin dachte ich die ist schön übersichtlich. SELECT Querys funktionieren auch super, aber mein INSERT query geht nicht. Hab ich da etwas übersehen? Ist die Klasse nur für SELECT gemacht? Erbitte Hilfe.
Danke euch
-
Zeig mal dein Code wie du dein Insert aufrufst.
Naja, mir gefällt die Klasse ganz und gar nicht.
Mit der Zeit bekommst du den dreh mit OOP noch raus
-
hmmmm
Also in der incex.php includier ich die klasse und erstelle einen neuen db_connect
/*anderer code*/ include("system/class_db.php"); /*anderer code*/ $database = new db_connnect(DB_HOST, DB_USER, DB_PASSWORD); $database->db_select(DB_DATABASE); /*anderer code*/ /*hier wird dann die guestbook.php includiert*/ $database->db_close();
in der guestbook.php sieht der code für den insert so aus:
/*anderer code*/ if((isset($_POST['name']) && !empty($_POST['name'])) && (isset($_POST['text']) && !empty($_POST['text'])) && isset($_POST['submit'])) { $query = $database->db_query("INSERT INTO `delikatess_guestbook` (`id`, `ip`, `hostname`, `realdate`, `formatdate`, `name`, `email`, `text`) VALUES ('', '".getenv("REMOTE_ADDR")."', '".gethostbyaddr(getenv('REMOTE_ADDR'))."', '".$realdate."', '".$formatdate."', '".$_POST['name']."', '".$_POST['email']."', '".$_POST['text']."')"); include(realpath("template/guestbook/guestbook_8.html")); } elseif((isset($_POST['name']) && empty($_POST['name'])) || (isset($_POST['text']) && empty($_POST['text'])) && isset($_POST['submit'])) { include(realpath("template/guestbook/guestbook_9.html")); }
Und es kommt eben immer der Fehler: "Fehler beim Senden der Abfrage..."
-
Ok, dass Problem liegt bei der sql Funktion der Klasse. Diese Fehlermeldung erhälst du aus dem einfachen grund, weil die Funktion mysql_query keine Resource zurück gibt. Alternativ könntest du die Klasse ein wenig verändern damit diese korrekt funktioniert, dir eine andere MySQL Klasse Organisieren oder sogar selbst eine schreiben.
-
Also erst einmal danke ich dir dafür, dass du dich meinem Problem angenommen hast.
Was das Problem angeht verstehe ich noch nicht genau, was du meinst mit:
weil die Funktion mysql_query keine Resource zurück gibt
Meinst du es muss ein mysql_fetch_*** vorhanden sein?
Also eine Klasse selber zu schreiben schaffe ich noch nicht ich habe mich gerade erst ein bisschen in OOP eingelesen. Eine neue wollte ich nicht suchen, da die hier zum üben ganz überschaubar ist. Also bleibt noch die Klasse erweitern...
-
Ändere mal bitte folgenden Code der Klasse ab
function sql($sql) { if (!$this->erg = mysql_query($sql, $this->connid)) { echo "Fehler beim Senden der Abfrage..."; } return $this->erg; }
Zu
function sql($sql) { mysql_query($sql, $this->connid) or die(mysql_error()); }
Somit kannst du überprüfen ob eventuell an deinem Insertstatment was falsch ist. Hab nochmals nachgelesen. Normalerweise müsste er dir bei einem erfolgreichen Insertstatment ein true zurück geben.
-
Ok also hier ist die Ausgabe der Seite mit dem geänderten Code:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /.../guestbook.php on line 35
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /.../guestbook.php on line 64
Kleine Anmerkung meinerseits: Ich hatte die Methoden umbenannt. ALso nicht wundern, dass im obigen Post beim query "db_query" steht und auf der Quellseite sql.
Hier der Code:
32 if(!isset($_POST['submit'])) 33 { 34 $query = $database->db_query("SELECT id FROM delikatess_guestbook"); 35 $number = mysql_num_rows($query); 36 37 $query = $database->db_query("SELECT formatdate, name, email, text FROM delikatess_guestbook ORDER BY realdate DESC LIMIT ".mysql_escape_string($eu).", ".mysql_escape_string($limit).""); 38 } /*Weiterer Code*/ 62 if(!isset($_POST['submit']) || empty($_POST['submit'])) 63 { 64 while($data = mysql_fetch_array($query)) 65 { 66 include(realpath("template/guestbook/guestbook_3.html")); 67 } 68 }
-
Das dies geschieht ist klar. Hast du auch überprüft ob der Datensatz in der Datenbank angelegt wurde?
Den Code kann man wieder zurück ändern.
-
Ich habe gerade nochmal einen versucht zu erstellen und er wurde nicht gespeichert. Ich habe es in phpmyadmin überprüft.
-
Ok ich habde den Fehler. Ich habde den Code nochmal geändert (wie du es gesagt hast) und dann nochmal versucht einen Eintrag hinzuzufügen. Diesmal mit dem Resultat, dass er mir sagte, dass das Feld hostname nicht existiere. Ich habe es nachträglich erstellt und jetzt geht es.
Vielen lieben dank guenni!