Zum Inhalt springen
  • 0

GET und POST mit HTML und PHP ( war: "Benötige Hilfe")


Frage

Geschrieben

Guten Abend liebes Forum,

 

Ich habe nun seit fast 3 Wochen meinen ersten Unterrichtsblock, komme soweit auch erstmal ganz gut mit was die Themen angeht. Nur im Fach Anwendungsentwicklung, habe ich zurzeit etwas Schwierigkeiten, da unser Lehrer leider kaum erklärt und auch bei Fragen nicht unbedingt helfen möchte.Naja, das soll jetzt nicht das Thema sein.

 

Wir haben heute das Thema GET und POST-Methode gehabt.Ich habe eine Aufgabenstellung vor mir liegen, es soll eine Webiste für eine imaginäre Firma programmiert werden mit HTML und PHP.. In dieser Website soll es eine Verlinkung zu einem Kontaktformular geben, die wir ebenfalls programmieren sollen. Das habe ich bis hierhin auch einigermaßen hinbekommen. Das Problem ist nun: sobald man die Felder ausfüllt wird in der nächsten Seite (ist ne PHP-Datei) alles, was man im Formular eingetragen hat nochmal angezeigt AUßER im Feld "Newsletter".

Das Feld Newsletter ist eine Checkbox, bei der die Kunden die Möglichkeiten haben sollen, einen der 2 Newsletter abonnieren zu können. Am Ende wird aber nicht gezeigt, welches der 2 Optionen nun ausgewählt worden ist.

Hier mal die Codes(verzeiht, wenn man es dem Code anmerkt, dass Ich wirklich kaum was von der Materie verstanden habe bis jetzt):   

 

Die HTML mit dem Kontaktformular:

<html>
   <head>
      <title>Kontaktformularentwurf</title>
   </head>
   <body>
      <h1>Kontakt</h1>
      <p>Bitte f&uuml;llen Sie die nachfolgenden Eingabefelder aus:<br></p>
      <p>
        <form action="entwurf_backend.php" method="POST">
            <table>
                <tr>
                    <td>Anrede:</td>
                    <td><input type="Text" name="ip_anrede"/></td>
                </tr>
                <tr>
                    <td>Name:</td>
                    <td><input type="Text" name="ip_name"/></td>
                </tr>
                <tr>
                    <td>Anschrift</td>
                    <td><input type="Text" name="ip_anschrift"/></td>
                </tr>
                <tr>
                  <td>E-Mail:</td>
                  <td><input type="Text" name="ip_Email"/></td>
                </tr>
                <tr>
                  <td>Nachricht:</td>
                  <td>
                      <textarea name="ip_Nachricht" rows="5" cols="25">
                         
                      </textarea>
                  </td>
               </tr>
               
              <form action="select.html">
                <label>Art der Kontaktanfrage:
                    <select name="ip_Kontaktanfrage" size="5">
                        <option>Feedback</option>
                        <option>Angebotsanfrage</option>
                        <option>Hardwaresupport</option>
                        <option>Softwareproblem</option>
                    </select>
                </label>
              </form>
              
             <form>
             <p>Abonieren Sie auch unsere verschiedenen Newsletter!</p>
                <fieldset>
                    <input type="radio" id="mc" name="ip_Newsletter" value="Unternehmensneuigkeiten">
                    <label for="mc"> Unternehmensneuigkeiten</label> 
                    <input type="radio" id="vi" name="ip_Newsletter" value=" Hardware- und Softwarenews">
                    <label for="vi">  Hardware- und Softwarenews</label>
                </fieldset>
            </form>


            </table>
            <input type="submit" name="ip_Submit" value="Nachricht senden"/>
         </form>
      </p>
   </body>
</html>

 

 

 

 

Die PHP-Datei, die am Ende ausspucken soll, was eingegeben worden ist:

 

 

