Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi serial von mysql db abfragen (https://www.delphipraxis.net/115096-serial-von-mysql-db-abfragen.html)

madfighter04 5. Jun 2008 18:24

Datenbank: mysql • Zugriff über: ka

serial von mysql db abfragen
 
So Leutz ich bin langsam am verzweifeln, nun ich habe eine hp bei kilu.de mit einer mysql db, nun würde ich gerne ein setup mit inno setup machen wo eine serial abfrage von der db enthalten sein soll. da dies über inno nicht direkt geht brauche ich eine externe exe die das übernimmt. Nun habe ich hier schon sämtliche tutorials über mysql durchgelesen, und gesehen das man überall eine externe dll noch benötigt. Meine Frage geht das auch ohne diese und wenn wie müsste der code für die serial abfrage aussehen.
Ich sitz da jetzt schon fasst noch woche dran und kriegs nicht hin :cry: :cry: :wall: :wall:

PS: Nutze delphi 2007, hoffe ihr könnt mir irgendwie helfen

mkinzler 5. Jun 2008 18:29

Re: serial von mysql db abfragen
 
Wie im anderen Thraed schon gesaht, würde ich nicht direkt auf die MySQL-Db auf dem Webserver sondern über ein auf dem Webserver abgelegtes Skript, zugreifen.
Ersten verbieten das die meisten Provider, ausserdem müsstes du dann deine MySQL-Zugangsdaten gefärden

madfighter04 5. Jun 2008 18:54

Re: serial von mysql db abfragen
 
wenn du mir jetzt noch erklärst wie ich das anstelle, gescheigeden wie der php code dazu aussehen müsste, dann wäre mir echt sehr geholfen

DeddyH 5. Jun 2008 18:58

Re: serial von mysql db abfragen
 
http://www.php-faq.de/ch/ch-database_mysql.html
http://www.schattenbaum.net/php/

mkinzler 5. Jun 2008 19:01

Re: serial von mysql db abfragen
 
http://de.php.net/mysql

madfighter04 5. Jun 2008 19:17

Re: serial von mysql db abfragen
 
ich meinte wie ich mit delphi oder inno setup dann auf die php datei zugreife das wäre gut zu wissen

mkinzler 5. Jun 2008 19:28

Re: serial von mysql db abfragen
 
http://www.delphi-treff.de/tutorials...internet/indy/
Hier im Forum suchenindy post

madfighter04 5. Jun 2008 21:37

Re: serial von mysql db abfragen
 
ok thx genau sowas hab ich gesucht, ich werd mich da jetzt nen bisschen reinarbeiten und falls ich noch fragen hab meld ich mich nochmal

madfighter04 6. Jun 2008 08:11

Re: serial von mysql db abfragen
 
Hi kann mir wer sagen was an diesem code falsch Ist??

Delphi-Quellcode:
<?php
mysql_connect("localhost",
"xxxx","xxxx") or die
("Keine Verbindung moeglich");
mysql_select_db("xxxx") or die
("Die Datenbank existiert nicht");
$serial = 1233
$abfrage = "SELECT * FROM Kunden WHERE id Like '$serial'" or die
("Existiert nicht");
$ergebnis = mysql_query($abfrage);
  while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->Name;
    }
?>
Bekomme immer fehler meldung:
Parse error: syntax error, unexpected T_VARIABLE in /data/apache/users/kilu.de/rewemaster/www/test.php on line 8

hatt sich gerade erledigt:

aber ne andere frage: was muss ich daran verändern das, ich die variable mittels delphi übergebe und er mir row an delphi zurück sendet

mkinzler 6. Jun 2008 09:26

Re: serial von mysql db abfragen
 
Die Übergabe kann in der Url (GET) oder per POST (siehe Linka oben) erfolgen.
Die Rückgabe in php einfach per echo.

madfighter04 6. Jun 2008 10:32

Re: serial von mysql db abfragen
 
bei deinen links gehts aber hauptsächlich um html und nicht um php, deswegen versteh ich nich richtig wie es dabei funktioniert, könntest du mir nen kleinen beispiel code schreiben??

mkinzler 6. Jun 2008 10:38

Re: serial von mysql db abfragen
 
php erzeugt ja html

