PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Tabelle wird nicht gefüllt in DB


StefanRHRO
01.10.2003, 20:07
Hy Atomic und der REst der WElt ich habe mal wieder ein kleines PHP/MySQL Prob und zwar, will via Formular, meine Tabelle, wo GB einträge reinkommen füllen, nur leider klappt das nicht obwohl ich der Meinung bin es müsste ich sehe aber irgendwie den Wald vor lauter Bäumen nicht mehr.

hier mal das Formular und danach das GB Script (unvollständig :) )

<form action="gb.php" method="post">
<table width="100%" border="0" cellpadding="1" cellspacing="1">
&nbsp;<tr>
&nbsp; &nbsp;<td width="50%"><p>Name:</p></td>
&nbsp; &nbsp;<td width="50%"> <input name="name" type="text" class="form" tabindex="1" value="Stefan" size="17" maxlength="25">
&nbsp; &nbsp;</td>
&nbsp;</tr>
&nbsp;<tr>
&nbsp; &nbsp;<td width="50%"><p>E-Mail:</p></td>
&nbsp; &nbsp;<td width="50%"> <input name="mail" type="text" class="form" tabindex="2" value="info@pixel4me.de" size="17">
&nbsp; &nbsp;</td>
&nbsp;</tr>
&nbsp;<tr>
&nbsp; &nbsp;<td width="50%"><p>Website:</p></td>
&nbsp; &nbsp;<td width="50%"> <input name="website" type="text" class="form" tabindex="3" value="www.pixel4me.de" size="17">
&nbsp; &nbsp;</td>
&nbsp;</tr>
&nbsp;<tr>
&nbsp; &nbsp;<td width="50%" valign="top"> <p>Dein Eintrag:</p></td>
&nbsp; &nbsp;<td width="50%"> <textarea name="eintrag" cols="30" rows="5" wrap="PHYSICAL" class="form" tabindex="4">sdfkagfhghjgsadgfasd</textarea>
&nbsp; &nbsp;</td>
&nbsp;</tr>
&nbsp;<tr>
&nbsp; &nbsp;<td width="50%"> <br> <input name="senden" type="submit" class="form" id="senden" tabindex="5" value="abschicken">
&nbsp; &nbsp; &nbsp;<input name="date" type="hidden" id="date" value="<?php echo date ("Y-m-d H:i:s"); ?>"> </td>
&nbsp; &nbsp; &nbsp;<td width="50%"> <br> <input tabindex="6" type="reset" class="form"> </td>
&nbsp; &nbsp;</tr>
&nbsp;</table>
</form>
if ($senden) {
&nbsp;$name=strip_tags($name);
&nbsp; &nbsp;$mail=strip_tags($mail);
&nbsp; &nbsp;$website=strip_tags($website);
&nbsp; &nbsp;$eintrag=strip_tags($eintrag);

&nbsp; &nbsp;//Konvertiere Zeilenumbrüche in HTML-<br>-Umbrüche
&nbsp; &nbsp;$eintrag=nl2br($eintrag);
&nbsp;
&nbsp;if (strlen($name)<3) {
&nbsp;//Name falsch
&nbsp; $error = "&nbsp;&nbsp;&nbsp;Bitte gebe deinen Namen an.<br><br>\n";
&nbsp;}
&nbsp;if (strlen($eintrag)<3) {
&nbsp;//Eintrag falsch
&nbsp; $error .= "&nbsp;&nbsp;&nbsp;Dein Gästebucheintrag ist leider zu kurz.<br><br>\n";
&nbsp;}
&nbsp;if(ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$mail)) {
&nbsp; //Mail korrekt Namen verlinken
&nbsp; $name = "Name:&nbsp;&nbsp;&nbsp; <a href=mailto:" . $mail . ">" . $name . "</a>\n";
&nbsp;}
&nbsp;
&nbsp;//Es wurde auch eine websiteadresse angegeben - entsprechende Formatierung vornehmen
&nbsp;if(ereg("^([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$website)){
&nbsp; &nbsp;if(!ereg("^http:////",$website)){
&nbsp; &nbsp; &nbsp;//http:// fehlt in der Angabe der Adresse - hier ergänzen
&nbsp; &nbsp; &nbsp;$website="http://" . $website;
&nbsp; &nbsp; &nbsp;}
&nbsp; &nbsp;$web_format="<br>Homepage: <a href=" . $website . " target='_new'>" . $website . "</a>";
&nbsp;}
&nbsp;if (isset($error)) {
&nbsp; //min. eine Eingabe ist falsch
&nbsp; $msg = "<br>Dein Gästebuch eintrag konnte aus folgenden Gründen nicht vorgenommen werden: <br>\n";
&nbsp; $msg .= "<br><strong>" . $error . "</strong>\n\n";
&nbsp; $msg .= "<br> Klicke bitte auf <a href=\"javascript:history.back(1)\">zurück</a>.<br><br>\n";
&nbsp; }
&nbsp;else {
&nbsp; //neuen Gästebuch eintrag vornehmen
&nbsp;
&nbsp;$guestbook_SQL_insert="INSERT INTO gb (gb_name,gb_website,gb_text,gb_date) VALUES ('".$_REQUEST['$name']."', '".$_REQUEST['$website']."', '".$_REQUEST['$eintrag']."','".$_REQUEST['$date']. "')";
&nbsp; mysql_query($guestbook_SQL_insert);

&nbsp;//Mail an Webmaster
&nbsp; //$empf = "info@pixlem4.de";
&nbsp; //$subject = "Neuer Eintrag im GB";
&nbsp; //$header = "From: $name \n";
&nbsp; //body = "$name hat einen neuen Eintrag im GB getätigt.\n";
&nbsp;}
}

