Antworten auf deine Fragen:
Neues Thema erstellen

SQL Abfrage innerhalb JavaScript mit Kriterium

didi01

Aktives Mitglied

Hallo zusammen,

ich habe innerhalb eines JavaScript Codes eine SQL Abfrage. In diese Abfrage soll ein Kriterium die Datensätze nach einem bestimmten Kunden filtern.

Das Kriterium kommt aus PHP und ich packe es in eine JavaScript Variable mit folgender Anweisung.
Code:
var kd_check = document.FORMULAR.kunde.value;

mit einem alert habe ich geprüft das die Variable kd_check korrekt gefüllt ist.

diese JavaScript Variable möchte ich nun mit weiteren Verlauf in einer SQL Abfrage verwenden und habe diese so in die Abfrage eingefügt.
Code:
 $sql_kd = "SELECT Behaelter_Typ.benr, Behaelter_Typ.beindex, Behaelter_Typ.bebezeichnung, behaelter_typ_kunde.kunde
             FROM Behaelter_Typ INNER JOIN behaelter_typ_kunde ON Behaelter_Typ.benr = behaelter_typ_kunde.behaelter_nr
             WHERE behaelter_typ_kunde.kunde = ' + kd_check + ' ORDER BY Behaelter_Typ.bebezeichnung";

Die Abfrage wird aber nicht ausgeführt und ich bekomme auch keine Fehlermeldung.
Meine Frage ist nun, wie bekomme ich die JavaScript Variable korrekt in die SQL Abfrage eingebunden?

Vielen Dank im Voraus.

Gruß
didi01
 

dkarvounaris

Lead Web Developer

PSD Beta Team
Zum besseren Verständnis:

Du willst eine SQL Abfrage im Javascript im Browser ausführen? Oder in den PHP part und die Variable vom Javascript übergeben bekommen?

Oder redest du über serverseitiges Javascript wie nodeJS?
 

didi01

Aktives Mitglied

Hi,

ich möchte eine SQL Abfrage innerhalb einer JavaScript Funktion im Browser ausführen.
Diese JavaScript Funktion ist in einer PHP Datei.

Die JavaScript Funktion wird mit einem Button ausgelöst und als Ergebnis wird im Browser innerhalb eines Select Feldes der Inhalt aus der SQL Abfrage ausgegeben.

z.B. (ist nur ein kleiner Auszug)

Code:
var optionFeld = document.createElement('option');
        var selectWert = selectFeld.appendChild(optionFeld);

Dies funktioniert einwandfrei wenn ich z.B. ins Abfragekriterium den Wert von Hand eintrage. Es wir dann jedes mal ein weiters Select Feld erzeugt wenn ich erneut auf den Button klicke, aber es soll ja aus der Variablen kd_check kommen, die auch korrekt gefüllt ist, wie der alert Befehl es mir bestätigt hat. Ich weis halt nur nicht wie ich diese JavaScript Variable in die SQL Anweisung hineinbekommen.

Ich hoffe ich konnte das Problem einigermaßen schildern.

Gruß
didi01
 

Fugel

rebmeM

PSD Beta Team
Ich kann dir leider nicht zu 100% folgen aber verwendest du dafür AJAX? Wenn nein, solltest du das machen.
 

Curanai

Aktives Mitglied

Guten Morgen,

JavaScript "spricht" mit PHP bei generellem Versand eines Formulars oder via async-Variante AJAX (sofern es keine node.js-Frage ist).

Für mich beim Überfliegen fiel das auf: kd_check (im SQL Statement). Das kann in PHP so nicht funktionieren, wenn es aus JavaScript kommt; es fehlt mind. das typische Variablen-Symbol $ (sonst nutzt Dein SQL Query eine Spalte mit dem Namen; wäre diese Typ int, kommt kein Fehler).

Tipp: Lass Dir den Query für die Datenbank vor Ausführung zeigen - im Zweifelsfall mittels mail() an Deine eigene Adresse. Den führe mal manuell aus ... ich würde um einen Pott Kaffee wetten, dass es Fehler wirft.

Also ... für Fugel und mich: Wie kommt Dein JavaScript zum PHP?

Beste Grüße
 