<html>
   <body>
      <?php
      $email= $_POST["ip_Email"];
      $nachricht= $_POST["ip_Nachricht"];
      $Name=$_POST["ip_name"];
      $anrede=$_POST["ip_anrede"];
      $anschrift=$_POST["ip_anschrift"];
      $Kontaktanfrage=$_POST["ip_Kontaktanfrage"];
      $Newsletter=$_POST["ip_Newsletter"];
      
      echo "<h2>Sie haben die folgenden Daten &uuml;bermittelt:</h2>
            <table border=\"1\">
                <tr>
                    <td>Email</td>
                    <td> $email </td>
                </tr>
                <tr>
                    <td>Nachricht</td>
                    <td> $nachricht</td>
                </tr>
                <tr>
                    <td>Anrede</td>
                    <td> $anrede</td>
                </tr>
                <tr>
                    <td>Name</td>
                    <td> $Name</td>
                </tr>
                <tr>
                    <td>Anschrift</td>
                    <td> $anschrift</td>
                </tr>
                <tr>
                    <td>Kontaktanfrage</td>
                    <td> $Kontaktanfrage</td>
                </tr>
                <tr>
                    <td>Newsletter</td>
                    <td> $Newsletter</td>
                </tr>
            </table>";
      ?>
   </body>
</html>

 

 

 

Hoffe, ihr könnt mir helfen.. Wenn der Lehrer mir nichts beibringen möchte, bringe ich es mir eben durch das tolle Forum hier bei :) vielen Dank im voraus .

20 Antworten auf diese Frage

Empfohlene Beiträge

  • 0
Geschrieben (bearbeitet)

Hi,

der Type und Name für die Newsletter-Inputs sind falsch.

Ist:

type="radio"

name="ip_Newsletter"

Sollte:

type="checkbox"

name="ip_Newsletter[]"

Soweit ich weiß bekommst du in $_POST["ip_Newsletter"]; dann auch ein Array zurück, d.h. echo geht nicht weil array to string conversion.

Bearbeitet von Visar
  • 0
Geschrieben
vor 3 Stunden schrieb Visar:

Hi,

der Type und Name für die Newsletter-Inputs sind falsch.

Ist:

type="radio"

name="ip_Newsletter"

Sollte:

type="checkbox"

name="ip_Newsletter[]"

Soweit ich weiß bekommst du in $_POST["ip_Newsletter"]; dann auch ein Array zurück, d.h. echo geht nicht weil array to string conversion.

Notice: Undefined index: ip_Newsletter in C:\xampp\htdocs\Kontaktformular\entwurf_backend.php on line 10