Am einfachster per GET:

http://www.servername.de/CheckSerial.php?serial=123456

madfighter04 6. Jun 2008 10:53

Re: serial von mysql db abfragen
 
ja gut das hab ich auch gerade entdeckt, nur wie greife ich mit delphi auf das echo zu nur nen kleines beispiel nochmal pls

mkinzler 6. Jun 2008 10:58

Re: serial von mysql db abfragen
 
Die resultierende Seite wird im 2. Parameter zurückgeliefert:
http://www.delphi-treff.de/tutorials...t/indy/page/5/

madfighter04 6. Jun 2008 11:04

Re: serial von mysql db abfragen
 
sorry aber ich raffs echt gerade nit kannst du mir das vielleicht noch genauer erklären, ich weiß das ich dich zu 100% nerve aber wäre trotzdem super

mkinzler 6. Jun 2008 11:30

Re: serial von mysql db abfragen
 
Delphi-Quellcode:
var
    res: TMemoryStream;
    ress: string;
    p: PChar;
begin
   p := PChar(ress);
   res := TMemoryStream.Create;
   IdHTTP1.Get(<url>, res);
   SetLength(ress, res.Size);
   res.Read( p, res.Size);

madfighter04 6. Jun 2008 11:43

Re: serial von mysql db abfragen
 
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
    res: TMemoryStream;
    ress: string;
    p: PChar;
begin
   p := PChar(ress);
   res := TMemoryStream.Create;
   idhttp1.Get('http://rewemaster.kilu.de/test.php', res);
   SetLength(ress, res.Size);
   res.Read( p, res.Size);
   edit1.Text := ress;
end;
ich habs so versucht, das kriegen funzt nur das senden klappt jetzt nicht, ich habs so versucht:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var pstream:Tstrings;
begin
  idhttp1.Post('http://rewemaster.kilu.de/test.php?serial=1233', pstream);
end;
was aber nicht klappt kannst du mir sagen warum

mkinzler 6. Jun 2008 11:47

Re: serial von mysql db abfragen
 
POST/GET hat nichts mit Senden/Empfangen zu tun, sondern nur über die Methode der Parameterübergabe
Delphi-Quellcode:
var
    res: TMemoryStream;
    ress: string;
    p: PChar;
begin
   p := PChar(ress);
   res := TMemoryStream.Create;
   IdHTTP1.Get('http://rewemaster.kilu.de/test.php?serial=1233', res);
   SetLength(ress, res.Size);
   res.Read( p, res.Size);

madfighter04 6. Jun 2008 11:57

Re: serial von mysql db abfragen
 
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
    res: TMemoryStream;
    ress: string;
    p: PChar;
begin
   p := PChar(ress);
   res := TMemoryStream.Create;
   idhttp1.Get('xxx?serial=1233', res);
   SetLength(ress, res.Size);
   res.Read( p, res.Size);
   edit1.Text := ress;
end;
kriege in edit1.text keep ausgegeben obwohl der name peter ist hier nochmal der phpcode

Delphi-Quellcode:
<?php

mysql_connect("localhost",
"xxxx","xxx") or die
("Keine Verbindung moeglich");

mysql_select_db("xxxxx") or die
("Die Datenbank existiert nicht");

$serial = $_GET["serial"];

$abfrage = "SELECT * FROM Kunden WHERE id Like '$serial'" or die
("Existiert nicht");

$ergebnis = mysql_query($abfrage);
 
while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->Name;
   
}
?>

madfighter04 6. Jun 2008 15:24

Re: serial von mysql db abfragen
 
najut schade, hab wohl zuviel genervt

mkinzler 6. Jun 2008 15:27

Re: serial von mysql db abfragen
 
Es scheint die gesamte Antwort des Webservers im String zu landen. Lass dir mal die komplette Antwort vom Webserver anzeigen

madfighter04 6. Jun 2008 15:33

Re: serial von mysql db abfragen
 
wie stell ich das an??

mkinzler 6. Jun 2008 15:45

Re: serial von mysql db abfragen
 
Lass dir ress mal im Debugger anzeigen

madfighter04 6. Jun 2008 18:04

Re: serial von mysql db abfragen
 