didi01

Aktives Mitglied

Hallo,

sorry das ich mich erst jetzt melde, aber beim dem schönen Wetter am Wochenende war ich nicht am PC.
Ich versuche jetzt mal etwas genauer zu beschreiben.
Ich habe eine PHP Datei in der ich an einer Stelle einen Button habe, der mit onClick eine JavaScript Funktion aufruft.
HTML:
input type="button" name="schreiben" value="+" onclick="createInput()">
wenn man auf den Button clickt, wird die die JavaScript Funktion aufgerufen die sich in der PHP Datei befindet.

Code:
<script type="text/javascript">
function createInput() {
<?php
  $sql="SELECT * FROM behaelter_typ WHERE status = 1 ORDER BY standard DESC, bebezeichnung";
  $res=odbc_exec($dbcon,$sql);
  ?>

  var zahl = document.FORMULAR.kontrollfeld.value;
  var kd_check = document.FORMULAR.kd_check.value;

  if(zahl=="") {
      zahl=1;
  }

  var TD1textfeld1 = document.createElement('input');
      TD1textfeld1.type = 'text';
      TD1textfeld1.name = 'we_anzahlbehaelter[' + zahl + ']';
      TD1textfeld1.size = '5';
      TD1textfeld1.maxLength = '3';

  var br = document.createElement('br');

  var selectFeld = document.createElement('select');
      selectFeld.name = 'behaeltertyp[' + zahl + ']';
       
  <?php
  if($anzahl_kd > 0) {
    while(odbc_fetch_into($res_kd,$data_kd)) {
      ?>

      var optionFeld = document.createElement('option');
      var selectWert = selectFeld.appendChild(optionFeld);
      selectWert.text = "<?php echo $data_kd[2];?>" + ", " + "<?php echo $data_kd[1];?>";
      selectWert.value = "<?php echo $data_kd[0];?>";

    <?php
    }
    ?>

    var optionFeld = document.createElement('option');
    var selectWert = selectFeld.appendChild(optionFeld);
    selectWert.text = "------------------------------------------------------------";
    selectWert.value = "";
   
  <?php
  }

  $z1 = 1;
  while (odbc_fetch_into($res,$data_sel)) {
      if(($z1 > 1) && ($trennlinie != $data_sel[17])) {
        ?>

        var optionFeld = document.createElement('option');
        var selectWert = selectFeld.appendChild(optionFeld);
        selectWert.text = "------------------------------------------------------------";
        selectWert.value = "";

      <?php 
      }
      ?>
      var optionFeld = document.createElement('option');
      var selectWert = selectFeld.appendChild(optionFeld);
      selectWert.text = "<?php echo $data_sel[5];?>" + ", " + "<?php echo $data_sel[4];?>";
      selectWert.value = "<?php echo $data_sel[0];?>";
  <?php
  $trennlinie = $data_sel[17];
  $z1++;
  }

  $sql="SELECT * FROM ladeeinheiten";
  $res=odbc_exec($dbcon,$sql);
  ?>

  var selectFeldLE = document.createElement('select');
      selectFeldLE.name = 'ladeeinheit[' + zahl + ']';

  <?php
  while (odbc_fetch_into($res,$data_le)) {
      if($_SESSION['language']=="deutsch") {
          $le_anz=$data_le[2];
          } elseif($_SESSION['language']=="polnisch") {
              $le_anz=$data_le[3];
      }
      ?>
      var optionFeldLE = document.createElement('option');
      var selectWertLE = selectFeldLE.appendChild(optionFeldLE);
      selectWertLE.text = "<?php echo $le_anz;?>";
      selectWertLE.value = "<?php echo $data_le[0];?>";
  <?php
  }
  ?>
   
  var out = document.getElementById("hs");
      out.appendChild(TD1textfeld1);
      out.appendChild(selectFeldLE);
      out.appendChild(selectFeld);
      out.appendChild(br);

  zahl++;
  document.FORMULAR.kontrollfeld.value = zahl;
}
</script>