Der Fehler besteht also weiterhin, auch nach der Änderung des Type auf "checkbox" :( 

  • 0
Geschrieben
Gerade eben schrieb Whitehammer03:

Notice: Undefined index: ip_Newsletter in C:\xampp\htdocs\Kontaktformular\entwurf_backend.php on line 10

Der Fehler besteht also weiterhin, auch nach der Änderung des Type auf "checkbox" :( 

$Newsletter=$_POST["ip_Newsletter"];

 

Dies ist die 10. Zeile, die in der Fehlermeldung gemeint ist.

  • 0
Geschrieben

Threadtitel angepasst. Jeder der hier einen Thread eröffnet oder eine Frage stellt sucht Hilfe. Da ist ein Threadtitel "Benötige Hilfe" echt kontraproduktiv. Es sollte im Titel schon klar sein, worum es in der Frage geht. Mancher geht halt nur die Titel der neuen Fragen durch und entscheidet daran, ob er sich die gesamte Frage durchlesen möchte.

  • 0
Geschrieben
vor 1 Minute schrieb Chief Wiggum:

Threadtitel angepasst. Jeder der hier einen Thread eröffnet oder eine Frage stellt sucht Hilfe. Da ist ein Threadtitel "Benötige Hilfe" echt kontraproduktiv. Es sollte im Titel schon klar sein, worum es in der Frage geht. Mancher geht halt nur die Titel der neuen Fragen durch und entscheidet daran, ob er sich die gesamte Frage durchlesen möchte.

Stimmt, mir ist da tatsächlich nichts eingefallen weil ich so verzweifelnd am Hilfe suchen war. Sorry ?

  • 0
Geschrieben (bearbeitet)

@Whitehammer03 Hätte das doch nicht nur im Zug überfliegen und auf das Offensichtliche eingehen sollen. Mir ist dabei entgangen, dass du unnötige form-Tags um sowohl das select als auch die beiden inputs gesetzt hast. Wenn ich deinen Code also wie folgt anpasse und die unnötigen Tags entferne, denn du möchtest an und für sich keine Formulare im Formular aufmachen, sieht das so aus:

<label>Art der Kontaktanfrage:
  <select name="ip_Kontaktanfrage" size="5">
    <option>Feedback</option>
    <option>Angebotsanfrage</option>
    <option>Hardwaresupport</option>
    <option>Softwareproblem</option>
  </select>
</label>

<p>Abonieren Sie auch unsere verschiedenen Newsletter!</p>
<fieldset>
  <input type="checkbox" id="mc" name="ip_Newsletter[]" value="Unternehmensneuigkeiten">
  <label for="mc"> Unternehmensneuigkeiten</label>
  <input type="checkbox" id="vi" name="ip_Newsletter[]" value=" Hardware- und Softwarenews">
  <label for="vi"> Hardware- und Softwarenews</label>
</fieldset>

... dann erhalte ich beim Absenden folgende, prognostizierte Rückmeldung:

Notice: Array to string conversion in E:\Programme\xampp\htdocs\form.php on line 42

Wenn ich mir das Array mittels var_dump($_POST) ausgeben lasse:

array(8) {
  ["ip_Kontaktanfrage"]=> string(15) "Softwareproblem"
  ["ip_Newsletter"]=> array(1) {
  	[0]=> string(27) " Hardware- und Softwarenews"
  }
  ["ip_anrede"]=> string(0) ""
  ["ip_name"]=> string(0) ""
  ["ip_anschrift"]=> string(0) ""
  ["ip_Email"]=> string(0) ""
  ["ip_Nachricht"]=> string(24) " "
  ["ip_Submit"]=> string(16) "Nachricht senden"
}

Dazu wird in der Tabelle bei "Newsletter" nur "Array" ausgegeben. Bedeutet, dass du hier noch eine Schleife über das Array jagen musst, um dir die Auswahl des Benutzers anzeigen zu lassen.

Bearbeitet von Visar
Typos, spät, müde.
  • 0
Geschrieben
vor 9 Stunden schrieb Visar:

@Whitehammer03 Hätte das doch nicht nur im Zug überfliegen und auf das Offensichtliche eingehen sollen. Mir ist dabei entgangen, dass du unnötige form-Tags um sowohl das select als auch die beiden inputs gesetzt hast. Wenn ich deinen Code also wie folgt anpasse und die unnötigen Tags entferne, denn du möchtest an und für sich keine Formulare im Formular aufmachen, sieht das so aus:


<label>Art der Kontaktanfrage:
  <select name="ip_Kontaktanfrage" size="5">
    <option>Feedback</option>
    <option>Angebotsanfrage</option>
    <option>Hardwaresupport</option>
    <option>Softwareproblem</option>
  </select>
</label>

<p>Abonieren Sie auch unsere verschiedenen Newsletter!</p>
<fieldset>
  <input type="checkbox" id="mc" name="ip_Newsletter[]" value="Unternehmensneuigkeiten">
  <label for="mc"> Unternehmensneuigkeiten</label>
  <input type="checkbox" id="vi" name="ip_Newsletter[]" value=" Hardware- und Softwarenews">
  <label for="vi"> Hardware- und Softwarenews</label>
</fieldset>

... dann erhalte ich beim Absenden folgende, prognostizierte Rückmeldung:


Notice: Array to string conversion in E:\Programme\xampp\htdocs\form.php on line 42

Wenn ich mir das Array mittels var_dump($_POST) ausgeben lasse:


array(8) {
  ["ip_Kontaktanfrage"]=> string(15) "Softwareproblem"
  ["ip_Newsletter"]=> array(1) {
  	[0]=> string(27) " Hardware- und Softwarenews"
  }
  ["ip_anrede"]=> string(0) ""
  ["ip_name"]=> string(0) ""
  ["ip_anschrift"]=> string(0) ""
  ["ip_Email"]=> string(0) ""
  ["ip_Nachricht"]=> string(24) " "
  ["ip_Submit"]=> string(16) "Nachricht senden"
}

Dazu wird in der Tabelle bei "Newsletter" nur "Array" ausgegeben. Bedeutet, dass du hier noch eine Schleife über das Array jagen musst, um dir die Auswahl des Benutzers anzeigen zu lassen.

Versuche ich heute Nachmittag mal, danke :)

  • 0
Geschrieben

Der Begriff Schleife, array oder var_dump sagen mir ehrlich gesagt überhaupt nichts.. dazu steht auch nichts in den Unterlagen, die wir als Hilfestellung bekommen haben..Daher muss ich mir das erstmal beibringen, was das ist und wie all das funktioniert.. Danke erstmal für die Hilfestellung, Ich hoffe den Rest kriege ich selber hin. Und falls nicht, melde ich mich :P

  • 0
Geschrieben
vor 20 Stunden schrieb Visar:

@Whitehammer03 Hätte das doch nicht nur im Zug überfliegen und auf das Offensichtliche eingehen sollen. Mir ist dabei entgangen, dass du unnötige form-Tags um sowohl das select als auch die beiden inputs gesetzt hast. Wenn ich deinen Code also wie folgt anpasse und die unnötigen Tags entferne, denn du möchtest an und für sich keine Formulare im Formular aufmachen, sieht das so aus:


<label>Art der Kontaktanfrage:
  <select name="ip_Kontaktanfrage" size="5">
    <option>Feedback</option>
    <option>Angebotsanfrage</option>
    <option>Hardwaresupport</option>
    <option>Softwareproblem</option>
  </select>
</label>

<p>Abonieren Sie auch unsere verschiedenen Newsletter!</p>
<fieldset>
  <input type="checkbox" id="mc" name="ip_Newsletter[]" value="Unternehmensneuigkeiten">
  <label for="mc"> Unternehmensneuigkeiten</label>
  <input type="checkbox" id="vi" name="ip_Newsletter[]" value=" Hardware- und Softwarenews">
  <label for="vi"> Hardware- und Softwarenews</label>
</fieldset>

... dann erhalte ich beim Absenden folgende, prognostizierte Rückmeldung:


Notice: Array to string conversion in E:\Programme\xampp\htdocs\form.php on line 42

Wenn ich mir das Array mittels var_dump($_POST) ausgeben lasse:


array(8) {
  ["ip_Kontaktanfrage"]=> string(15) "Softwareproblem"
  ["ip_Newsletter"]=> array(1) {
  	[0]=> string(27) " Hardware- und Softwarenews"
  }
  ["ip_anrede"]=> string(0) ""
  ["ip_name"]=> string(0) ""
  ["ip_anschrift"]=> string(0) ""
  ["ip_Email"]=> string(0) ""
  ["ip_Nachricht"]=> string(24) " "
  ["ip_Submit"]=> string(16) "Nachricht senden"
}

Dazu wird in der Tabelle bei "Newsletter" nur "Array" ausgegeben. Bedeutet, dass du hier noch eine Schleife über das Array jagen musst, um dir die Auswahl des Benutzers anzeigen zu lassen.

Was ich mich aber frage ist: Warum klappt es beim Formular "Art der Kontaktanfrage" denn ganz normal ohne arrays und var_dump? Im Code ist der Name ja "ip_Kontaktanfage" und in der PHP habe ich da halt  die Variable definiert in dem ich " $Kontaktanfrage=$_POST["ip_Kontaktanfrage"]; " eingegeben habe. Anschließend in der Tabelle $Kontaktanfrage und fertig. Das wars. Warum muss es bei dem Newsletter Formular was völlig anderes programmieren, damit der Wert in die Tabelle übertragen wird?

  • 0
Geschrieben (bearbeitet)

@Whitehammer03 Radio-Buttons, wie deine ip_Kontaktanfrage sind so gestaltet, dass du nur eine Auswahl treffen kannst. Entweder-oder. Das führt dazu, dass das Skript den Wert recht stumpf übernehmen kann.

Prinzipiell geht das bei Checkboxen auch, sie dürfen dann nur nicht denselben Namen haben. Wenn du also aus ip_Newsletter schlicht ip_Newsletter1 und ip_Newsletter2 machst, kannst du die Boxen genauso verarbeiten wie die Radio-Buttons. Sofern du aber den gleichen Namen für deine Checkboxen verwendest wird davon ausgegangen, dass es sich um eine Mehrfachauswahl handelt und die Werte werden sinnvollerweise, zusammenhängend in einem Array gespeichert - und du musst den Namen wie bereits gezeigt um [] ergänzen.

Und was sind das bitte für Unterlagen, die euch so böse aufs Glatteis führen?

 

Bearbeitet von Visar
  • 0
Geschrieben
vor 2 Stunden schrieb Visar:

@Whitehammer03 Radio-Buttons, wie deine ip_Kontaktanfrage sind so gestaltet, dass du nur eine Auswahl treffen kannst. Entweder-oder. Das führt dazu, dass das Skript den Wert recht stumpf übernehmen kann.

Prinzipiell geht das bei Checkboxen auch, sie dürfen dann nur nicht denselben Namen haben. Wenn du also aus ip_Newsletter schlicht ip_Newsletter1 und ip_Newsletter2 machst, kannst du die Boxen genauso verarbeiten wie die Radio-Buttons. Sofern du aber den gleichen Namen für deine Checkboxen verwendest wird davon ausgegangen, dass es sich um eine Mehrfachauswahl handelt und die Werte werden sinnvollerweise, zusammenhängend in einem Array gespeichert - und du musst den Namen wie bereits gezeigt um [] ergänzen.

Und was sind das bitte für Unterlagen, die euch so böse aufs Glatteis führen?

 

Ich hab mich ja schon vor kurzem hier über den AE Unterricht geäußert im Forum, weiß nicht ob du das mitbekommen hast. Der Lehrer kümmert sich kaum um uns, orientiert sich lieber am Tempo der Schüler, die schon fortgeschrittenere Progammierkenntnisse haben..Jeder Unterricht bei dem Lehrer ist so aufgebaut: 1.-5. Minute : kurzer Vortrag über ein paar Begriffe und Befehle, den Rest der Stunde: Aufgaben bearbeiten und am Ende der Stunde hochladen. Er kontrolliert die Aufgaben, die wir machen nicht mal und kann uns dementsprechend kein Feedback geben.. letzte Stunde meinte er, er guckt sich die Aufgaben immer nur kurz vor dem NÄCHSTEN (im Januar!!) Block an bzw benotet diese. Dabei ist die Klausur ja schon im nächsten Block... alles ein wenig Sch**ße und unstrukturiert wie ich finde.

  • 0
Geschrieben
vor 2 Stunden schrieb Visar:

@Whitehammer03 Radio-Buttons, wie deine ip_Kontaktanfrage sind so gestaltet, dass du nur eine Auswahl treffen kannst. Entweder-oder. Das führt dazu, dass das Skript den Wert recht stumpf übernehmen kann.

Prinzipiell geht das bei Checkboxen auch, sie dürfen dann nur nicht denselben Namen haben. Wenn du also aus ip_Newsletter schlicht ip_Newsletter1 und ip_Newsletter2 machst, kannst du die Boxen genauso verarbeiten wie die Radio-Buttons.

Heißt das also, ich müsste in der PHP datei folgendes machen?

 

             <tr>
                    <td>Newsletter</td>
                    <td> $Newsletter1</td>
            </tr>

            <tr>

                  <td>Newsletter</td>

                  <td> Newsletter2</td>

           </tr>

 

 

Oder gibt es die Möglichkeit, in der selben Zeile entweder Newsletter1 ODER Newsletter2 anzuzeigen? Je nachdem was halt ausgewählt worden ist?

  • 0
Geschrieben (bearbeitet)

@Whitehammer03

vor 30 Minuten schrieb Whitehammer03:

Oder gibt es die Möglichkeit, in der selben Zeile entweder Newsletter1 ODER Newsletter2 anzuzeigen? Je nachdem was halt ausgewählt worden ist?

Die Möglichkeit besteht. Persönlich würde ich an der Stelle direkt mit dem Array arbeiten, denn ansonsten müsstest du später bei jedem neuen Newsletter Variablen nachpflegen. Das ist nicht besonders.. toll. Daher hätte ich deinen Code jetzt wie folgt geändert:

" (...)
  <tr>
    <td>Kontaktanfrage</td>
    <td>$Kontaktanfrage</td>
  </tr>
  <tr>
    <td>Newsletter</td>
    <td>".handleNewsletter($Newsletter)."</td>
  </tr>
(...) "

...und sei es nur, weil auch kleine Funktionen Freude bereiten oder irritieren können:

function handleNewsletter(array $input) 
{
  $output = "";

  $last_key = end($input);
  foreach ($input as $elem) 
  {   
    $output .= $elem;
    $output .= ($last_key != $elem) ? "<br />" : null;
  }

  return $output;
}

@Chief Wiggum Dabei wäre Senilität hier von Vorteil, es geht immerhin um PHP. Besser schnell wieder vergessen und mit, ich weiß nicht, irgendetwas anderem beschäftigen.. xD

Bearbeitet von Visar
  • 0
Geschrieben

@Visar Könntest du mir den zweiten Abschnitt mit dem array nochmal geanuer erklären? Was genau birngt z.B. "function handleNewsletter(array $input) oder $last_key ? 

So wie ich das verstanden habe, sagst du mit foreach, dass jeder Input als $elem gelten soll? und Anschließend nutzt du statt $input nurnoch $elem , richtig?

  • 0
Geschrieben

@Whitehammer03 Zu aller erst.. hätte die Frage sein sollen, weshalb überhaupt foreach. Immerhin ist mir die maximale Anzahl der Elemente bekannt, weshalb nehme ich also keine for-Schleife?! Bah. Jungspunde. ? 

 

$last_key = end($input)

...gibt mir den letzten Wert aus dem Array zurück. Das habe ich an der Stelle auch nur gemacht, da ich nach jedem Element Zeilenumbrüche haben wollte - abgesehen vom letzten. Dummerweise zählt so ein foreach ja nicht selbst mit - dafür liest es sich trotzdem schöner. Zum Vergleich:

<?php
  // For-Schleife
  for ($i = 0; $i < count($input); $i++)
  {
    $output .= $input[$i];
    $output .= ($i < (count($input) - 1)) ? "<br />" : null;
  }  

  // Foreach-Schleife
  $last_key = end($input);
  foreach ($input as $elem) 
  {   
    $output .= $elem;
    $output .= ($last_key != $elem) ? "<br />" : null;
  }

Die Funktion handleNewsletter(array $input) habe ich mir geschrieben, da deine Basis ein sehr langes echo beinhaltet und ich gerade keine Lust hatte, mir das noch zurechtstückeln zu müssen. Also den String "unterbrochen", Funktion aufgerufen und Parameter übergeben, fertig. ?

Ansonsten: Ja, dem foreach wird das Array $input übergeben und mit jedem Element $elem aus $input soll anschließend X gemacht werden.

  • 0
Geschrieben

@_n4p_ Es wäre doch fad, wenn dir die einfachen Lösungen immer zuerst einfallen würden. ?

Aber stimmt schon. implode hab' ich gar nicht dran gedacht. Liegt vermutlich daran, dass ich für gewöhnlich noch mit den Arrays weiter arbeite, statt mir einfach einen String zu bauen. Oo

 

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.

Gast
Diese Frage beantworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...