ich kapier das nicht jetzt gibt er mir vary aus woran liegt das, im debugger zeigt er auch bei ress nur vary an, ne idee?? und bei res und sender sagt er: E2171 Auf Variable 'res' kann wegen Optimierung nicht zugegriffen werden sagt dir das was??

shmia 6. Jun 2008 18:15

Re: serial von mysql db abfragen
 
In den Code Schnippseln oben sind noch Fehler drin. Vorallem wird kein Speicher im String "ress" reserviert.
Aber es geht auch viel einfacher:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
    res: TStringStream; // kein MemoryStream
    ress: string;
begin
   res := TStringStream.Create;
   try
     idhttp1.Get('xxx?serial=1233', res);
     edit1.Text := res.DataString;
   finally
     res.Free;
   end;
end;
E2171 Auf Variable 'res' kann wegen Optimierung nicht zugegriffen werden
==> hier müsste man bei den Projektoptionen / Compiler die Optimierung ausschalten und das Projekt neu erzeugen.
aber das ist mit obigem Code ja nicht mehr nötig...

madfighter04 6. Jun 2008 18:21

Re: serial von mysql db abfragen
 
@shmia dein code lässt sich nich compilieren bei res := TStringStream.Create; kommt nen fehler und ress scheint bei dir überflüssig oder??

mkinzler 6. Jun 2008 18:24

Re: serial von mysql db abfragen
 
Welcher Fehler?

shmia 6. Jun 2008 18:27

Re: serial von mysql db abfragen
 
Zitat:

Zitat von madfighter04
@shmia dein code lässt sich nich compilieren bei res := TStringStream.Create; kommt nen fehler

Ich hab's ja nur so ungetestet hingeschrieben (wie fast immer). :roll:
Hilfe zur Selbsthilfe:
Wenn du den Cursor auf das Word TStringStream setzt und dann F1 drückst kommst du in die Hilfe zur Klasse.
Dann bei Methoden schauen und auf "Create" klicken.
Aha! Da muss man noch einen Initialisierungstring mitgeben.
Delphi-Quellcode:
   res := TStringStream.Create('');
> und ress scheint bei dir überflüssig oder?
Ja! Is so viel einfacher.

madfighter04 6. Jun 2008 18:28

Re: serial von mysql db abfragen
 
[DCC Fehler] Unit1.pas(34): E2035 Nicht genügend wirkliche Parameter
[DCC Fehler] Project2.dpr(5): F2063 Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

und res := tstringstream.create wird rot hinterlegt

madfighter04 6. Jun 2008 18:32

Re: serial von mysql db abfragen
 
leute danke für eure geduld jetzt wird Peter ausgegeben juchu es klappt, jetzt muss ich das mit der parameter übergabe bei inno noch hinkriegen, naja das wird auch noch so ne sache, naja mal sehen, falls wer schon nen tipp hat, bin für alles offen :cheers: :thumb: :duck:

blackdrake 11. Jun 2008 20:12

Re: serial von mysql db abfragen
 
Vorsicht bei dem vorher genannten PHP Script!

Eingaben dürfen niemals direkt in eine MySQL-Query eingehen, sondern müssen escaped werden! (SQL-Injektion Gefahr ~> Hacker)

Falsch:

Delphi-Quellcode:
<?php
mysql_query("SELECT ... WHERE serial = '$serial'");
?>
Korrekt:

Delphi-Quellcode:
<?php
$serial = $_GET['serial'];
mysql_query("SELECT ... WHERE `serial` = '".mysql_real_escape_string($serial)."'");
?>
Dein PHP-Script sollte außerdem etwas zurückgeben, das dein Programm überprüft, um eine Abfragenfälschung zu verhindern (z.B. durch Virtualisierung).

d.h. serialabfrage.php?serial=1234 gibt "abc" aus, serialabfrage.php?serial=5678 gibt "xyz" aus (eine abgeleitete Abbildungs/Hash-Funktion).

Einfach nur "OK" oder "Failure" über das PHP-Script zurückzugeben wäre unsicher.

Gruß
blackdrake

PS: Wenn du Hilfe beim PHP-Script hast, frag mich einfach mal. Das ist mir gut geläufig.

Valle 11. Jun 2008 20:20