Diese JavaScript Funktion bewirkt, dass bei jedem Click im Formular ein Inputfeld und 2 Selectfelder erzeugt werden.
Der Inhalt der Selectfelder kommt dabei aus einer Tabelle der Datenbank.
Soweit funktioniert auch alles einwandfrei.
Der Inhalt der Selectfelder zeigt dann alle verfügbaren Behältertypen an. Nun möchte ich aber die Anzahl der Behältertypen einschränken auf die, die dem Kunden zugeordnet sind, weil die Liste sonst sehr lang ist.

Hierzu habe ich am Anfang der JavaScript Funktion mit
Code:
var kd_check = document.FORMULAR.kd_check.value;
ein verstecktes Feld ausgelesen und in die JavaScript Variable kd_check gepackt. Diese Variable habe ich dann mit alert(kd_check) mir anzeigen lassen und sie war korrekt gefüllt. Bis hierhin also alles ok.

Mein Problem ist nun, dass ich nicht weis wie ich diese JS Variable in die SQL Abfrage immerhalb der JS Funktion einbauen kann. Probiert hatte ich es wie oben beschrieben ja mit.
PHP:
$sql_kd = "SELECT Behaelter_Typ.benr, Behaelter_Typ.beindex, Behaelter_Typ.bebezeichnung, behaelter_typ_kunde.kunde
             FROM Behaelter_Typ INNER JOIN behaelter_typ_kunde ON Behaelter_Typ.benr = behaelter_typ_kunde.behaelter_nr
             WHERE behaelter_typ_kunde.kunde = ' + kd_check + ' ORDER BY Behaelter_Typ.bebezeichnung";
Die JS Funktion läuft auch durch aber die Anzeige im Selectfeld zeigt weiterhin alle Behältertypen an und nicht die eingeschränkte Auswahl.

Meine Frage ist also, wie bekomme ich die Variable kdckeck in die SQL Abfrage?

Gruß
didi01
 

Fugel

rebmeM

PSD Beta Team
Code:
<script type="text/javascript">
function createInput() {
<?php
  $sql="SELECT * FROM behaelter_typ WHERE status = 1 ORDER BY standard DESC, bebezeichnung";
  $res=odbc_exec($dbcon,$sql);
  ?>

  var zahl = document.FORMULAR.kontrollfeld.value;
  var kd_check = document.FORMULAR.kd_check.value;

  if(zahl=="") {
      zahl=1;
  }

  var TD1textfeld1 = document.createElement('input');
      TD1textfeld1.type = 'text';
      TD1textfeld1.name = 'we_anzahlbehaelter[' + zahl + ']';
      TD1textfeld1.size = '5';
      TD1textfeld1.maxLength = '3';

  var br = document.createElement('br');

  var selectFeld = document.createElement('select');
      selectFeld.name = 'behaeltertyp[' + zahl + ']';
     
  <?php
  if($anzahl_kd > 0) {
    while(odbc_fetch_into($res_kd,$data_kd)) {
      ?>

      var optionFeld = document.createElement('option');
      var selectWert = selectFeld.appendChild(optionFeld);
      selectWert.text = "<?php echo $data_kd[2];?>" + ", " + "<?php echo $data_kd[1];?>";
      selectWert.value = "<?php echo $data_kd[0];?>";

    <?php
    }
    ?>

    var optionFeld = document.createElement('option');
    var selectWert = selectFeld.appendChild(optionFeld);
    selectWert.text = "------------------------------------------------------------";
    selectWert.value = "";
 
  <?php
  }

  $z1 = 1;
  while (odbc_fetch_into($res,$data_sel)) {
      if(($z1 > 1) && ($trennlinie != $data_sel[17])) {
        ?>

        var optionFeld = document.createElement('option');
        var selectWert = selectFeld.appendChild(optionFeld);
        selectWert.text = "------------------------------------------------------------";
        selectWert.value = "";

      <?php
      }
      ?>
      var optionFeld = document.createElement('option');
      var selectWert = selectFeld.appendChild(optionFeld);
      selectWert.text = "<?php echo $data_sel[5];?>" + ", " + "<?php echo $data_sel[4];?>";
      selectWert.value = "<?php echo $data_sel[0];?>";
  <?php
  $trennlinie = $data_sel[17];
  $z1++;
  }

  $sql="SELECT * FROM ladeeinheiten";
  $res=odbc_exec($dbcon,$sql);
  ?>

  var selectFeldLE = document.createElement('select');
      selectFeldLE.name = 'ladeeinheit[' + zahl + ']';

  <?php
  while (odbc_fetch_into($res,$data_le)) {
      if($_SESSION['language']=="deutsch") {
          $le_anz=$data_le[2];
          } elseif($_SESSION['language']=="polnisch") {
              $le_anz=$data_le[3];
      }
      ?>
      var optionFeldLE = document.createElement('option');
      var selectWertLE = selectFeldLE.appendChild(optionFeldLE);
      selectWertLE.text = "<?php echo $le_anz;?>";
      selectWertLE.value = "<?php echo $data_le[0];?>";
  <?php
  }
  ?>
 
  var out = document.getElementById("hs");
      out.appendChild(TD1textfeld1);
      out.appendChild(selectFeldLE);
      out.appendChild(selectFeld);
      out.appendChild(br);

  zahl++;
  document.FORMULAR.kontrollfeld.value = zahl;
}
</script>

