werte richtig an PHP-Datei übergeben (Ajax)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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

    Comment


    • #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>
      Last edited by katja86; 07-11-2008, 08:07.

      Comment


      • #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

        Comment


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

          Comment


          • #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

            Comment


            • #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;
              ?>

              Comment


              • #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

                Comment


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

                  Comment


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

                    Comment


                    • #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

                      Comment

                      Working...
                      X