Re: serial von mysql db abfragen
 
Zitat:

Zitat von blackdrake
VEingaben dürfen niemals direkt in eine MySQL-Query eingehen, sondern müssen escaped werden! (SQL-Injektion Gefahr ~> Hacker)

Das ist zwar richtig, aber eben nur halb. Hat eigentlich keiner mal was von magic_quotes gehört? Bevor ihr was escaped muss (wenn magic_quotes aktivuert sind), erstmal wieder "unescaped" werden. Also wenn, dann bitte so.

Code:
if (get_magic_quotes_gpc()) {
  mysql_query("SELECT ... WHERE `serial` = '".mysql_real_escape_string(stripslashes($serial))."'");
} else {
  mysql_query("SELECT ... WHERE `serial` = '".mysql_real_escape_string($serial)."'");
}
Und wem das zu umständlich ist, der kann auch die Lösung aus phpMyAdmin nehmen:

Code:
function PMA_arrayWalkRecursive(&$array, $function, $apply_to_keys_also = false)
{
    static $recursive_counter = 0;
    if (++$recursive_counter > 1000) {
        die('possible deep recursion attack');
    }
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            PMA_arrayWalkRecursive($array[$key], $function, $apply_to_keys_also);
        } else {
            $array[$key] = $function($value);
        }

        if ($apply_to_keys_also && is_string($key)) {
            $new_key = $function($key);
            if ($new_key != $key) {
                $array[$new_key] = $array[$key];
                unset($array[$key]);
            }
        }
    }
    $recursive_counter--;
}

if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
    PMA_arrayWalkRecursive($_GET, 'stripslashes', true);
    PMA_arrayWalkRecursive($_POST, 'stripslashes', true);
    PMA_arrayWalkRecursive($_COOKIE, 'stripslashes', true);
    PMA_arrayWalkRecursive($_REQUEST, 'stripslashes', true);
}
Wenn möglich, magic_quotes einfach per php.ini abschalten UND diese Überprüfung im Code lassen. Wenn nicht, dann einfach mal an den Hoster wenden oder eben diesen (doch recht unperformanten) Code benutzen.

Mit freundlichen Grüßen,

Valle

Mit freundlichen Grüßen,

Valle

blackdrake 11. Jun 2008 20:27

Re: serial von mysql db abfragen
 
Ja, Magic Quotes... hat sich im Nachhinein als Flopp herausgestellt, weswegen es auch in PHP 6 abgeschafft wird und von vielen Hostern nicht angewandt wird.

Neben MagicQuotes gibt es ja noch diese DB Variante, bei der ' durch '' anstelle \' übersetzt wird.

Wenn die Serial aber gar keine Quotes enthält, weil es nur Alphanumerisch ist, braucht man sich um MagicQuotes keine Gedanken machen.

Valle 11. Jun 2008 20:42

Re: serial von mysql db abfragen
 
Zitat:

Zitat von blackdrake
Ja, Magic Quotes... hat sich im Nachhinein als Flopp herausgestellt, weswegen es auch in PHP 6 abgeschafft wird und von vielen Hostern nicht angewandt wird.

Das war auf jeden Fall ein Flopp. Und ich denke das wird auch richtig viel Stress geben, sobald die ersten Hoster auf PHP6 umstellen. Ok, das dauert noch seine Zeit, aber dennoch. Sehr sehr viele User kennen SQL-Injections nicht. Und auch mein letztes großes Projekt habe ich (dummerweise) auf magic_quotes aufbauen lassen. Die v2 des Projekts ohne magic_quotes ist aber in Arbeit...

Zitat:

Zitat von blackdrake
Wenn die Serial aber gar keine Quotes enthält, weil es nur Alphanumerisch ist, braucht man sich um MagicQuotes keine Gedanken machen.

Ich habe den Thread nicht ganz gelesen, aber sofern der Code von dir hier stimmt, dann muss man sich da sehr wohl Gedanken machen: $serial = $_GET['serial']; Das ist doch ganz klar eine Eingabe des Users, das heißt sie muss auf jeden Fall escaped werden. Aber generell gilt ja: Lieber zu viel als zu wenig. ;-)

Mit freundlichen Grüßen,

Valle


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz