Tunnel.php

S

Schröder

Jungspund
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
 
hab nicht viel ahnung von den Pascal ähnlichen sprachen aber mein erster versuch wäre
Code:
sql:= "SELECT * FROM MyTable WHERE name = 'Schroeder' ";
 
hab nicht viel ahnung von den Pascal ähnlichen sprachen aber mein erster versuch wäre
Code:
sql:= "SELECT * FROM MyTable WHERE name = 'Schroeder' ";

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";
 
vlt mit \ vor dem ' escapen?

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);
 
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 ?
 
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 ?
 
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";
         }
                                                            }  
  }
?>
 
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.
 
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
 
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.
 
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
 
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 ?" ?
 
>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($result, MYSQL_ASSOC)) 
      foreach ($line as $col_value) 
         {
          echo "$col_value\n";
         }
 
Deine PHP-Datei wird bei Aufruf von oben nach unten von PHP interpretiert und ausgeführt. Befehle musst du also nicht per 'print' ausgeben.
 
Das ist klar, ...
aber wenn ich die


PHP:
      while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) 
      foreach ($line as $col_value) 
         {
          echo "$col_value\n";
         }


gegen die tausche

PHP:
>while ($line = mysql_fetch_row($result)) {
> for ($i=0,$len=count($line);$i<$len;$i++) {

bekomme ich keine ausgabe, oder besser gesagt zurück an mein Delphi Programm.
 
Wenn ich das richtige sehe, dann sollte dir 'echo "$col_value\n";' etwas ausgeben?
 
Ich hab auch nur die beiden Schleifenanfänge geschrieben. Komplett wäre das dann so:

PHP:
while ($line = mysql_fetch_row($result)) { 
      for ($i=0,$len=count($line);$i<$len;$i++) {  
          echo "$col_value\n"; 
      }
}

Die geschweiften klammern sind sowas wie begin...end; und du kannst sie theoretisch weglassen, wenn du max. 1 Anweisung dazwischen hast, das trägt jedoch nicht immer zur lesbarkeit des Codes bei.
 
Ich verstehe noch nicht ganz, warum du das ganze durch PHP tunneln willst!?
 

Ähnliche Themen

solved Problem mit smtp (postfix) als send-only mta hinter NAT

Keine grafische Oberfläche (Debian Installation)

mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

postfix/dovecot/cyrus sasl: basic conf

Linux "vergisst" Dateisystem?

Zurück
Oben