bounty: formulardaten an externe php- datei senden. wie?

Hallo.

Ich habe leider nicht so viel Ahnung von PHP und Javascript und hoffe daher, dass mir hier geholfen werden kann.

Ich habe folgendes Formular in einer HTML- Seite:

<form name="f" action="suche.php" method="post">
<div style="top:111px; left:825px; width:134px; height:40px">
<a onclick="window.frames['main'].location.href='suche.php?suchen='+suchbegriff; return false;" href="">
</a>
</div>
<div style="height=320; top:116px; left:683px; width:130px; height:20px">
 <input type="text" maxlength="40" name="suchbegriff" size="18">
</div>
</form>

Nun möchte ich, dass der Suchbegriff, der eingegeben wurde, an die externe PHP- Datei übergeben wird (dort gibt es eine Variable $suchen = $_POST['suchbegriff'];). Und genau das funktioniert nicht bzw. wird immer ausgegeben, dass kein Suchbegriff eingegeben wurde:

if (empty($suchen)) {
    echo 'Sie haben keinen Suchbegriff eingegeben';
}
else ...

Was ist falsch?
Vielen Dank schon mal.

  1. Hello,

    Nun möchte ich, dass der Suchbegriff, der eingegeben wurde, an die externe PHP- Datei übergeben wird (dort gibt es eine Variable $suchen = $_POST['suchbegriff'];). Und genau das funktioniert nicht bzw. wird immer ausgegeben, dass kein Suchbegriff eingegeben wurde:

    Wie lautet denn der Name, der Bezeichner oder gar der URi für die "externe PHP-Datei"?

    Kann sein, dass ich das eben überlesen habe, aber ich denke, nur "interne Ressourcen" gefunden zu haben.

    Ein harzliches Glückauf

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Hallo

    <form name="f" action="suche.php" method="post">
    <div style="top:111px; left:825px; width:134px; height:40px">
    <a onclick="window.frames['main'].location.href='suche.php?suchen='+suchbegriff; return false;" href="">

    warum kann man Dein Formular nur mit Javascript benutzen? Das ist doch überflüssig. Spendiere Deinem Formular einen Submit-Button. Du schickst Dein Formular mit diesem Link auch nicht ab, Du erstellst nur einen Request, der in einem GET-Parameter Deinen Suchbegriff enthält.

    </a>
    </div>
    <div style="height=320; top:116px; left:683px; width:130px; height:20px">
    <input type="text" maxlength="40" name="suchbegriff" size="18">
    </div>
    </form>

    Nun möchte ich, dass der Suchbegriff, der eingegeben wurde, an die externe PHP- Datei übergeben wird (dort gibt es eine Variable $suchen = $_POST['suchbegriff'];).

    Was ist falsch?

    Du suchst in $_POST, was nur in $_GET vorhanden ist. Das so oft gesehene Umkopieren ist völlig unnötig.

    a) Schicke auch per Javascript Dein Formular ab, statt mit location.href
       herumzuwursteln. Da hilft Dir die Methode submit() des forms-Objektes.

    b) Wie bereits von mir angemerkt, spendiere dem Formular einen Submitbutton,
       so dass man das Formular auch bei deaktiviertem Javascript benutzen kann.

    Freundliche Grüße

    Vinzenz

    1. warum kann man Dein Formular nur mit Javascript benutzen? Das ist doch überflüssig. Spendiere Deinem Formular einen Submit-Button.

      Hallo Vinzenz.

      Das würde ich ja gerne. Vielleicht kannst du mir ja helfen, denn der Button sieht eigentlich so aus:

      <a onmouseover=bw(6,find_h) onmouseout=bw(6,find_n) onclick="window.frames['main'].location.href='suche.php?suchbegriff='+suchbegriff;
       return false;"
       href="">
      <img alt="" src="slice/b06_0.jpg" border=0>
      </a>

      Wenn ich nun aber ein Objekt <input type="Image"> nehme, weiß ich nicht, wie ich das Target (ein iframe) bestimmen kann.
      Bei einem <input type="submit"> funktioniert das auch nicht und zusätzlich kann ich dort kein Image drauf packen, jedenfalls wird bei mir dann immer der Button angezeigt und darunter das Bild.
      Wie also kann ich für einen Submit- Button ein Bild und ein Target definieren?

      1. Hallo

        warum kann man Dein Formular nur mit Javascript benutzen? Das ist doch überflüssig. Spendiere Deinem Formular einen Submit-Button.

        Das würde ich ja gerne. Vielleicht kannst du mir ja helfen, denn der Button sieht eigentlich so aus:

        <a onmouseover=bw(6,find_h) onmouseout=bw(6,find_n) onclick="window.frames['main'].location.href='suche.php?suchbegriff='+suchbegriff;
        return false;"
        href="">

        wie bereits erwähnt - ist dies ein Link und kein Button.

        Wenn ich nun aber ein Objekt <input type="Image"> nehme, weiß ich nicht, wie ich das Target (ein iframe) bestimmen kann.

        Eine kleine Einführung in SELF-SELF:

        Das steht bestimmt in http://de.selfhtml.org/index.htm@title=SELFHTML, klick.
        <http://de.selfhtml.org/navigation/html.htm@title=Kurzreferenz: HTML> hört sich gut an, klick.
        http://de.selfhtml.org/navigation/html.htm#formulare@title=Formulare sollte passen, klick.

        Ist der zweite Eintrag dort das, was Du wissen willst?

        Bei einem <input type="submit"> funktioniert das auch nicht und zusätzlich kann ich dort kein Image drauf packen, jedenfalls wird bei mir dann immer der Button angezeigt und darunter das Bild.
        Wie also kann ich für einen Submit- Button ein Bild

        Schau Dir die oben verlinkte Liste genau an. Da gibt es Möglichkeiten. Schau Dir die Beschreibungen an, lies Dir durch, welche Einschränkungen gelten.

        und ein Target definieren?

        s.o.

        Clevere Webseitenersteller verzichten auf Frames und IFrames und haben daher auch kein Target-Problem. Überlege Dir, weswegen Du überhaupt diesen IFrame verwendest und ob es nicht sinnvoller wäre, auf diesen zu verzichten.

        Freundliche Grüße

        Vinzenz

        1. und ein Target definieren?

          besten Dank!

          Clevere Webseitenersteller verzichten auf Frames und IFrames und haben daher auch kein Target-Problem. Überlege Dir, weswegen Du überhaupt diesen IFrame verwendest und ob es nicht sinnvoller wäre, auf diesen zu verzichten.

          Ich weiß, dass es cleverer wäre auf Frames zu verzichten. Nur weiß ich ehrlich nicht, wie man es anders (und vor allem einfach) lösen könnte, dass nur bestimmte Teile einer Seite neu geladen werden. Es geht sicher mit PHP, aber mich damit jetzt auseinander zusetzen würde einfach zu lange dauern.
          Trotzdem vielen Dank :-)

          1. Hallo bounty,

            Ich weiß, dass es cleverer wäre auf Frames zu verzichten. Nur weiß ich ehrlich nicht, wie man es anders (und vor allem einfach) lösen könnte, dass nur bestimmte Teile einer Seite neu geladen werden.

            Und wozu soll das gut sein? Was ist schlecht daran, daß eine gesamte Seite neu geladen wird? Wenn dies einen so enormen zusätzlichen Traffic oder so große Wartezeiten für den erneuten Seitenaufbau verursacht, dann ist die _Seite_ per se schlecht und nicht die Aussage, daß man keine Frames verwenden soll.

            MfG

            gooxsy

  3. Hallo Bounty

    <a onclick="window.frames['main'].location.href='suche.php?suchen='+suchbegriff; return false;" href="">
    </a>

    Mit dieser Zeile leitest du auf die Seite suche.php um, allerdings übergibst du dabei den Parameter als GET Parameter. Dazu ein paar Worte als Erläuterung:

    wenn du einen normalen Link einbaust, wie zum Beispiel:

      
    <a href="suche.php?suchen=test>ein Testlink</a>  
    
    

    und dann darauf klickst, wird das Script suche.php aufgerufen und sofern PHP zur Verfügung steht, ist dann im Script die Variable $_GET['suchen'] definiert und hat den Wert 'Test'. Dies ist ein sogenannter GET Parameter. Dieser kann direkt über die URL übergeben werden. ich könnte auch direkt in der Adresszeile des Browsers eingeben: www.example.com/suche?suchenn=nocheintest, dann hätte $_GET['suchen'] den Wert 'nocheintest'. Aufpassen muss ich hierbei, wenn ich Sonderzeichen, aber auch Leerzeichen übertragen will. In diesem Fall muss ich den Parameter speziell codieren. Aber das führt im Moment zu weit.

    Zurück zu deinen Formular (und jetzt kommt der Trick) Wenn man ein Formular benutzt, will man (meistens) die Parameter nicht als GET, sondern als POST übertragen. Daher kann man im form-tag das Attribut method setzen. Also method="post" oder method="get". Wenn method="post" gesetzt ist, steht der Wert des Parameters (in deinem Beispiel) hinterher in $_POST['suchen']. Aber wie komme ich zu der anderen Datei (dem Script suche.php)?

    Im Formular kann (muss) ich mit dem Atribut action angeben, wohin das formular abgeschickt werden soll. Also in diesem Fall action="suche.php". Beachte bitte, dass hier nichts an die URL angehängt wird. Die Werte sollen ja über POST gesendet werden...
    Absenden kann man das ganze über einen button zum absenden hier bemühe ich mal SELFHTML, da ist alles ziemlich gut erklärt.

    Falls irgendwas an dieser Antwort unklar ist, frag ruhig nochmal nach. Ich schweife manchmal ein wenig vom Thema ab und habe auch noch nicht soviel Erfahrung mit dem Erklären, aber ich bemühe mich :-)

    Liebe Grüße mbr

    1. Hallo Ingrid

      <a href="suche.php?suchen=test>ein Testlink</a>

      
      >   
        
      geht schon los mit den schlechten Erklärungen. Nicht mal eine Zeile HTML kann ich fehlerfrei schreiben - dabei habe ich schon die Vorschau benutzt ;-(  
      Da fehlt natürlich ein Anführungszeichen:  
        
      ~~~html
        
       <a href="suche.php?suchen=test">ein Testlink</a>