HX3 Foren  

  HX3 Foren > Konstruktiv > Software- und Webentwicklung

Software- und Webentwicklung Planung, Programmierung und Administration
UML, JavaScript/DOM, ASP, JSP, PHP, Apache, MySQL, Python, Perl (...)

Antwort
 
Themen-Optionen Ansicht
Alt 01.10.2003, 20:07   #1 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 19.05.2003
Ort: Rostock
Alter: 35
Beiträge: 114
StefanRHRO eine Nachricht über ICQ schicken
Standard

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 )

Code:
<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>
Code:
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.
__________________
http://riedel-st.de
StefanRHRO ist offline   Mit Zitat antworten
Alt 01.10.2003, 21:32   #2 (permalink)
Administrator 10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Atomic
 
Registriert seit: 21.02.2003
Ort: Freiburg im Breisgau
Alter: 33
Beiträge: 5.139
Atomic eine Nachricht über ICQ schicken Atomic eine Nachricht über Skype™ schicken
Standard

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
__________________
http://webagentur-walde.de/
Atomic ist offline   Mit Zitat antworten
Alt 02.10.2003, 14:13   #3 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 19.05.2003
Ort: Rostock
Alter: 35
Beiträge: 114
StefanRHRO eine Nachricht über ICQ schicken
Standard

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:
Code:
$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.
__________________
http://riedel-st.de
StefanRHRO ist offline   Mit Zitat antworten
Alt 02.10.2003, 19:05   #4 (permalink)
Administrator 10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Atomic
 
Registriert seit: 21.02.2003
Ort: Freiburg im Breisgau
Alter: 33
Beiträge: 5.139
Atomic eine Nachricht über ICQ schicken Atomic eine Nachricht über Skype™ schicken
Standard

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

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!
Atomic ist offline   Mit Zitat antworten
Alt 02.10.2003, 20:10   #5 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 19.05.2003
Ort: Rostock
Alter: 35
Beiträge: 114
StefanRHRO eine Nachricht über ICQ schicken
Standard

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
__________________
http://riedel-st.de
StefanRHRO ist offline   Mit Zitat antworten
Alt 11.10.2003, 18:33   #6 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 19.05.2003
Ort: Rostock
Alter: 35
Beiträge: 114
StefanRHRO eine Nachricht über ICQ schicken
Standard

So ich habe es jetzt endlich geschafft. der Fehler lag in der Schreibweise anstatt
Code:
$guestbook_insert_sql="INSERT INTO gb (gb_name,gb_website,gb_text,gb_date,gb_mail) VALUES ('".$_REQUEST['gb_name']."','".$_REQUEST['gb_website']."','".$_REQUEST['gb_text']."','".$_REQUEST['gb_date']."','".$_REQUEST['gb_mail']."')";
habe ich immer
Code:
$guestbook_insert_sql="INSERT INTO gb ('gb_name','gb_website','gb_text','gb_date','gb_mail') VALUES ('".$_REQUEST['gb_name']."','".$_REQUEST['gb_website']."','".$_REQUEST['gb_text']."','".$_REQUEST['gb_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.
__________________
http://riedel-st.de
StefanRHRO ist offline   Mit Zitat antworten
Alt 24.10.2003, 15:23   #7 (permalink)
50 Beiträge100 Beiträge
 
Registriert seit: 19.05.2003
Ort: Rostock
Alter: 35
Beiträge: 114
StefanRHRO eine Nachricht über ICQ schicken
Standard

Zitat:

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
__________________
http://riedel-st.de
StefanRHRO ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116