Das kann nicht funktionieren. Du kannst nicht einfach PHP in einen Javascript-Code schreiben und den dann durch die Javascript-Funktion ausführenlassen. Um Das zu machen musst du AJAX verwenden. Also du sendest dann per Javascript einen oder mehrere Parameter an eine PHP-Datei die diese dann weiter verarbeitet und eine Antwort an dein Javascript zurück schickt, mit dieser kann dein Javascript dann weiter arbeiten.

Hier ein Bsp.: https://www.w3schools.com/xml/ajax_intro.asp
 

didi01

Aktives Mitglied

@Fugel
Danke für Deinen Hinweis.

Aber wieso funktioniert der PHP Code innehalb der JS Funktion incl. SQL Anweisung einwandfrei, nur wenn ich die Abfrage um die Variable erweitern möchte nicht?

Gruß
didi01
 

Fugel

rebmeM

PSD Beta Team
@Fugel
Danke für Deinen Hinweis.

Aber wieso funktioniert der PHP Code innehalb der JS Funktion incl. SQL Anweisung einwandfrei, nur wenn ich die Abfrage um die Variable erweitern möchte nicht?

Gruß
didi01
Weil beim ersten Aufruf deiner Seite der PHP Teil vom Server Kompiliert wird, aber beim Aufruf des JS kann der PHP Code nicht mehr Kompiliert werden. Javascript ist Klientseitig und PHP Serverseitig.
 

dkarvounaris

Lead Web Developer

PSD Beta Team
Aber wieso funktioniert der PHP Code innehalb der JS Funktion incl. SQL Anweisung einwandfrei, nur wenn ich die Abfrage um die Variable erweitern möchte nicht?

Tut er nicht...

Die PHP Anweisungen werden nicht im JavaScript ausgeführt, sondern im PHP Code. Der Javascript-Teil (genauso wie alles was außerhalb der PHP Tags ist) wird eben nicht ausgeführt, sondern ausgegeben und an den Browser geschickt. Der PHP Code wurde schon auf dem Server ausgeführt, also siehst du im Browser lediglich das Ergebnis (die Ausgabe). Du musst hier unterscheiden was von PHP ausgeführt wird und was es als reinen Text ausgibt. Daß der Browser diesen reinen Text als HTML, CSS, Javascript usw. interpretiert (und auch der Browser ausführt) ist eine total unabhängige Sache davon. PHP kennt dein Javascript nicht (es stellt nur Text für PHP dar) und das Javascript kennt dein PHP nicht, deswegen kannst du die beiden auch in keinster Weise in ihrer Ausführung (sprich: Variablen, Conditions usw.) vermischen.

Im Fazit: Dein SQL wurde nicht im JavaScript zu dem Zeitpunkt der Javascript-Ausführung ausgeführt, wo du es erwartet hast, sondern viel früher schon auf dem Server. Javascript im Browser kann keine SQL Abfragen machen. Du schickst die Daten an PHP und lässt die Abfrage machen und schickst die Daten zurück an den Browser und das Javascript, welches mit dem Ergebnis etwas anfangen kann.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben