Warbier Geschrieben 10. September 2009 Geschrieben 10. September 2009 Hallo an alle Fachinformatiker\innen , Ich benötige kurz eure hilfe. Und zwar habe ich mir ein Gästebuch erstellt. Die Einträge werden in eine Datenbank abgelegt. Um diese Einträge zu schreiben, habe ich ein Formular erstellt, es ist PHP und HTML basierend aufgebaut. Es wird angegeben: Name: (textbox) Max Musterman E-mail: (textbox) Mustermann@muster.de url: (textbox) http://www.Mustermann.tl.de Eintrag: (Textarea) Blala blubb (Button) [speichern] So nach dem klicken auf Speichern, wird die Abfrage gestartet, ob wirklich alle Felder Ausgefüllt wurden.... (Pflichtfelder wie Name, Eintrag und Email) Wenn der Eintrag korreckt ist (wie oben augeschrieben) dann speichert er den Eintrag ganz normal und macht einen reset, so dass das eintrage feld wieder Leer ist, für die nächste angabe! Falls nicht alles angegeben wurde, speichert er den eintrag nicht, und es erfolgt ein reset der Seite. Das Problem ist nun, das die Felder wieder alle Leer sind und der Benutzter wieder alle neu eingeben müsste. Was muss ich tun um die Einträge speichern zu lassen um dem Benutzter einfach nur darauf hinzuweisen, das er etwas vergessen hat und nicht wieder alles neu eintippen muss? Ich hoffe ihr könnt mir einen kleinen Tipp geben ;-)! MfG Warbier Zitieren
Saerdna Geschrieben 10. September 2009 Geschrieben 10. September 2009 Wie währs mal mit dem Quellcode oder wie sollen wir dir da helfen? Glaskugeln habe ich leider keine mehr sind mir letzte Nacht ausgegangen Zitieren
Warbier Geschrieben 10. September 2009 Autor Geschrieben 10. September 2009 Sry, das ich den Quelltext nicht sofort gepostet habe, aber ich schäme mich einwenig für diesen ^^! Ich war ziemlich viel am Frickeln und bin ehrlich noch Blutiger Anfänger, also bitte nicht haun ^^! Quelltext: <?php ####### Eingabe Prüfung ######################### array_walk ( $_POST, 'eingabebereinigen' ); function eingabebereinigen(&$value, $key) { // keine HTML-Tags erlaubt, außer p und br $value = strip_tags($value,'<p><br /><b><strong>'); // HTML-Tags maskieren $value = htmlspecialchars($value, ENT_QUOTES); // Leerzeichen am Anfang und Ende beseitigen $value = trim($value); } ####### Wenn abfrage ########################### if ( $_POST['name'] != "" && $_POST['email'] != "" AND $_POST['eintrag'] != "" ) ####### Insert in die Datenbank ####################### { $_POST['eintrag'] = nl2br($_POST['eintrag']); $sql = " INSERT INTO ###gaestebuch "; $sql .= " SET "; $sql .= " email ='". $_POST['email'] ."', "; $sql .= " name ='". $_POST['name'] ."', "; $sql .= " url ='". $_POST['url'] ."', "; $sql .= " datum ='". date("Y-m-d H:i:s") ."', "; $sql .= " eintrag='". $_POST['eintrag'] ."' "; define ( 'MYSQL_HOST', '####host####' ); define ( 'MYSQL_BENUTZER', '#####' ); define ( 'MYSQL_KENNWORT', '#####' ); define ( 'MYSQL_DATENBANK', '#####' ); ############# Verbindungsaufbau prüfung ################################ $db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT); if ( ! $db_link ) { // hier soll dann später eine // E-Mail mit dem Problem zukommen gelassen werden // die Fehlermeldung für den Programmierer sollte // das Problem ausgeben mit: mysql_error() die('keine Verbindung zur Zeit möglich - bitte später probieren '); } $db_sel = mysql_select_db( MYSQL_DATENBANK ) or die("Auswahl der Datenbank fehlgeschlagen"); // ausführen des mysql-Befehls $db_erg = mysql_query( $sql ); if ( ! $db_erg ) { die('Ungültige Abfrage: ' . mysql_error()); } ########### Mail an ############################################ $empfaenger = "############"; //Mailadresse $absender = $_POST['email']; $betreff = "Gästebuch-Eintrag"; $mailtext = $_POST['eintrag']; $antwortan = $_POST['email']; unset($_POST); mail( $empfaenger, $betreff, $mailtext, "From: $absender\nReply-To: $antwortan"); if(!$_SERVER["HTTP_REFERER"]){ $redirect = "index.php?page=gaestebuch-eintrag&PHPSESSID=".session_id(); } else { $redirect = $_SERVER["HTTP_REFERER"]; } header("Location: ".$redirect); exit; } ?> <form name="eintrag" action="" method="POST" enctype="text/html"> <p>Ihr Name:*<br /> <input type="text" name="name" value="" size="50" maxlength="150" /> </p> <p>Ihre E-Mail-Adresse:*<br /> <input type="text" name="email" value="" size="50" maxlength="150" /> </p> <p>Ihre Homepage:<br /> <input type="text" name="url" value="dwad" size="50" maxlength="150" /> </p> <p align="center"><? echo $mailtext;?></p> <p>Gästebucheintrag:*<br /> <textarea style="page-break-after: auto" name="eintrag" value="Text" rows="8" cols="45"></textarea> </p> <input type="Submit" name="speichern" value="speichern"> *Pflichtfelder<br/><br/> <a href="gaestebuch.php">Zu den Gästebuch Einträgen<br/></a><br/> </form> <? ########## Auslesen der Datenbank ###################### define ( 'MYSQL_HOST', '#####Host######' ); define ( 'MYSQL_BENUTZER', '#####' ); define ( 'MYSQL_KENNWORT', '#####' ); define ( 'MYSQL_DATENBANK', '#####' ); ############# Verbindungsaufbau prüfung ################################ $db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT); if ( ! $db_link ) { // hier sollte dann später dem Programmierer eine // E-Mail mit dem Problem zukommen gelassen werden // die Fehlermeldung für den Programmierer sollte // das Problem ausgeben mit: mysql_error() die('keine Verbindung zur Zeit möglich - später probieren '); } $db_sel = mysql_select_db( MYSQL_DATENBANK ) or die("Auswahl der Datenbank fehlgeschlagen"); ############## SQL-Befehl für den Zugriff ############################# $sql = "SELECT * FROM ###gaestebuch ORDER BY datum desc"; ############## ausführen des mysql-Befehls ############################## $db_erg = mysql_query( $sql ); if ( ! $db_erg ) { die('Ungültige Abfrage: ' . mysql_error()); } ############### Anzeige der Anzahl der Einträge ############################ $anzahl_eintraege = mysql_num_rows($db_erg); $einträge = $anzahl_eintraege; while ($daten = mysql_fetch_array( $db_erg, MYSQL_ASSOC)) { ########### Ausgabe der Daten ############################################ echo '<table border="1" width="100%"> <tr> <td width="40%" align="left" valign="top" >'; echo "<b> Name: </b>"; echo $daten['name']; echo "<br />"; echo "<b>Datum: </b>"; echo $daten['datum']; echo "<br />"; echo "<b>E-Mail: </b>"; echo $daten['email']; echo "<br />"; echo "<b>URL: </b>"; echo $daten['url']; echo "<br /></td><td align='left' valign='top'>"; echo $daten['eintrag']; echo "<br />"; echo '</td></tr></table>'; } mysql_free_result( $db_erg ); ?> Zitieren
Saerdna Geschrieben 10. September 2009 Geschrieben 10. September 2009 (bearbeitet) Jo fangen wa mal an: Wozu 2 mal Logindaten für MySQL? Warum Shorttags und nicht <?php? Alles in allem schon sehr unübersichtlich. Gib mir mal bitte die DB dazu ich werds mal umbaun if($_POST['name'] != "" && $_POST['email'] != "" AND $_POST['eintrag'] != "") [/php] auch ne interessante Art das lösen zu wollen würd ich z.B. auf die Schnelle so machen: [php] if($_POST['name'] != "" || $_POST['email'] != "" || $_POST['eintrag'] != "") echo "Error bitte alles Felder ausfüllen"; else { dein insert oder was auch immer } bzw ich bau dir mal flink was zusammen denke mal dann hast du einen groben Überblick und kannst darauf aufbaun Bearbeitet 10. September 2009 von Saerdna Zitieren
Saerdna Geschrieben 10. September 2009 Geschrieben 10. September 2009 (bearbeitet) So also alles ins htdocs dann die SQL rein in PHPmyadmin oder was auch immer, dann in /include/dbconnect.php Logindatenanpassen und das wars Ist ein Grundstein für normale Einträge musst dann einfach erweitern, bei Fragen immer her damit, habs nur auf die Schnelle gemacht aber bestimmt eine kleine Orientierung für dich Edit Hab die Anfrage zu Ausgabe aller Einträge nochmal nachträglich eingefügt musst nur noch die Tabelle einbaun wie du das haben willst, steht aber im Quelltext hab nur <table> und </table> eingebaut und darin die while Schleife.guestbook.zip Bearbeitet 10. September 2009 von Saerdna Zitieren
flashpixx Geschrieben 10. September 2009 Geschrieben 10. September 2009 Ich empfehle ganz dringend die Logindaten außerhalb des Scriptes bzw außerhalb des DocumentRoot des Webservers zu lagern, da es sicherer ist, falls mal die Mimetypen falsch verarbeitet werden. Zitieren
Saerdna Geschrieben 11. September 2009 Geschrieben 11. September 2009 Hmm bei hunderten von Scripten und CMS Systemen noch nie gesehn, würde ja auch schlecht gehn wenn man z.B. nur ein Vserver hat der nur zugriff auf htdocs zulässt usw. Das Logindaten nicht in der index.php zu suchen haben sollte klar sein, subfolder muss man natürlich schützen etc, aber darüber wurde hier nicht geredet Zitieren
Aiun Geschrieben 11. September 2009 Geschrieben 11. September 2009 man nennt es open_basedir, es bestimmt neben dem document_root welches verzeichnis gelesen werden darf (außerhalb des docroot) Zitieren
Saerdna Geschrieben 11. September 2009 Geschrieben 11. September 2009 (bearbeitet) Wie stellst das auf on wenn man keinen Zugriff auf die php.ini hat? Und das nen MIME Type wie text/css falsch interpretiert wird halt ich für eher äußert unwarscheinlich. Bearbeitet 11. September 2009 von Saerdna Zitieren
Aiun Geschrieben 11. September 2009 Geschrieben 11. September 2009 es geht um den mimetype application-xhtml/php ^^, der geht dann nähmlich als Quelltext raus und da stehen deine Zugangsdaten. die basedir-direktive wird im vhost angegeben. D.h. muss vom Hoster eingerichtet werden. ob eine htaccess-variante möglich ist, weis ich auswendig nicht. Suchmaschinen helfen. Zitieren
Saerdna Geschrieben 11. September 2009 Geschrieben 11. September 2009 (bearbeitet) Dennoch überflüssig aber jedem das Seine Ab PHP 5.3 wird open_basedir auch für Änderungen während der Laufzeit mit der PHP Funktion ini_set freigegeben. Dadurch wird open_basedir für Zwecke des Einsperrens auf bestimmte Verzeichnisse am Webserver unwirksam... Bearbeitet 11. September 2009 von Saerdna Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.