Danke im Vorraus, falls mir einer helfen kann. :)

Atomic
01.10.2003, 21:32
Ich bin ziemlich müde und darf auch morgen gleich wieder um 5 Uhr aufstehen.
Also nicht übel nehmen wenn meine Antwort mal nicht so dolle ausfällt..

Bist du dir sicher das der Server wo das Script drauf kommt "register_globals" aktiviert hat?
Standartmäsig ist es nicht so.
D.H.: Du kannst auf die Variabeln die per POST (siehe Formular-method) gesendet werden (ab PHP v.4.2.x) nur per $_POST["variabelname"] und bei den Versionen davor in jedem Fall über $HTTP_POST_VARS["variabelname"] zugreifen.
Wenn das nicht der Fall ist dann hab ich 2 ausgereifte Codepassagen die dem Abhilfe schaffen.

Dann schreibst du in der ersten Zeile "if ($senden)"
Ich bin mir da zwar nicht sicher aber sollte es nicht eher "if(isset($senden))" oder "if($senden=="senden")" heisen?

Dann würde ich auf jeden Fall preg_replace anstatt ereg nutzen. Ist schneller und ausgereifter.
Ein sehr gutes Regex Tutorial auf Deutsch findest du auf: http://www.regenechsen.de/regex_de/regex_1_de.html
Regex Codeschnipsel auf PHP.net in Funktionsreferenz zu preg_replace.
Bis der Rest nicht Funktioniert würde ich das mal drausen lassen.

Genau wie bei der URL Validierung. Apropo URL. Hab vor ein paar Tagen so einen Prügel von einer Klasse geschrieben als neues URL Format. Naja nicht direkt (in PHP ist es nicht möglich). Die Klasse zerlegt die URL oder um was auch immer es sich für eine pfadangabe handelt in ihre einzelteile. Hab ich gemacht um endlich von den standart php funktionen wegkommen die hier oft unausreichende arbeit leisten.
Aber wenn ich an die neue UBB Klasse denke so muss ich immer noch zittern wenn es um dieses Thema geht.

Zur $error-Geschichte.
Mach es so:
Erst erstellst du ganz die Variabel aber leer also "$error="";"
Bei jedem Fehler hängst du der Variabel einen Text an: "$error .= "Text";"
Und am ende prüfst du ob ein Fehler aufgetreten ist anstatt mit isset mit empty: "if(!empty($error)){ die("ERRROOORRR!!!
".$error); }" .. oder so..

Dein DB Querry check ich nicht ganz:
Du schreibst: "$_REQUEST['$website']"
D.H. so viel wie: "PHP gib mi den Inhalt der über POST oder GET übermittelten Variabel mit den Namenn der als Inhalt in der Variabel $website drin steht"
Häh?
A wieso die Zugangsdaten über die URL oder ein Formular senden?
B die Variabel $website enthält eine URL

Also falls du in wirklichkeit die URL in die Tabelle eintragen willst, dann:
Schreib entweder (von mir empfohlen): "$_REQUEST["website"]" und das überall wo es um die Website URL geht
oder überall "$website" aber dann musst du sicherstellen das PHP auch die Variabel mit den über das Forrmular übergebenen Daten (in dem Fall die Website URL) füllt. Und diese Einstellung wird nunmal fast schon mit aller Gewalt von den machern von PHP aus dem weg geräumt weil es so ziemlich die einfachste hackmöglichkeit schlecht hin bietet, da der Hacker dein Script nur noch mit ein paar Variabeln über die URL abfüllen muss um das zu erreichen von dem er sich eine gewisse erregung erhofft der ***** *****!

Dann würde ich auch die Spaltennamen "gb_name" usw. in >"< oder >'< schreiben.

Auserdem sollte zuvor schon eine Verbindung zur DB bestehen ^^ (logischerweise versteht sich)

g8

