Formular an sich selbst senden

soa

Erfahrenes Mitglied
Hallo,

ich möchte gern ein Formular erstellen, in dem ich den php Code zum versenden
gleich mit aufführe, anstatt alles an eine weitere Datei wie z.B. mail.php zu versenden.

Beispiel:

Name des Scripts ist : eintrag.php

Code:
<tr>
<form name = "anmeldung" action="eintrag.php" method ="post" enctype ="multipart/form-data">
<input type="hidden" name = "ausgabezeit" value = "<?php echo time(); ?>">
<td>&nbsp;</td>
</tr>

und

Code:
<?php
include_once('footer.html');


$benutzername        = $_POST["benutzername"];
$betreff             = $_POST["betreff"];
$eintrag             = $_POST["eintrag"];

$db=mysql_connect("localhost","root")or die(mysql_error());
mysql_select_db("weblog", $db)or die(mysql_error());
mysql_query("
  INSERT INTO eintraege
  (datum, benutzername, betreff, eintrag)
  VALUES
  (NOW(''), '$benutzername', '$betreff', '$eintrag')
  ", $db)or die(mysql_error());
  
if(mysql_affected_rows($db)==1)  
    header("Location: danke.php");
else
   header("Location: fehler.php");
    
?>

  </body>
</html>

Leider sendet er nicht.....

Wo liegt da mein Denkfehler?
 
Hi

das ganze beruht auf einer Abfrage, wenn Du es auf einer Seite erstellen möchtest

if(isset($_POST['einfeld'])) {
//eintrag in DB
} else {
//Anzeigen des Formulars
}

enctype ="multipart/form-data"
kannst Du Dir sparen. Wie das sehe, lädst Du ja kein Bild auf den Server.
 
Klasse, das eintragen in die DB ist so kein Problem.

Leider funktioniert die header Zeile nicht....

header( "Location: danke.php"); -- Da lag der Hund begraben.
Da ich die header Fehlermeldung nicht beheben konnte, habe ich nun Folgendes geschrieben:

Code:
<?php
include_once('footer.html');

if(isset($_POST['benutzername'])!= "") 
$benutzername        = $_POST["benutzername"];

if(isset($_POST['betreff'])!= "") 
$betreff             = $_POST["betreff"];

if(isset($_POST['eintrag'])!= "") 
$eintrag             = $_POST["eintrag"];

$db=mysql_connect("localhost","root")or die(mysql_error());
mysql_select_db("weblog", $db)or die(mysql_error());
mysql_query("
  INSERT INTO eintraege
  (datum, benutzername, betreff, eintrag)
  VALUES
  (NOW(''), '$benutzername', '$betreff', '$eintrag')
  ", $db)or die(mysql_error());
  
if(mysql_affected_rows($db)==1)  
echo '<head><meta http-equiv="refresh" content="0; URL=danke.php"></head>';

else
   echo '<head><meta http-equiv="refresh" content="0;
URL=fehler.php"></head>';

?>

So funktioniert es auch. leider wird nun gleich weitergeleitet, ohne das man erst vorher etwas eintragen muss.

Das verstehe ich jetzt nicht, denn if(mysql_affected_rows($db)==1) kann
doch nur 1 zurückgeben, wenn schon ein Eintrag erfolgt ist?

Inclidieren geht auch nicht da der Inhalt der danke.php in die die aktuelle Seite importiert wird. Das sieht dann reichlich daneben aus.

Welchen Befehl muss ich verwenden, damit tatsächlich erst ein Eintrag in alle Felder vollzogen werden muss, bevor die Weiterleitung erfolgt?

Hab mir das irgendwie einfacher vorgestellt alles in einer Datei zu handeln.....

Vielen Dank im voraus.. :suspekt:

SOA
 
Was um himmels willen möchtest du damit erreichen:

if(isset($_POST['benutzername'])!= "")

Mit isset kannst du testen ob die Variable gesetzt ist. Das gibt 1 oder 0 zurück. Und wieso fragst du: (1 oder 0) != ""

Ich denke du solltest das != "" ganz weglassen oder sonst folgendes:
if(isset($_POST['benutzername']) || $_POST['benutzername'] != "")

Geht es dann?

MFG
redX
 
Hallo,

das hilft leider auch nicht. Es scheint, als wenn ein leeren String übergeben wird,
der dann in die Datenbank eingtragen wird.

Beim Aufruf der Seite eintrag.php erfolgt immernoch sofort eine Weiterleitung.
Es muss die Bedingung so verändert werden, dass der Eintrag nicht leer übergeben werden darf

if(mysql_affected_rows($db)==1) scheint auch keine Abhilfe zu schaffen.
 
Hi

ich würde ganz anders vorgehen und zwar die Eingabe der Felder über eine Feldvalidierung überprüfen. In dem Falle wird, sobald das Form abgeschickt wird, eine Variable auf true gesetzt. Ist ein betimmtes Feld nicht aufgefüllt, bekommt die Variable den Wert false.

Wenn alle Bedingungen erfüllt sind, dann wird auch das Formular verschickt und alle Aktionen, die daraufhin erfolgen sollen (Bestätigung, Mailer, DB-Eintrag) können dann passieren.

Hab das neulich mal hier beschrieben. Evlt. hilfts Dir als etwas anderer Ansatz.

http://www.tutorials.de/tutorials197222.html
 
Ich glaube, ich fange langsam an auch die Peanuts zu lieben....

Vielen Dank erst einmal ...

Werd mir das Tutorial mal verinnerlichen :-)

Gruß
SOA
 
mmh, die Sache gestaltet sich doch komplizierter als erwartet.

Jetzt werden die Daten nicht einmal mehr eingetragen:

http://www.tutorials.de/tutorials197222.html

1.Welche Aktion muss ich denn abfragen
2. Warum ein 2 reihiges Array


3.Wozu ist das genau?

while (list ($key, $value) = each ($_POST['reg']))
{
if($value !=""){
$ausgabe.=$key.": ".$value."<br>";

Mein Problem war ja eigentlich nur das, dass eine Weiterleitung erfolgt, ohne
dass das eigentliche Formular aufgerufen wird.

Sorry, dass ich so blöd frag, aber ich möchte nichts anwenden, was ich nicht verstanden
habe.... :(


Code:
<?php
 

$db=mysql_connect("localhost","root")or die(mysql_error());
mysql_select_db("weblog", $db)or die(mysql_error());

$benutzername     = $_POST["benutzername"];
$betreff                 = $_POST["betreff"];
$eintrag                = $_POST["eintrag"];

//welche Aktion muss ich hier jetzt eintragen?

if(isset($_POST['eintrag.php'])) { 
    $ok = 1; 

if(empty($eintrag) || empty($betreff)) 
    { 
    $fehler = '<span style="color:red;"> 
                        Bitte vollstaendig ausfüllen</span>';
    $ok =0;
    }                
                        
    }//ende aktion    
  if ($ok)
  {
mysql_query("
  INSERT INTO eintraege
  (datum, benutzername, betreff, eintrag)
  VALUES
  (NOW(''), '$benutzername', '$betreff', '$eintrag')
  ", $db)or die(mysql_error());
  
  //echo '<head><meta http-equiv="refresh" content="0; URL=danke.php"></head>';
  }

  else
  {
  //echo '<head><meta http-equiv="refresh" content="0; URL=fehler.php"></head>';
  } 

include_once('footer.html');
?>
 
1. Welche Aktion muss ich denn abfragen?

In meinem Formular gibt es ein hiddenfeld, dass NUR für diese Abfrage verwendet wird. Es lässt sich auch jedes anderes Feld abfragen, aber dieses hiddenfeld enthält IMMER einen Wert, also ist die Ansprache immer positiv. sh. Script.

2. zweidim. Array

dies dient allen der Ausgabe der Angabe auf dem Bildschirm. Es werden somit über die list() Funktionion in Abfrage des values nur die Einträge ausgegeben, die auch wirklich wichtig für den User sind. Dies kann man auch weglassen. Man muss nur wissen, was einem letztlich wichtig ist. Ich persönlich habe immer gern, dass der User weiss, dass er bestimmte Einträge getätigt hat und diese entspr. verarbeitet werden. Es gibt bestimmt auch noch andere Möglichkeiten.

3. wozu dies gnau?

zur Ausgabe auf dem Bildschirm.

Ich habe geschreiben, dass ich zuerst eine Formularvalidierung druchführen würde und wenn allesok ist, dann die erforderlichen Aktionen ausführen.

Dazu gehört, dass von Anfang an klar ist, welche Felder der User ausfüllen MUSS
Dazu gehört, dass das Script nicht auf eine x-beliebige Seite linkt, wo eine Fehlermeldung kommt, womöglich aufgrund dessen, dass im Gesamt-Request irgendein Feld nicht ausgefüllt worden ist und man wieder über einen getätigten Klick auf das Formular zurück muss und eingegebene Formularfelder sind wieder leer.

Dazu gehört, dass der User sein "übersehenes Feld" direkt angezeigt bekommt und nicht erst hin- und herklicken muss, nämlich in rotem Text neben dem Forumularfeld.

***Link entfernt
Hier befindet sich eine Demo.

Dein Script ist nicht so falsch umgesetzt nur die Abfrage ob

if(isset($_POST['eintrag.php'])) {

die gibts ja nicht wirklich, oder?
 
Zuletzt bearbeitet:
Perfekt :p

jetzt ist es sonnenklar...

habe jetzte ein hidden Feld ins Formular gesetzt und das Formular in die Bedingung gestellt. Wenn die Felder leer sind, dann rufe das Formular auf...

Vielen Dank für die große Mühe...

Gute Nacht
 
Zurück