werte richtig an PHP-Datei übergeben (Ajax)

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

  • werte richtig an PHP-Datei übergeben (Ajax)

    Hallo,

    folgendes kleines Problem stellt sich mir. Ich habe ein Select-Feld erzeugt, welches mit Werte gefüllt ist, die aus einer Datenbank ausgelesen werden.
    Mit Hilfe von Ajax soll der Wert, welcher im Selectfeld ausgewählt wird an die Datei "request.php" übergeben werden (wird verwendet um Daten aus einer Datenbank auszulesen). Wichtig ist mir bei der ganzen Sache, dass sobald ein Wert im Selectfeld ausgewählt wird, dieser sofort an die "request.php" gesandt wird (ganze soll ohne Button funktionieren).

    Mein nicht ganz korrekter Code sieht wie folgt aus (anscheinend funktioniert die Wertübergabe in <select name="Projnr" onchange="setRequest(value)"> nicht ganz bis überhaupt nicht):
    PHP-Code:
    <?php
    // Verbindung zur Datenbank
    ...
    // Funktion print_status_options, fuer Uebergabe der Werte an das Select-Feld in HTML
      
    function print_status_options($wert=0$fue_nr) {
        for (
    $i=0;$i<count($fue_nr);$i++) {
          echo 
    '<option value="'.$fue_nr[$i].'">'.$fue_nr[$i].'</option>'."\n";
        }
      }
    ?>

    <html>
      <head>
        <script type="text/javascript">
        
          var xmlhttp = false;
          
          function setRequest(value) {
              //Request erzeugen: fuer Mozilla
              if (window.XMLHttpRequest) {
                  xmlhttp = new XMLHttpRequest();
              }
              // fuer IE
              else if (window.ActiveXObject) {
                  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
              }
              
              //ueberpruefen ob der Request erzeugt wurde
              if (!xmlhttp) {
                  alert("Kann keine XMLHTTP-Instanz erzeugen");
                  return false;
              } else {
                  xmlhttp.open('post', 'httrequest.php',true);
                  xmlhttp.setRequestHeader('Content-Type', application/x-www-form-urlencoded');
                  xmlhttp.send('name='+value);
                  xmlhttp.onreadystatechange = interpretRequest;
              }
          }
          
          function interpretRequest() {
              switch (xmlhttp.readyState) {
                  // wenn der readyState gleich 4 ist und der xmlhttp.status 200 ist, dann ist alles korrekt gelaufen
                  case 4:
                      if (xmlhttp.status != 200) {
                          allert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+xmlhttp.status")
                      } else {
                          var content = xmlhttp.responseText;
                          // den Inhalt des Requestes (xmlhttp) in das <div> schreiben
                          document.getElementById('content').innerHTML = content
                      }
                  break;
                      default:
                  break;
              }
          }
      
        </script>
      </head>
      
      <body>
        <div id="ergebnis"></div>
        
        <form name="Auswahlform" action="">       
          <select name="Projnr" onchange="setRequest(value)">    
            <option value="0"
              <?php echo (!isset($wert) ? "selected" ""); ?>
                >--- Bitte Projektnummer w&auml;hlen ---</option>
              <?php
                print_status_options
    ($wert$fue_nr);
              
    ?>
          </select>
        </form>
      </body>
      
    </html>
    weiterhin die "httrequest.php" (starkt vereinfacht ohne Datenbank-abfrage):
    PHP-Code:
    <?php
    header
    ('Content-Type: Text/html; charset=utf-8');
    header('Cache-Control: must-revalidate, pre-check=0, no-store, no-cache, max-age=0, post-check=0')

    $nr $_POST['name'];
    echo 
    $nr;

    // $nr wird fuer Datenbankabfrage verwendet
    ?>
    Übrigens, super wäre eine Lösung wo ich komplett auf die "httprequest.php" verzichten kann, sprich das ganze in einer PHP/HTML-Datei unterbracht wird.

    vielen Dank schon mal

    LG

  • #2
    ja weil da etwas stehen müsste wie this.options[this.options.selectedIndex].value statt einfach nur value mit einem alert(value) in deiner JS funktion hätteste aber schon mal was rausfinden können
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Ich habe das ganze noch einmal umgeschrieben, sieht schon ein wenig besser aus, klappt jedoch trotzdem noch nicht. Also nach dem aus dem Selectfeld ein Wert ausgewählt wurde wird dieser durch ein "alert" probeausgegeben (siehe: alert(document.Auswahlform.Projnr.options[i].value); )

      Weiterhin klappt die Übergabe mit reinen Stringwerten (siehe: http.send('a=1&b=2&c=3'); ). Will ich jetzt z.B. stattdessen http.send('a='+document.Auswahlform.Projnr.options[i].value); übergeben klappt das ganze nicht.

      mein Code sieht jetzt so aus:
      PHP-Code:
      <?php
      // Verbindung zur Datenbank herstellen
      ...
      // Funktion print_status_options, fuer Uebergabe der Werte an das Select-Feld in HTML
        
      function print_status_options($wert=0$fue_nr) {
          for (
      $i=0;$i<count($fue_nr);$i++) {
            echo 
      '<option value="'.$fue_nr[$i].'">'.$fue_nr[$i].'</option>'."\n";
          }
        }
      ?>

      <html>
        <head>
          <script type="text/javascript">
          
             function Select_Auswahl() {    
              for(i=0; i < document.Auswahlform.Projnr.length; ++i) 
                if (document.Auswahlform.Projnr.options[i].selected == true)
                    // richtige Ausgabe des im Selectfeld angewaehlten Wertes
                    alert(document.Auswahlform.Projnr.options[i].value);
                    
                    var http = null;
                    if (window.XMLHttpRequest) {
                       http = new XMLHttpRequest();
                    } else if (window.ActiveXObject) {
                       http = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    if (http != null) {
                       http.open("POST", "httrequest.php", true);
                       http.onreadystatechange = ausgeben;
                       http.setRequestHeader(
                          "Content-Type",
                          "application/x-www-form-urlencoded");
                       http.send('a=1&b=2&c=3'); // wird richtig ausgegeben
                       // dies wird nicht ausgegeben:
                       http.send('a='+document.Auswahlform.Projnr.options[i].value);
                    }
                    
                    function ausgeben() {
                       if (http.readyState == 4) {
                          document.getElementById("Ausgabe").innerHTML =
                             http.responseText;
                       }
                    }
             }  
          
          </script>
        </head>
        
        <body>
          <div id="ergebnis"></div>
          
          <form name="Auswahlform" action="">  
      <!--- Selectfeld zur Auswahl der Projektnummer --->      
            <select name="Projnr" onchange="Select_Auswahl()">    
              <option value="0"
                <?php echo (!isset($wert) ? "selected" ""); ?>
                  >--- Bitte Projektnummer w&auml;hlen ---</option>
                <?php
                  print_status_options
      ($wert$fue_nr);
                
      ?>
            </select>
          </form>
          HTML vom Server:
          <div id="Ausgabe"></div>
        </body>
        
      </html>
      Zuletzt geändert von katja86; 07.11.2008, 09:07.

      Kommentar


      • #4
        schon mal auf die idee gekommen, mit selectedIndex zu arbeiten?

        peter
        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
        Meine Seite

        Kommentar


        • #5
          ich sehe den Vorteil gegenüber Value nicht, außerdem brauche ich den Wert für eine spätere sql-select-Anweisung

          Kommentar


          • #6
            du brauchst keine schleife
            PHP-Code:
            sel document.Auswahlform.Projnr.selectedIndex;
            val document.Auswahlform.Projnr.options[sel].value
            außerdem solltest du dir schnellstens die geschweiften klammern angewöhnen!
            PHP-Code:
            for (05i++)
                if (
            =5)
                
            alert (i);
                
            alert ('hallo'); 
            ist etwas völlig anderes als
            PHP-Code:
            for (05i++)
            {
              if (
            =5)
              
            alert (i);
              
            alert ('hallo');

            oder
            PHP-Code:
            for (05i++)
            {
              if (
            =5)
              {
                
            alert (i);
              }
              
            alert ('hallo');

            da wird wohl auch der fehler liegen.

            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              ich habe das ganze durch Einführung einer Variable gelöst:
              PHP-Code:
              if (document.Auswahlform.Projnr.options[i].selected == true)
                            
              // richtige Ausgabe des im Selectfeld angewaehlten Wertes
                            
              var wert document.Auswahlform.Projnr.options[i].value
              einige Zeilen weiter unten wird diese Variable dann übergeben.
              Die Zeile
              PHP-Code:
              http.send('a='+document.Auswahlform.Projnr.options[i].value); 
              habe ich durch die Zeile
              PHP-Code:
              http.send('name='+wert); 
              ersetzt.

              Der Aufruf in der httrequest.php (in die alles übergeben wurde) erfolgt durch:
              PHP-Code:
              <?php
                $name 
              $_POST['name'];
                echo 
              $name;
              ?>

              Kommentar


              • #8
                wie kann ich nach einen XML-Request die Daten in ein Inputfeld einpflegen?

                eine Möglichkeit der Ausgabe ist:
                <div id="Ausgabe"></div>

                das ganze will ich so einrichten, dass stattdessen der Wert in einem Inputfeld landet

                Kommentar


                • #9
                  PHP-Code:
                  document.furmularname.inputname.value 
                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    vielen Dank Peter, der Abend ist gerettet ;-)

                    Kommentar


                    • #11
                      vielleicht solltest du dir mal das tutorial zu gemüte führen. da wird alles genau erklärt.

                      peter
                      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                      Meine Seite

                      Kommentar

                      Lädt...
                      X