mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 10:39 Benutzername: Passwort: Auto-Login

Thema: Formular: Pflichtfelder abhängig vom Betreff vom 14.06.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Formular: Pflichtfelder abhängig vom Betreff
Seite: 1, 2  Weiter
Autor Nachricht
ellachka
Threadersteller

Dabei seit: 14.06.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 14.06.2007 16:15
Titel

Formular: Pflichtfelder abhängig vom Betreff

Antworten mit Zitat Zum Seitenanfang

hallo,

ich möchte ein kontaktformular einbauen [/u]mit pflichtfeldern und die sich zusätzlich jeweils abhängig von dem betreff (den man auswählen kann) ändern. beim abschicken soll eine email mit dem jeweiligen betreff und den ganzen kontaktdaten gesendet wird. ausserdem sollen die kontaktdaten in eine mysql-tabelle eingetragen werden. weiss jemand, wie das geht?
vielen dank im voraus!

hier mein bisheriges skript und das formular:

<?php
$asunto=$_POST["asunto"];
$nombre=$_POST["nombre"];
$calle=$_POST["calle"];
$codigo=$_POST["codigo"];
$ciudad=$_POST["ciudad"];
$telefono=$_POST["telefono"];
$email=$_POST["email"];


if (mysql_connect("...")AND
mysql_select_db("..."))
{

$abfrage = "INSERT INTO contacto (asunto, nombre, calle, codigo, ciudad, telefono, email)
VALUES (\"$asunto\",\"$nombre\",\"$calle\",\"$codigo\",\"$ciudad\",\"$telefono\",\"$email\")";
$ergebnis = mysql_query($abfrage);
echo "<tr><td><h1>Gracias por contactarnos.<br>En breve recibir&aacute; noticias nuestras.</h1><br><br></td></tr>";
$lastid = mysql_insert_id ();
echo "<tr><td><a href='contacto.htm?id=$lastid'>Volver al formulario</a></td></tr>";

}
else {
echo "La base de datos no est&aacute; disponible.";
}

?>

<form action="contacto.php" method=post>
<h1>Contactarnos</h1>
<tr><td valign="top">Asunto:*</td>
<td width="100%"><select name="asunto">
<option value="llamar">Ll&aacute;meme por tel&eacute;fono</option>
<option value="mandar catalogo">M&aacute;ndeme un cat&aacute;logo por correo</option>
<option value="mandar info de prensa por email">M&aacute;ndeme informaci&oacute;n de prensa por e-mail</option>
</select></td></tr>
<tr><td valign="top">Nombre:*</td><td width="100%"><input type=text name="nombre" size="30" maxlength="60"></td></tr>
<tr><td valign="top">Calle:</td><td width="100%"><input type=text name="calle" size="30" maxlength="60"></td></tr>
<tr><td valign="top">C&oacute;digo postal:</td><td width="100%"><input type=text name="codigo postal" size="30" maxlength="60"></td></tr>
<tr><td valign="top">Ciudad:</td><td width="100%"><input type=text name="ciudad" size="30" maxlength="60"></td></tr>
<tr><td valign="top">Tel&eacute;fono:*</td><td width="100%"><input type=text name="telefono" size="30" maxlength="60"></td></tr>
<tr><td valign="top">E-mail:*</td><td width="100%"><input type=text name="email" size="30" maxlength="60"></td></tr>
<tr><td colspan="2"><input type=submit value="mandar"><input type=reset value="eliminiar"></td></tr>
</form>
  View user's profile Private Nachricht senden
Skyw4lker

Dabei seit: 30.08.2004
Ort: Bergisch Gladbach
Alter: 43
Geschlecht: Männlich
Verfasst Do 14.06.2007 16:39
Titel

Antworten mit Zitat Zum Seitenanfang

Also gibt 2 Möglichkeiten mit den Pflichtfeldern, entweder mit Javascript auf Clientseite prüfen ob überall was eingetragen ist. Welche JS Prüfmethode aufgerufen werden soll kannst du ja anhand der ausgewählten Betreffzeile festlegen. Das ist allerdings nicht so toll, da JS ja deaktiviert werden kann.
Die andere Möglichkeit ist, dass du mit hilfe eines "onchange" events auf der Betreffbox das formular abschickst und es dann mit php neu generierst, abhängig welcher Betreff gewählt wurde, um die Eingabedaten später per PHP zu checken.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
ellachka
Threadersteller

Dabei seit: 14.06.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 14.06.2007 17:25
Titel

Antworten mit Zitat Zum Seitenanfang

Also gibt 2 Möglichkeiten mit den Pflichtfeldern, entweder mit Javascript auf Clientseite prüfen ob überall was eingetragen ist. Welche JS Prüfmethode aufgerufen werden soll kannst du ja anhand der ausgewählten Betreffzeile festlegen. Das ist allerdings nicht so toll, da JS ja deaktiviert werden kann.
Die andere Möglichkeit ist, dass du mit hilfe eines "onchange" events auf der Betreffbox das formular abschickst und es dann mit php neu generierst, abhängig welcher Betreff gewählt wurde, um die Eingabedaten später per PHP zu checken.

danke für deine antwort, und wie würden dann die befehle in php aussehen und an welcher stelle müsste ich die einfügen? ich kenne mich leider noch nicht so gut aus mit php Lächel.
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Fr 15.06.2007 02:04
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Die andere Möglichkeit ist, dass du mit hilfe eines "onchange" events auf der Betreffbox

Nein. Nicht mit "onchange". Das funktioniert ja ebenfalls nicht, wenn JS deaktiviert ist.
Die Prüfung mit PHP ist OK, aber diese funktioniert natürlich erst, wenn das Formular abgeschickt wurde.
Und zum Abschicken würde ich einen Submit-Button nehmen. Das funktioniert dann auch ohne JS.

Naja, aber zu der Prüfung:
Ja, eine Prüfung kann clientseitig mit JS durchgeführt werden.
Das kann eine nette Sache sein. Damit kann man den User auf eventuell falsch ausgefüllte Felder hinweisen.
Aber in keinem Fall ersetzt das die serverseitige Prüfung der Daten.
Diese muß in jedem Fall durchgeführt werden.

Zitat:
ich möchte ein kontaktformular einbauen [/u]mit pflichtfeldern und die sich zusätzlich jeweils abhängig von dem betreff (den man auswählen kann) ändern.

Dazu könnte man ein JavaScript einsetzen. Allerdings bräuchte man dann eine Rückfallmethode, falls kein JS genutzt werden kann.

Und wenn man per onchange das Formular abschickt und dann immer mit PHP eine komplett neue Seite generiert und zum Client schickt, finde ich das nicht besonders sinnvoll.
Klar kann man das so machen, aber es wäre IMHO irgendwie recht unschön.
Hier würde ich eher AJAX einsetzen.
Aber gleiches Problem: Funktioniert nicht ohne JS.

Muß man sich überlegen, was am besten ist...


Code:
$asunto=$_POST["asunto"];
$nombre=$_POST["nombre"];
$calle=$_POST["calle"];
$codigo=$_POST["codigo"];
$ciudad=$_POST["ciudad"];
$telefono=$_POST["telefono"];
$email=$_POST["email"];

Warum speicherst du all diese Werte noch mal extra in neuen Variablen?
Das ist doch nur Speicherverschwendung. Das Array $_POST ist superglobal. Du kannst da problemlos immer drauf zugreifen.
Außerdem ist das mehr als fahrlässige Programmierung. Ich weiß gar nicht, wie oft ich da immer drauf hinweise.
Auch dieses Script ist anfällig für einen Angriff per SQL-Injection.
Alle Daten, die von außen kommen, dürfen nie, nie, niemals ungeprüft in SQL-Abfragen eingebaut werden.
Wenn jetzt jemand geschickt SQL-Code in dein Formular eingibt, kann der ausgeführt werden.
Da darf man sich nicht wundern, wenn mal jemand die Datenbank leert oder sonstwas anstellt.
Ändere mal all die Zeilen folgendermaßen ab:
Code:
$asunto = mysql_real_escape_string( $_POST["asunto"] );

All diese Werte müssen immer mit mysql_real_escape_string() behandelt werden, bevor du sie in deine Abfrage einbaust.
Eventuell gesendeter SQL-Code muß unschädlich gemacht werden.
  View user's profile Private Nachricht senden
ellachka
Threadersteller

Dabei seit: 14.06.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 15.06.2007 11:10
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Ändere mal all die Zeilen folgendermaßen ab:
Code:
$asunto = mysql_real_escape_string( $_POST["asunto"] );

All diese Werte müssen immer mit mysql_real_escape_string() behandelt werden, bevor du sie in deine Abfrage einbaust.
Eventuell gesendeter SQL-Code muß unschädlich gemacht werden.


ich hab den code so abgeändert und bekomme jetzt diese meldung wenn ich das formular abschicke:

Code:
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'nobody'@'localhost' (using password: NO) in /.../contacto.php on line 64
?
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Fr 15.06.2007 22:13
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
ich hab den code so abgeändert und bekomme jetzt diese meldung wenn ich das formular abschicke


Die PHP-Funktion mysql_real_escape_string() ruft die Funktion mysql_real_escape_string der MySQL-Bibliothek auf und benötigt die Verbindungskennung der MySQL-Verbindung.
Wird die Verbindungskennung nicht angegeben, wird die letzte durch mysql_connect() geöffnete Verbindung angenommen.
Falls keine solche Verbindung gefunden wird, wird versucht, eine Verbindung aufzubauen, wie es beim Aufruf von mysql_connect() ohne Angabe von Argumenten der Fall wäre.
Falls zufällig keine Verbindung gefunden oder aufgebaut werden kann, wird eine Warnung der Stufe E_WARNING erzeugt.

Das heißt für dich:
Bevor du diese Funktion aufrufst, mußt du mit mysql_connect() eine Verbindung zur Datenbank aufbauen.

Oder was du auch machen könntest, wäre statt mysql_real_escape_string() die Funktion mysql_escape_string() einzusetzen.
Die beiden Funktionen sind im Prinzip identisch, nur mit dem Unterschied, daß mysql_escape_string() keine Verbindungskennung benötigt und der aktuelle Zeichensatz nicht berücksichtigt wird.
Das würde also funktionieren.
Da die Funktion allerdings seit PHP 4.3.0 veraltet ist, würde ich vom Einsatz abraten.

Das Beste ist also, wenn du einfach zu Beginn deines PHP-Dokumentes (oder halt vor dem Aufruf von mysql_real_escape_string) einfach die Verbindung zur Datenbank herstellst.
  View user's profile Private Nachricht senden
ellachka
Threadersteller

Dabei seit: 14.06.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mi 20.06.2007 11:03
Titel

Antworten mit Zitat Zum Seitenanfang

Das Beste ist also, wenn du einfach zu Beginn deines PHP-Dokumentes (oder halt vor dem Aufruf von mysql_real_escape_string) einfach die Verbindung zur Datenbank herstellst.[/quote]

aber man ist ja nicht immer mit der datenbank verbunden, wenn ich z.b. nicht online bin, das kontaktformular aber trotzdem benutzt werden soll? was macht man da?
mit mysql_escape_string() funktioniert es jetzt, warum würdest du davon abraten?
  View user's profile Private Nachricht senden
S.Franke

Dabei seit: 27.03.2007
Ort: Bielefeld
Alter: 45
Geschlecht: Männlich
Verfasst Mi 20.06.2007 12:05
Titel

Antworten mit Zitat Zum Seitenanfang

ellachka hat geschrieben:

aber man ist ja nicht immer mit der datenbank verbunden, wenn ich z.b. nicht online bin, das kontaktformular aber trotzdem benutzt werden soll? was macht man da?
mit mysql_escape_string() funktioniert es jetzt, warum würdest du davon abraten?


Öhm, das verstehe ich nicht.

Dein Webserver sollte schon in der lage sein zu jeder Zeit die Datenbank zu erreichen. ^^
  View user's profile Private Nachricht senden
 
Ähnliche Themen Pflichtfelder für PHP-Formular...
Pflichtfelder in PHP Formular
Pflichtfelder in einem Formular
JS Frage - Formular Pflichtfelder
Formular weiterleitung abhängig von Eingabe
Adobe Acrobat Pro - Formular senden: Betreff ändern
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.