Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrseitiges Formular, Checkboxen in DB

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mehrseitiges Formular, Checkboxen in DB

    Hallo Leuts,

    ich tüftel seit geraumer Zeit an einem mehrseitigem Formular. Als es noch einseitig war, funktionierte alles - auch die Checkbox-Auswahl wurde korrekt in der Datenbank gespeichert.
    Da das Formular aber zu lang ist, unterteilte ich es auf 2 Seiten. Es werden aber immer nur die Checkboxen von der letzten Seite korrekt abgespeichert. Andere Textfelder-Inhalte funktionieren. Für die Checkboxen trägt mysql/PHPmyAdmin in das Feld nun immer ein "A" ein Misteriös.


    Index1.php im Groben:

    HTML-Code:
    <form action="index2.php" method="post">
    
    
        <h1>Art des Wohnraumes:</h1>
          <span class="reihe"><input type="radio" name="wohnraumArt[]" value="Eimfamilienhaus" /> Eimfamilienhaus</span>
          <span class="reihe"><input type="radio" name="wohnraumArt[]" value="Doppel- oder Reihenendhaus" /> Doppel- oder Reihenendhaus </span>
          <span class="reihe"><input type="radio" name="wohnraumArt[]" value="Reihenmittelhaus" /> Reihenmittelhaus</span>
          <span class="reihe"><input type="radio" name="wohnraumArt[]" value="Wohnung" /> Wohnung</span>
    
        <h1>Anschrift des Objektes:</h1>
        <label><span class="auswahl">Strasse: </span>
            <input type="text" name="strasse" id="strasse">
        </label>
        <label><span class="auswahl">Ort: </span>
            <input type="text" name="ort" id="ort">
        </label>
    
        <h1>Wohnfl&auml;che in m²:</h1>
        <label>
            <input type="text" name="wohnflaeche" id="wohnflaeche">
        </label>
    
    
        <h1>Baujahr des Hauses:</h1>
            <label>
              <input type="text" name="baujahr" id="baujahr">
        </label>
        <br><br>
         <p align="center"><input type="submit" name="Submit" value="Weiter..."></p>
    </form>
    Index2.php im Groben:

    HTML-Code:
    <form action="" method="post">
    
    <?php form_daten(); ?>
    
    
    
    <h1>Monatliche Nettogrundmiete (ohne Nebenkosten):</h1>
        <label><span class="auswahl-3">Nettogrundmiete: </span>
            <input type="text" name="nettogrundmiete" id="nettogrundmiete"><br>
    
            Wann wurde die zurzeit gezahlte Nettogrundmiete vereinbart? &nbsp; <input type="text" name="nettogrundmieteWannBezahlt" id="nettogrundmieteWannBezahlt"><br>
    
            <input type="checkbox" name="grundsteuerEnthalten[]" value="Ja" /> Grundsteuer und Versicherung sind in der vereinbarten Miete enthalten.<br>
        </label>
    
        <h1>Miete für Garage, Carport, Stellplatz in Euro:</h1>
          <label><span class="auswahl-3">Garage: </span>
              <input type="text" name="mieteGarage" id="mieteGarage">
        </label>
         <label><span class="auswahl-3">Carport: </span>
              <input type="text" name="mieteCarport" id="mieteCarport">
        </label>
         <label><span class="auswahl-3">Stellplatz: </span>
              <input type="text" name="mieteStellplatz" id="mieteStellplatz">
        </label>
        <br>
         <input type="checkbox" name="automieteEnthalten[]" value="Ja" /> Miete für Garage, Carport, Stellplatz ist in der Nettogrundmiete enthalten.<br>
    
    
         <h1>Zum Objekt gehörende Besonderheiten, die den Mietwert beeinflussen könnten:</h1>
    <textarea name="anmerkung" id="anmerkung"></textarea><br><br>
    
    
    
    
        <p align="center"><input type="hidden" name="aktion" value="speichern">
        <input type="submit" value="Absenden"></p>
    </form>

    Der PHP-Code dazu:


    PHP-Code:
    <?php
    function form_daten() {
      if (isset(
    $_POST)) {
        foreach (
    $_POST as $key => $element) {
          echo 
    "<input type="hidden" name="$key" value="$element">";
        }
      }
      else {
        foreach (
    $_GET as $key => $element) {
          echo 
    "<input type="hidden" name="$key" value="$element">";
        }
      }
    }
    ?>

    <?php
    if (isset($_POST['aktion']) and $_POST['aktion']=='speichern') {


        
    $strasse "";
        if (isset(
    $_POST['strasse'])) {
            
    $strasse trim($_POST['strasse']);
        }
        
    $ort "";
        if (isset(
    $_POST['ort'])) {
            
    $ort trim($_POST['ort']);
        }
        
    $anmerkung "";
        if (isset(
    $_POST['anmerkung'])) {
            
    $anmerkung trim($_POST['anmerkung']);
        }
        
    $erstellt date("Y-m-d H:i:s");
        if ( 
    $strasse != '' or $ort != '' or $anmerkung != '' )
        {
        
    $wohnflaeche "";
        if (isset(
    $_POST['wohnflaeche'])) {
            
    $wohnflaeche trim($_POST['wohnflaeche']);
        }
        
    $baujahr "";
        if (isset(
    $_POST['baujahr'])) {
            
    $baujahr trim($_POST['baujahr']);
        }
        
    $nettogrundmiete "";
        if (isset(
    $_POST['nettogrundmiete'])) {
            
    $nettogrundmiete trim($_POST['nettogrundmiete']);
        }
        
    $nettogrundmieteWannBezahlt "";
        if (isset(
    $_POST['nettogrundmieteWannBezahlt'])) {
            
    $nettogrundmieteWannBezahlt trim($_POST['nettogrundmieteWannBezahlt']);
        }
        
    $mieteGarage "";
        if (isset(
    $_POST['mieteGarage'])) {
            
    $mieteGarage trim($_POST['mieteGarage']);
        }
        
    $mieteCarport "";
        if (isset(
    $_POST['mieteCarport'])) {
            
    $mieteCarport trim($_POST['mieteCarport']);
        }
        
    $mieteStellplatz "";
        if (isset(
    $_POST['mieteStellplatz'])) {
            
    $mieteStellplatz trim($_POST['mieteStellplatz']);
        }



        
    $keineAngabe '';
        
    /* ############## Hier beginnt die WOHNRAUM Chackbox-Sektion ######## */

        
    $anzahl count $_POST['wohnraumArt'] );

          
    /*
           * Wenn nur eine Checkbox aktiviert ist, muss
           * keine Schleife durchlaufen werden
           */

          
    if ( $anzahl == )
          {
            
    $wohnraumArt htmlspecialchars $_POST['wohnraumArt'][0] );
          }

          
    /* Wenn keine Checkbox aktiviert wurde */
          
    else
          {

            
    $wohnraumArt $keineAngabe;

        }    

    /* ############## Grundsteuer enthalten? Checkbox ######## */


        
    $anzahl count $_POST['grundsteuerEnthalten'] );

          
    /*
           * Wenn nur eine Checkbox aktiviert ist, muss
           * keine Schleife durchlaufen werden
           */

          
    if ( $anzahl == )
          {
            
    $grundsteuerEnthalten htmlspecialchars $_POST['grundsteuerEnthalten'][0] );
          }

          
    /* Wenn keine Checkbox aktiviert wurde */
          
    else
          {

            
    $grundsteuerEnthalten $keineAngabe;

        }

    /* ############## Stellplatz-Miete Auto enthalten? Checkbox ######## */


        
    $anzahl count $_POST['automieteEnthalten'] );

          
    /*
           * Wenn nur eine Checkbox aktiviert ist, muss
           * keine Schleife durchlaufen werden
           */

          
    if ( $anzahl == )
          {
            
    $automieteEnthalten htmlspecialchars $_POST['automieteEnthalten'][0] );
          }

          
    /* Wenn keine Checkbox aktiviert wurde */
          
    else
          {

            
    $automieteEnthalten $keineAngabe;

        }


            
    // speichern
            
    $einfuegen $db->prepare("
                    INSERT INTO kontakte (strasse, ort, anmerkung, erstellt, wohnraumArt, wohnflaeche, baujahr, nettogrundmiete, nettogrundmieteWannBezahlt, grundsteuerEnthalten, mieteGarage, mieteCarport, mieteStellplatz, automieteEnthalten)
                    VALUES (?, ?, ?, NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
                    "
    );
            
    $einfuegen->bind_param('sssssssssssss'$strasse$ort$anmerkung$wohnraumArt$wohnflaeche$baujahr$nettogrundmiete$nettogrundmieteWannBezahlt$grundsteuerEnthalten$mieteGarage$mieteCarport$mieteStellplatz$automieteEnthalten );
            if (
    $einfuegen->execute()) {
               
    // header('Location: index.php?aktion=feedbackgespeichert');
               // die();
                
    echo "<h2>Danke für Ihre Angaben!</h2>";
            }
        }   
    }
    if (isset(
    $_GET['aktion']) and $_GET['aktion']=='feedbackgespeichert') {
        echo 
    '<p class="feedbackerfolg">Datensatz wurde gespeichert</p>';
    }
    ?>
    Ich glaube es muss irgendwie an der Funktion function form_daten() liegen, dass diese das Array nicht richtig mit rüber nimmt. Orientiert hatte ich mich u.a. an diesem Beispiel, was wie gesagt für den Einseiter vorher auch funktionierte: https://www.selfphp.de/praxisbuch/pr...e=188&group=32

    Hat irgendjemand eine Idee, wo oder wie ich den Code abändern müsste? Dafür wäre ich mega dankbar, ich stehe auf dem Schlauch und taste mich an PHP etc erst heran.. was man bestimtm in umständlichem Code erkennen könnte

    Viele Grüße


  • #2
    Dreh mal das ErrorReporting auf. Ich vermute hier würde er meckern:
    PHP-Code:
    echo "<input type="hidden" name="$key" value="$element">"
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Hi Arne,

      ja, das stimmt, da meckert er: Array to string conversion.

      Und nun?

      Kommentar


      • #4
        Lasse dir hatl $key und $element vorher mit var_dump ausgeben, dann siehst du schon woran es liegt.

        Kommentar


        • #5
          PHP-Code:
                echo "<input type="hidden" name="$key" value="$element">"
          Wann endet nochmal ein String, der mit doppelten Hochkomma begonnen wurde?

          Probiers mal so...
          PHP-Code:
          echo sprintf('<input type="hidden" name="%s" value="%s">'$key$element); 
          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Zitat von lstegelitz Beitrag anzeigen
            Wann endet nochmal ein String, der mit doppelten Hochkomma begonnen wurde?
            Ja, ich würde das auch anders schreiben so dass kein Backslash notwendig ist - ich würde aber mal davon ausgehen dass an der Codezeile die defekte Forensoftware hier schuld ist: die frisst Backslash …

            Kommentar


            • #7
              Es gibt auch keinen wirklich Grund mit echo herumzuhantieren. Mal davon abgesehen, dass hier gar nicht der Kontextwechsel nach HTML behandelt wird, der Code also so oder so fehlerhaft ist.
              PHP-Code:
              <input type="hidden"
                     name="<?= htmlspecialchars($keyENT_QUOTES'UTF-8'?>"
                     value="<?= htmlspecialchars($elementENT_QUOTES'UTF-8'?>">
              Und Funktionen sollten sowieso keine Ausgaben mit echo machen.

              Kommentar


              • #8
                Hallo,

                danke für die vielen Antworten und Ideen. Leider hat es bisher zwar noch nicht geklappt. Aber ich tüftel anhand eurer Ansätze weiter rum.

                Und ja, die Backslashes hatte das Forum hier gefressen, wie tk1234 vermutete..

                Kommentar


                • #9
                  Arne Drews und protestix haben dir schon die richtigen Hinweise geliefert... Hast du mal ein "var_dump($_POST);" gemacht und dir angeschaut, was wirklich ankommt?
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    Ja das hatte ich gemacht. Aber ich blieb trotzdem daran hängen, dass ich es nicht geschafft habe, die Array-Inhalte als String zwischenzuspeichern. Ich verstehe davon leider zu wenig. Aber ich habe es nun anders gelöst: wieder einen Einseiter, denn da musste ich nicht mit der Funktion form_daten die Inhalte zwischenspeichern, und dann mittels JavaScript Tabulatoren für die einzelnen Schritte. Hier kann man dann auch easy vor- und zurück blättern und die Daten der einzelen Schritte bleiben bestehen. Hierdran habe ich mich orientiert: https://www.w3schools.com/howto/howto_js_form_steps.asp

                    Nun klappt, was ich wollte. Trotzdem Danke für eure Hilfe!

                    Kommentar

                    Lädt...
                    X