StefanRHRO
02.10.2003, 14:13
Moin Atomic, danke erstmal für deine Hilfe.

Das mit der Variable $senden ist so ich überprüfe, ob beim aufrufen der Seite mit if($senden), ob die Variable den booleschen Wert true hat, was sie ja hat, wenn sie existiert und mit dem Inhalt des abschicken Buttons geüllt ist. So und denn sollte Sie den REst machen, halt die Email überprüfen usw. So das habe ich jetzt erstmal auskommentiert. Aber es klappt immer noch net habe der Variable $senden (die jetzt überprüft wird ob sie existiert :) ), $name, $website, $eintrag und $date die PHP Variable $_POST vorran gestellt. Das sieht bei der DB Sache so aus:
$guestbook_SQL_insert="INSERT INTO gb (gb_name,gb_website,gb_text,gb_date) VALUES ('".$_POST["$name"]."', '".$_POST["$website"]."','".$_POST["$eintrag"]."', '".$_POST["$date"]."')";.

Und wegen der Variable $website, die wird beschrieben, wenn der User in das Formularfeld dafür ein URL angibt. oder ist die für PHP reserviert?

Ich weiß jetzt aber immer noch net warum das net geht. :(

EDIT: Ich habe jetzt einfach mal auf den Seitenkopf die einzelnen Variablen, die durch das Formular übergeben wurden ausgegeben, das funktioniert, nur er trägt halt nichts in die DB ein. :(

Atomic
02.10.2003, 19:05
Bitte mach eine Projektpause und lern mal was Arrays sind und wie sie funktionieren bzw. wie man sie nutzt.
Dann wirst du auch verstehen was "$_POST["$eintrag"]" bewirkt.
Da liegt nämlich der Fehler warum nichts in die DB eingetragen wird.

Danach das durchlesen: http://www.php.net/manual/de/language.vari....predefined.php (http://www.php.net/manual/de/language.variables.predefined.php)

Denke dann blickst du gleich mal viel besser bei Scripten durch, auch wenn es noch einiges braucht bis du fehrlerfrei scripte zu schreiben in der Lage bist.

Fakt/Fehler:
- Deine Schreibweise ("$_POST["$eintrag"]") bewirkt etwas ungewolltes. Weist du was es bewirkt?
- Du hast dich nicht auf eine Übergabe-Regel bei Variabeln festgelegt. (Da nutzt du einmal das superglobale Array mit den POST Variabeln und im Rest hingegen gehst du fest davon aus das PHP automatisch die Variabeln vom Formular registriert (für dich im Script über die "$ + name_der_variabel"-Syntax nutzbar macht).

Never give up!

StefanRHRO
02.10.2003, 20:10
Moin Atomic,

danke erstmalfür deine Hilfe. ;)

So und nun zu meiner Antwort. Ich weiß zwar, was Arrays sind und wie sie funktionieren, aber ich habe noch nicht soviel mit ihnen zu tun gehabt, vorallem mit denen von PHP zu Verfügung gestellten, aber ich werde mir das mal anschauen, in der PHP - Doku.

Schönes We :)

StefanRHRO
11.10.2003, 18:33
So ich habe es jetzt endlich geschafft. :) der Fehler lag in der Schreibweise anstatt$guestbook_insert_sql="INSERT INTO gb (gb_name,gb_website,gb_text,gb_date,gb_mail) VALUES ('".$_REQUEST['gb_name']."','".$_REQUEST['gb_websi te']."','".$_REQUEST['gb_text']."','".$_REQUEST['g b_date']."','".$_REQUEST['gb_mail']."')";

habe ich immer $guestbook_insert_sql="INSERT INTO gb ('gb_name','gb_website','gb_text','gb_date','gb_ma il') VALUES ('".$_REQUEST['gb_name']."','".$_REQUEST['gb_websi te']."','".$_REQUEST['gb_text']."','".$_REQUEST['g b_date']."','".$_REQUEST['gb_mail']."')"; geschrieben. Wo der Fehler liegt, naja es ist das Detail. Die Spaltennamen gb_text usw. habe ich mit -->'<--- geschrieben.

Also einfach mal längs schauen. ;)

StefanRHRO
24.10.2003, 15:23
Originally posted by AtomicHX3@Oct 1 2003, 09:32 PM
...Dann würde ich auf jeden Fall preg_replace anstatt ereg nutzen. Ist schneller und ausgereifter.
Ein sehr gutes Regex Tutorial auf Deutsch findest du auf: http://www.regenechsen.de/regex_de/regex_1_de.html...
Hy ich habe da ein Tutorial gefunden, was (meiner Meinung nach) besser ist, es erklärt, die BBCodes und irgendwie (ob ungewollt oder auch nicht) das Regex "Prob"

http://www.phptutorials.de/index.php?cat=5&article=33