Tunnel.php

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Schröder, 18.08.2011.

  1. #1 Schröder, 18.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    Hallo,
    habe mir ein tunnel.php programmiet.
    da ich von außen auf meine MySql Datenbank per Delphi7 zugreifen müchte.

    SQL Fehler Error
    sql:= 'SELECT * FROM MyTable WHERE name = 'Schroeder' ';

    SQL ok !
    sql:= 'SELECT * FROM MyTable WHERE id = 12 ';


    Diese Hochkomme in 'Schroeder' machen Probleme.
    weiß jmd wie man das unter Delphi sendet ?





    Gruß Schröder
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. foexle

    foexle Kaiser

    Dabei seit:
    02.05.2007
    Beiträge:
    1.104
    Zustimmungen:
    0
    Ort:
    Saarbrücken
    hab nicht viel ahnung von den Pascal ähnlichen sprachen aber mein erster versuch wäre
    Code:
    sql:= "SELECT * FROM MyTable WHERE name = 'Schroeder' ";
    
     
  4. #3 Schröder, 18.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    Ne das geht bei Delphi nicht, ein String muss zwischen 2 mal '' hochkomma liegen, zb.

    'SELECT * FROM ... bla bla'

    und da der Name Schröder in sql zwichen 2 mal '' liegen muss, gibts bei delphi ein error.


    PS. bei php liegt ein string zw. 2 mal "" zb echo "Mein text";
     
  5. nibel

    nibel Doppel-As

    Dabei seit:
    29.12.2006
    Beiträge:
    114
    Zustimmungen:
    0
    vlt mit \ vor dem ' escapen?
     
  6. #5 Schröder, 19.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    Ne geht auch nicht, weil ein abgeschlossener string bei delphi zwischen '' liegen muss.
    Und den Namen den man sucht auch zwischen '' liegt gibts bei delphi Prob.

    Habe das schon versucht.



    Code:
    var name : string;
    name := 'Schroeder';
    sql:= 'SELECT * FROM MyTable WHERE name = ' + chr(39) + name + chr(39);
    
    
     
  7. #6 Schröder, 19.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    ich habs.....

    wenn ich zu meinen tunnel.php sende
    sql := 'SELECT id FROM name WHERE name = ' + chr(39) + name + chr(39) ;

    und gleich die sql abfrage per echo zurück sende, bekomme ich das zurück

    ---> SELECT id FROM name WHERE name = \'Schroeder\'

    und in dem sql string darf kein \' vorkommen, ich denke es ist der Zeichensatz ?????


    upsssss wo sehe ich den zeichensatz bei FreeBSD ?
     
  8. #7 Schröder, 19.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    ich habs.....

    wenn ich zu meinen tunnel.php sende
    sql := 'SELECT id FROM name WHERE name = ' + chr(39) + name + chr(39) ;

    und gleich die sql abfrage per echo zurück sende, bekomme ich das zurück

    ---> SELECT id FROM name WHERE name = \'Schroeder\'

    und in dem sql string darf kein \' vorkommen, ich denke es ist der Zeichensatz ?????


    upsssss wo sehe ich den zeichensatz bei FreeBSD ?
     
  9. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
  10. #9 Schröder, 19.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    ich weiß zwar nicht was ein " Magic-Quotes-Problem " ist.!
    aber jetzt gehts, habe einfach mal den Code Disabling Magic Quotes am anfang mit rein genommen.

    Kannst du mir sagen was das ist ?
    Weil jetzt bekomme ich auch über echo den richtigen string zurück.! :think:


    PS.
    Ahhhh jetzt kann ich auch endlich den string komplett senden und das umschreiben.
    $sql = $Xsql. "'". $abfrage. "'"; <---> $sql = $Xsql;

    Code:
    <?php
    if (get_magic_quotes_gpc()) {
        function magicQuotes_awStripslashes(&$value, $key) {$value = stripslashes($value);}
        $gpc = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
        array_walk_recursive($gpc, 'magicQuotes_awStripslashes');
    }
    
    // Zum Aufbau der Verbindung zur Datenbank 
    $dbhost = "192.168.178.11";
    $dbuser = "root";
    $dbpasswd = "123456";
    
      $aktion          = $_POST['aktion'];
      $user            = $_POST['user_name'];     //dbuser
      $pass            = $_POST['user_passwort']; //dbpass
      $dbname          = $_POST['dbname'];        //dbname
      $Xsql            = $_POST['Xsql'];          //sql abfrage
      $abfrage         = $_POST['abfrage'];       //sql Reserve
      $htt_empfaenger  = $_POST['empfaenger'];    //später für E-Mail versenden
      $htt_absender    = $_POST['absender']; 
      $betreff         = $_POST['betreff']; 
      $mailtext        = $_POST['mailtext']; 
      $htt_antwortan   = $_POST['antwortan']; 
    
    //user
      if ($user == "Schroeder") 
      {
      $Xuser = $dbuser;
      }
    
    //pass 
      if ($pass == "22334455") 
      {
      $Xpass = $dbpasswd;
      }
    
    
      if ($aktion == '1')
       {
          mysql_connect($dbhost, $Xuser, $Xpass) or die('Benutzername oder Passwort sind falsch');
          mysql_select_db($dbname) or die ('Die Datenbank existiert nicht.'); 
    
          $sql = $Xsql. "'". $abfrage. "'";
    
          $result = mysql_query($sql) OR die('DB_FAIL3');
    
          while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
          foreach ($line as $col_value) 
             {
              echo "$col_value\n";
             }
                                                                }  
      }
    
    
    
    
      if ($aktion == '2')
       {
          mysql_connect($dbhost, $Xuser, $Xpass) or die('Benutzername oder Passwort sind falsch');
          mysql_select_db($dbname) or die ('Die Datenbank existiert nicht.'); 
    
    
          $sql = $Xsql;
    
    {
    echo $sql;  // Test um zu sehen was angekommen ist.
    }
    
          $result = mysql_query($sql) OR die('DB_FAIL3');
    
          while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
          foreach ($line as $col_value) 
             {
              echo "$col_value\n";
             }
                                                                }  
      }
    ?>
    
    
     
  11. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Magic-Quotes ist eine Einstellung von PHP, die in allen Strings, die du mit POST, GET oder in Cookies überträgst, vor ", ', etc. jeweils \ schreibt. Ist eigentlich gedacht um SQL-Injections zu vermeiden, macht in der Praxis aber eher Kompatibilitätsprobleme, wird daher in kommenden PHP-Versionen wieder abgeschafft. Kann man aber zum Glück in der php.ini deaktivieren (magic_quotes_gpc = Off), oder eben umgehen mit dem Scriptfetzen, den du verwendest.
     
  12. #11 Schröder, 20.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    Guten morgen,

    Danke für deine Antwort, das habe ich verstanden...:D

    Ähmm, denke das du mehr von php Scripten verstehst wie ich, vllt schaust du mal
    über mein php tunnel ob der so ok ist ?

    Wäre nett von dir..




    Gruß Schröder
     
  13. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Die Geschichte mit dem Usernamen und Passwort würde ich vereinfachen:
    PHP:
    if($user!="Schröder"||$pass!= "22334455") die("Fehler");
    Dann kannst du dir diese seltsamen doppelten Variablenzuweisungen sparen.

    Und du kannst die Zuweisung für $sql so schreiben:

    PHP:
    $sql $Xsql. ($aktion == '1'?"'"$abfrage"'":'');
    Dann kannst du dir die If-Abfrage und den ganzen doppelten Code für die Aktionen sparen. Wenn du noch mehr Aktionen machen willst, solltest du vielleicht Teile in eine Funktion packen.

    Und irgendwie blicke ich bei deinen geschweiften Klammen nicht so wirklich durch ;)

    Warum verwendest du mysql_fetch_array mit MYSQL_ASSOC, wenn du die Keys sowieso nicht benutzt? Dann kannst du auch mysql_fetch_row nehmen. Und dann für noch ein bisschen mehr Geschwindigkeit die foreach-Schleife ersetzen:

    PHP:
    while ($line mysql_fetch_row($result)) {
          for (
    $i=0,$len=count($line);$i<$len;$i++) { 
    Wenn nur wenige spezielle SQL-Abfragen verwendet werden, würde ich die hart reinkodieren, damit kein Unfug passiert.

    Ich würde sowas ohnehin nicht unbedingt über PHP lösen, da man den MySQL-Server ja auch so einstellen kann, dass er von außen erreichbar ist. Dann kann man auch einen MySQL-Treiber für den Zugriff verwenden, ist wohl schöner von der API her.
     
  14. #13 Schröder, 22.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    Moin amöbe,

    >Die Geschichte mit dem Usernamen und Passwort würde ich vereinfachen:
    es werden ein paar Leute Zugriff bekommen, ich wollte nicht die Originalen User und Passwörter
    rausgeben. So könnte ich auch mal einen aus der liste nehmen.


    >Und irgendwie blicke ich bei deinen geschweiften Klammen nicht so wirklich durch
    ich Programmiere seit 10 Jahren unter Delphi, php muss ich erst richtig lernen,
    einige Klammern konnte ich weg machen.


    Meine Ausgabe habe ich im Internet gefunden, und damit gehst auch.
    Wie man das besser macht muss ich auch noch lernen.

    Deine sieht auch gut aus, aber wie sende ich die ? mit echo ? oder Print ?
    würde ich gerne mal testen. ?(
    >while ($line = mysql_fetch_row($result)) {
    > for ($i=0,$len=count($line);$i<$len;$i++) {





    Gruß Schröder
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. amöbe

    amöbe Tripel-As

    Dabei seit:
    21.01.2007
    Beiträge:
    188
    Zustimmungen:
    0
    Ich meinte eigentlich eher die Art, wie du die Klammen anordnest.. v.a. bei den while-Schleifen. Was meinst du mit "wie sende ich die ?" ?
     
  17. #15 Schröder, 22.08.2011
    Schröder

    Schröder Jungspund

    Dabei seit:
    18.08.2011
    Beiträge:
    14
    Zustimmungen:
    0
    >while ($line = mysql_fetch_row($result)) {
    > for ($i=0,$len=count($line);$i<$len;$i++) {


    das meinte ich..
    da fehlt doch noch ne zeile wie ich da sende, per echo oder print ?

    weil im mom sieht es ja bei mir noch so aus
    PHP:
          while ($line mysql_fetch_array($resultMYSQL_ASSOC)) 
          foreach (
    $line as $col_value
             {
              echo 
    "$col_value\n";
             }
     
Thema:

Tunnel.php