![]() |
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 |
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 |
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
|
Re: serial von mysql db abfragen
|
Re: serial von mysql db abfragen
|
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
|
Re: serial von mysql db abfragen
|
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
|
Re: serial von mysql db abfragen
Hi kann mir wer sagen was an diesem code falsch Ist??
Delphi-Quellcode:
Bekomme immer fehler meldung:
<?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; } ?> 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 |
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. |
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??
|
Re: serial von mysql db abfragen
|
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
|
Re: serial von mysql db abfragen
Die resultierende Seite wird im 2. Parameter zurückgeliefert:
![]() |
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
|
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); |
Re: serial von mysql db abfragen
Delphi-Quellcode:
ich habs so versucht, das kriegen funzt nur das senden klappt jetzt nicht, ich habs so versucht:
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;
Delphi-Quellcode:
was aber nicht klappt kannst du mir sagen warum
procedure TForm1.Button1Click(Sender: TObject);
var pstream:Tstrings; begin idhttp1.Post('http://rewemaster.kilu.de/test.php?serial=1233', pstream); end; |
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); |
Re: serial von mysql db abfragen
Delphi-Quellcode:
kriege in edit1.text keep ausgegeben obwohl der name peter ist hier nochmal der phpcode
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;
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; } ?> |
Re: serial von mysql db abfragen
najut schade, hab wohl zuviel genervt
|
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
|
Re: serial von mysql db abfragen
wie stell ich das an??
|
Re: serial von mysql db abfragen
Lass dir ress mal im Debugger anzeigen
|
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??
|
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:
E2171 Auf Variable 'res' kann wegen Optimierung nicht zugegriffen werden
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; ==> 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... |
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??
|
Re: serial von mysql db abfragen
Welcher Fehler?
|
Re: serial von mysql db abfragen
Zitat:
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:
> und ress scheint bei dir überflüssig oder?
res := TStringStream.Create('');
Ja! Is so viel einfacher. |
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 |
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:
|
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:
Korrekt:
<?php
mysql_query("SELECT ... WHERE serial = '$serial'"); ?>
Delphi-Quellcode:
Dein PHP-Script sollte außerdem etwas zurückgeben, das dein Programm überprüft, um eine Abfragenfälschung zu verhindern (z.B. durch Virtualisierung).
<?php
$serial = $_GET['serial']; mysql_query("SELECT ... WHERE `serial` = '".mysql_real_escape_string($serial)."'"); ?> 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. |
Re: serial von mysql db abfragen
Zitat:
Code:
Und wem das zu umständlich ist, der kann auch die Lösung aus phpMyAdmin nehmen:
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)."'"); }
Code:
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.
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); } Mit freundlichen Grüßen, Valle Mit freundlichen Grüßen, Valle |
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. |
Re: serial von mysql db abfragen
Zitat:
Zitat:
Mit freundlichen Grüßen, Valle |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz