Announcement

Collapse
No announcement yet.

String mit & in PHP

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

  • String mit & in PHP

    Hallo,

    In meinem Javascript Programm rufe ich PHP Dateien zur Datenbankabfrage auf:
    Code:
        var aufruf="php/"+file+".php?param1="+param1;
        // var aufruf='php/'+file+'.php?param1="'+param1+'"'; // funktioniert nicht
        jQuery.ajax(aufruf,ajaxParams);
    In der PHP Datei wird daraus:
    Code:
      $sql = 'select Typ from pumpe where Hersteller="'.$_GET["param1"].'" order by Typ';
    Jetzt gibt es aber Hersteller, die im Namen ein & haben. Und bei denen liefert die MySQL Abfrage nichts.
    Was kann man da tun, ohne die Hersteller-Namen in der Datenbank zu ändern?

    Danke
    Günther

  • #2
    Würde es damit probieren

    https://www.w3schools.com/jsref/jsref_encodeURI.asp

    http://php.net/manual/de/function.urldecode.php

    Man sollte nie den übergebenen Parameter (auch noch mit GET) ohne Filterung in einen SQL setzen. PHP -> filter_input
    Christian

    Comment


    • #3
      Im JavaScript ersetze ich nun das '&' durch ein '_'.
      Und dann im PHP:
      Code:
       
      $search  = array('_');
      $replace = array('&');
      $p1 = str_replace ($search,$replace, filter_input(INPUT_GET, 'param1',FILTER_UNSAFE_RAW)); 
      $sql = 'select Typ from pumpe where Hersteller="'.$p1.'" order by Typ';
      >> Man sollte nie den übergebenen Parameter (auch noch mit GET) ohne Filterung in einen SQL setzen. PHP -> filter_input

      Das ist aber jetzt ok, oder?

      Danke - Günther
      Günther

      Comment


      • #4
        joo, geht das mit URL-Enconding nicht?
        Christian

        Comment


        • #5
          JavaScript encodeURI() Function: Im Example ist ein & enthalten und das bleibt ein &. Ist also unbrauchbar.

          urldecode: Dekodiert jede %## Kodierung einer gegebenen Zeichenkette. Pluszeichen ('+') werden in Leerzeichen umgewandelt.

          Nachdem es mit dem & geklappt hatte, kam das nächste Problem bei einer nachfolgenden Abfrage die ein + enthalten kann.
          Das Pluszeichen hat er mir auch ohne einen Aufruf von urldecode in ein Leerzeichen umgewandelt.

          Jetzt sieht es so aus:
          Code:
          $search  = array('_1','_2');
          $replace = array('&','+');
          $p1 = str_replace ($search,$replace, filter_input(INPUT_GET, 'param1',FILTER_UNSAFE_RAW));
          $p2 = str_replace ($search,$replace, filter_input(INPUT_GET, 'param2',FILTER_UNSAFE_RAW));
          Günther

          Comment


          • #6
            Wenns geht, gehts :-)
            Christian

            Comment

            Working...
            X