Entwickler-Ecke
Sonstiges (Delphi) - Projekt: Online-Marktplatz
ZSKing - Sa 15.12.07 17:05
Titel: Projekt: Online-Marktplatz
Moin Moin!
Ich habe eine Idee für ein Programm und auch schon den Ansatz vom Anfang. :wink: Ich denke das Programm ist nicht so schwierig umzusetzen, aber ich benötige eure Hilfe weil ich es auch mit MySQL umsetzen möchte. Also das Programm soll mal so aussehen:
Du hast den Startbildschirm und da kann man auswählen zwischen "Martkplatz" und "Angebot hinzufügen".
Nun erstmal zu "Angebot hinzufügen". Dort muss man die Angabe von 3 Filtern und 3 Textangaben leisten. Der erste Filter ist "Suche" oder "Biete", der zweite ist eine von Acht Klassen auszuwählen (Es geht um ein Programm für die Gaming-Community) und der dritte ist eine Auswahl zwischen "Items", "Materialien" und "Minipets". Dann eine Artikelbeschreibung als Text, ein Preis als Text und ein ingame-Name als Text. Jetzt kann man das Angebot abschicken und nun zu "Marktplatz":
Hier sollen alle Angebote ausgelistet werden. Wenn jemand etwas findet, kann er den Verkäufer ingame anschreiben und den Artikel erwerben. Damit die Datenbank nicht zu sehr überflutet wird, sollen Angebote nach 24 Stunden wieder gelöscht werden.
So das war's. Also eine MySQl Datenbank ist vorhanden. Zwar noch von Funpic, aber da macht wohl erst einmal nichts.
Meine Frage jetzt:
Wie würdet ihr das umsetzen? Ich habe leider keine Ahnung von MySQL. Wer mir hilft kommt in's "Special THX" rein und hat bewiesen, dass er auch ohne große Anreize bei Projekten mitmacht. :)
Euer ZSKing
ZSKing - Sa 15.12.07 17:31
Das ist vielleicht etwas viel auf einmal.
Ich sage mal:
Wie müsste eine SQL-Datei aussehen, die eine passende
Tabelle für das Programm erstellt?
Also
Quelltext
1:
| CREATE TABLE Martplatz ( .... ) |
ZSKing - Sa 15.12.07 18:24
Entschuldigt bitte für die Doppelposts, aber ich bin ein Stückchen weiter gekommen und habe jetzt eine ganz konkrete Frage:
Wie kann ich über ein Delphi-Porgramm neue Daten in eine Tabelle einfügen?
Meine Tabelle sieht so aus:
GTA-Place - Sa 15.12.07 18:25
Da die Datenbank online ist, wäre es sinnvoll, wenn du PHP-Dateien erstellst, die die Arbeiten an der Datenbank übernehmen. Diese Dateien rufst du dann mit Indy von deinem Programm auf und übergibst per GET/POST die neuen Daten.
DrRzf - Sa 15.12.07 18:31
lt deren AGB's hat Funpic nicht die möglichkeit von aussen auf die Datenbank zuzugreifen.
Habe mir dort auch einen Acc gemacht, musste dann aber feststellen dass keinen externen zugriffe möglich sind.
Ist es doch möglich wär ich auch über aufklärung erfreut.
GTA-Place - Sa 15.12.07 18:33
Deshalb ist die Methode über PHP die einfachste :)
ZSKing - Sa 15.12.07 18:39
Erst einmal vielen Dank für eure Antworten!
Nun habe ich aber leider keine Ahnung wie
eine solche PHP-Datei aussieht und in Delphi
bin ich auch nicht so der Überpro.
//Edit:
Also PHP/HTML kann ich eingentlich, aber ich habe
noch nicht mit MySQL im Zusammenhang mit PHP gearbeitet.
ZSKing - Sa 15.12.07 20:04
Also ich denke es geht jetzt auch ohne PHP-Metohde, da ich die DB gewechselt habe. Ich bin jetzt auf meienr eigenen DB von dem Space meiner Homepage. :wink:
Das Programm steht jetzt und ihr könnt es euch jetzt schon einmal angucken. Ich habe es angehängt.
Naja da wäre noch die Frage zu klären wie ich die Daten von der Eingabe auf
meine Tabelle bekomme...
Ich hoffe auf eure Mithilfe und wie ihr im Programm seht ist das Feld für Special-THX noch frei. :)
MfG
ZSKing
ZSKing - Sa 15.12.07 21:54
Keiner ne Ahnung?
Also ich habe nen MySQL-Connect schon im Programm drinnen.
ZSKing - So 16.12.07 00:07
Okay ich habe jetz praktisch die finale Version rangepackt, wo nur noch
die SQl Elemente eingefügt werden müssen. Ich bin wie gesagt für die MySQL
als auch für die PHP-Version offen.
GTA-Place hatte das mit PHP
schon erwähnt, aber davon habe ich wieder keine Ahnung.
Wie gesagt bin ich allen echt sehr dankbar die helfen. Und auf Wunsch kommt
ihr auch in's "Special THX" und wenn das Programm gut klappt wird das Programm
hoffentlich von einer riesigen Fanseite gepusht. Es lohnt sich also, aber das
schon alleine weil ich euch echt dankbar bin. - Jeden Tag 'ne gute Tat! :wink:
MfG
ZSKing
Martok - So 16.12.07 00:50
Hehe, erinnert mich irgendwie an meinen
GEWar Cities Market [
http://www.martoks-place.de/gewar/market/index.php] ;)
Mit Delphi hätte ich sowas nun grade nicht realisiert, da sich für so etwas (große Community handelt mit DB) PHP+MySQL einfach anbietet. Und ohne Zusatzprogs ist man unabhängiger.
Wo ist jetzt genau das Problem? Daten einfügen läuft im Endeffekt immer auf ein
INSERT INTO ... hinaus.
Tilman - So 16.12.07 02:16
Wenn du PHP im prinzip schon kannst, aber noch nie was mit Datenbanken gemacht hast, dann würde ich mir einfach mal die entsprechenden Befehle anschauen. Das sind nur eine Hand voll mit denen man praktisch alles machen kann. Hier mal die Wichtigsten aus dem Kopf:
Quelltext
1: 2: 3: 4:
| - mysql_connect(), mysql_select_db() - mysql_query() - mysql_result() - mysql_num_rows() |
Damit kann man schon einen Haufen Sachen machen. Allerdings musst du dich natürlich auch mySQL-mäßig entsprechend bilden.
ZSKing - So 16.12.07 11:31
Also ich möchte es eigentlich schon als Programm machen.
Okay. Mal angenommen, ich habe jetzt eine PHP-Datei, die mit dem MySQL connectet, kann man das dann auch in Delphi implementieren, so dass wenn man auf den Button "Artikel eintragen" klickt (ich weiß nicht ob ihr das Prog. geladen habt) es auch irgendwie in die DB kommt?
GTA-Place - So 16.12.07 11:34
Ja, du rufst die PHP-Datei dann so auf: eintragen.php?name=Heiltrank&Preis=10&user=MagicMan und genau diese Variablen trägst du dann [nach vorheriger Entschärfung wegen XXS, siehe Wiki] in die DB ein.
ZSKing - So 16.12.07 12:25
Nochmal ne kurze Frage
zur PHP-Datei:
Ist daran was falsch:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| <?PHP /* Datenbankserver - In der Regel die IP */ $db_server = '87.238.199.95';
/* Datenbankname */ $db_name = 'sascha ';
/* Datenbankuser */ $db_user = 'sascha';
/* Datenbankpasswort */ $db_passwort = '*********'; /* Erstellt Connect zu Datenbank her */ $db = @ mysql_connect ( $db_server, $db_user, $db_passwort ) or die ( 'Konnte keine Verbindung zur Datenbank herstellen' );
$db_check = @ mysql_select_db ( $db_name );
if ( $db ) { echo '<span style="color:red;">Verbindung zur Datenbank hergestellt!</span>'; }
mysql_query("INSERT INTO Marktplatz (Verkaufsart,Klasse,Artikelart,Beschreibung,Preis,Ingame) VALUES ('$verkaufsart', '$klasse', '$art', '$beschreibung', '$preis', '$ingame')");
?> |
ZSKing - So 16.12.07 12:35
Okay ich habe es ausprobiert. So geht es nicht.
Aber sagen wir mal der PHP-Code geht und es werden dann
immer Datensätze hinzugefügt, wenn das aufgerufen wird, mit
den entsprechenden Variablen, dann müsste man doch nur noch
einen Button mit dem Standard-Browser verlinken, wo die URL
mit den Variablen aufgerufen wird, oder?!
Wenn ich das jetzt falsch verstanden und völligen Quatsch
geredet habe schließt bitte nicht den Browser und haut euch
den Kopf gegen die Wand! :) Kann mir einer weiterhelfen? Ich
glaube ein kleines Stückchen des Weges habe ich schon zurückgelegt...
Liebe Grüße
ZSKing
ZSKing - So 16.12.07 13:02
Okay ich habe mich mal an den Code rangesetzt, einen befreundeten
Coder gefragt (der jetzt leider wieder off ist) und der Coder ist
nochmal ein bisschen anders geworden. Also ich habe die eintragen.php
schon einmal hochgeladen und zwar auf
http://img48.im.funpic.de/eintragen.php.
Der Code sieht so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| <?PHP /* Datenbankserver - In der Regel die IP */ $db_server = '87.238.199.95';
/* Datenbankname */ $db_name = 'sascha ';
/* Datenbankuser */ $db_user = 'sascha';
/* Datenbankpasswort */ $db_passwort = '******'; /* Erstellt Connect zu Datenbank her */ $db = @ mysql_connect ( $db_server, $db_user, $db_passwort ) or die ( 'Konnte keine Verbindung zur Datenbank herstellen' );
$db_check = @ mysql_select_db ( $db_name );
if ( $db ) { echo '<span style="color:red;">Verbindung zur Datenbank hergestellt!</span>'; }
mysql_query("INSERT INTO Marktplatz (Verkaufsart,Klasse,Artikelart,Beschreibung,Preis,Ingame) VALUES ('$verkaufsart', '$klasse', '$art', '$beschreibung', '$preis', '$ingame')");
?> |
Sorry, aber ich habe keine Ahnung warum es nicht klappt. Ich habe wie
GTA-Place es gesagt hat img48.im.funpic.de/eintragen.php?verkaufsart=sd&.... aufgerufen, aber meine Tabelle hat immer noch 0 Bytes Daten... Was mache ich falsch?
ZSKing - So 16.12.07 13:42
Die Indy-Units alle in das Projekt implementieren?
GTA-Place - So 16.12.07 14:17
1. IdHTTP auf die Form ziehen.
2. Variablen werden in PHP mit $_POST['name'] und $_GET['name'] angesprochen.
ZSKing - So 16.12.07 14:22
So die PHP?
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| <?PHP
$_GET['verkaufsart'] $_GET['klasse'] $_GET['art'] $_GET['beschreibung'] $_GET['preis'] $_GET['ingame']
/* Datenbankserver - In der Regel die IP */ $db_server = '87.238.199.95';
/* Datenbankname */ $db_name = 'sascha ';
/* Datenbankuser */ $db_user = 'sascha';
/* Datenbankpasswort */ $db_passwort = '*********'; /* Erstellt Connect zu Datenbank her */ $db = @ mysql_connect ( $db_server, $db_user, $db_passwort ) or die ( 'Konnte keine Verbindung zur Datenbank herstellen' );
$db_check = @ mysql_select_db ( $db_name );
if ( $db ) { echo '<span style="color:red;">Verbindung zur Datenbank hergestellt!</span>'; }
mysql_query("INSERT INTO Marktplatz (Verkaufsart,Klasse,Artikelart,Beschreibung,Preis,Ingame) VALUES ('$verkaufsart', '$klasse', '$art', '$beschreibung', '$preis', '$ingame')");
?> |
ZSKing - So 16.12.07 14:34
Über Projekt -> Dem Projekt hinzufügen?
ZSKing - So 16.12.07 15:42
Okay ich bin beim POST-Teil, aber ComboBox und Edit sind inkompatibel
mit Strings... Gibt's ne Alternative zu dem Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| sList.Add('parameter1'=ComboBox1); sList.Add('parameter2'=ComboBox2); sList.Add('parameter3'=ComboBox3); sList.Add('parameter4'=Edit2);
sList.Add('parameter5'=Edit1); sList.Add('parameter6'=Edit3); |
Also was anderes als String-List?
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt
Christian S. - So 16.12.07 15:48
Hallo, ZSKing!
Bitte fasse dies hier nicht als "Angriff" auf: Du solltest erst einmal Grundlagen lernen. Es hat doch keinen Sinn, wenn Du "blind" das zusammenfügst, was andere Dir vorkauen. Du scheinst kaum Ahnung von Delphi oder PHP zu haben, wieviel Sinn macht es da, ein solches Programm schreiben zu wollen? Und ja, jeder hat mal klein angefangen, aber der Weg um "groß" zu werden ist, sich erst die Grundlagen anzueigenen und nicht, sich von anderen alles vorkauen zu lassen. Und wenn ich Deinen zuletzt geposteten Quelltext sehe, hast Du noch nicht einmal die einfachsten Regeln der Delphi-Syntax verstanden.
Nichts für ungut,
Grüße,
Christian
ZSKing - So 16.12.07 16:02
Zugegeben habe ich mich mit Delphi noch nicht sehr auseinander gesetzt. Aber ich habe vorher mit Pascal gearbeitet und mir das eigentlich zugetraut. Nunja. - Zu dem Problem: Mir ist klar, dass ich den Variablen-Typ in Strings umwandeln muss, um sie in der String-List abspeichern zu können. Ich habe mich eigentlich auch mit den verschiedenen Typen auseinander gesetzt, aber mir ist momentan nicht wirklich klar was für ein Typ ComboBox bzw. Edit sind. Ich hatte zuerst an String gedacht (wegen Zeichenketten), aber jetzt wird beim Ausführen der Fehler angezeigt, dass die Typen inkompatibel sind.
Leuchtturm - So 16.12.07 16:38
ComboBoxen sind visuelle Komponenten für das Formular deines Programmes. Ich glaube die sind von TControl oder so abgeleitet
ZSKing - So 16.12.07 17:14
Ja, es wir hier langsam peinlich für mich. Nur noch zwei Sachen:
- Wie kann ich die Daten aus einer ComboBox bzw. einem Edit in eine Stringlist einlesen?
- Kann mir jemand ein gutes Buch für Delphi-Anfänger empfehlen? Ich habe schon ein bisschen
Erfahrung mit Programmen gemacht also kein Buch für Vollboons, aber eben für Anfänger im
Bereich Delphi. Ein Link wäre nicht schlecht. :) Dan kommen solche Fragen nicht wieder und
ich melde mich wieder, wenn ich mich mal in die Grundlagen etc. eingelesen habe.
Vielen Dank
ZSKing
ZSKing - So 16.12.07 21:07
Hm also ich habe es jetzt so geschrieben:
Delphi-Quelltext
1:
| sList.Add('parameter1'=ComboBox1.Text); |
Und dann wird angezeigt, dass String und Boolean inkompatible
Typen sind. Das ist mir schon klar, aber was davon ist bitte Boolean?
MfG
ZSKing
PS:
Der Crah-Kurs ist ausgedruckt und meine
neue Lektüre. :)
GTA-Place - So 16.12.07 21:20
Da muss ein + hin, sonst ist es ein Vergleich. 'Test=' + Blup.Text;
ZSKing - Mi 19.12.07 18:59
Ich komme leider nicht weiter. Mein Quelltext sieht bis jetzt so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98:
| unit Unit4;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, idhttp;
type TForm4 = class(TForm) ComboBox1: TComboBox; Label1: TLabel; ComboBox2: TComboBox; ComboBox3: TComboBox; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject);
private
public end;
var Form4: TForm4;
implementation
{$R *.dfm}
function SendPostData(Ahttp: TIdHTTP; const AtoURL: String; const aParams: TStrings): String; Var lStream: TMemoryStream; lParams: TStringStream; I: Integer; begin Result:=''; if not Assigned(aHttp) then exit; lStream := TMemoryStream.create; lParams := TStringStream.create(''); try AHTTP.Request.ContentType := 'http://www.sascha-st.de/gwm/eintragen.php';
for I:=0 to aParams.Count-1 do lParams.WriteString(aParams[I] + '&');
try AHTTP.Post(AtoURL, lParams, lStream); except on E: Exception do showmessage('Fehler bei der Übertragung: ' + E.Message); end; SetLength(Result,lStream.Size); lStream.Position:=0; lStream.ReadBuffer(Result[1],lStream.Size); finally lParams.Free; lStream.Free; end; end;
procedure TForm4.Button1Click(Sender: TObject); var sList: TStringlist;
begin sList:=TStringList.Create; try sList.Add('parameter1'+ComboBox1.Text); sList.Add('parameter2'+ComboBox2.Text); sList.Add('parameter3'+ComboBox3.Text); sList.Add('parameter4'+Edit2.Text); sList.Add('parameter5'+Edit1.Text); sList.Add('parameter6'+Edit3.Text); SendPostData(IdHTTP,'http://www.sascha-st.de/gwm/eintragen.php',sList); finally sList.Free; end; end;
end. |
Alles gut und schön (hoffe ich mal) bis eben in die Zeile 91:
Delphi-Quelltext
1:
| SendPostData(IdHTTP,'http://www.sascha-st.de/gwm/eintragen.php',sList); |
Da wird ein Operator (.) erwartet, aber ich habe wie ihr seht ein Komma
stehen. Aber das beste ist in der Anleitung zu den Indy-Units steht es
auch so:
Link [
http://www.dsdt.info/tipps/?id=455]. Ich habe eigentlich
an der Function nichts verändert also kann ich mir nicht vorstellen, warum er keine
Kommas aktzieptiert....
Liebe Grüße
ZSKing
PeterPain - Mi 19.12.07 21:21
Auch ich will nicht unfreundlich sein, aber wie man dir schong gesagt hat, dir fehlen komplett die Grundlangen. Du übergibst da IdHttp, dass ist verutlich eine Unit, keine Komponente, du musst eine Komponente vom Typ TidHTTP instanzieren.
grüsse
ZSKing - Sa 22.12.07 20:10
Ich habe mich eigentlich in die Grundlagen per Crahskurs eingearbeitet, aber ganz verstanden habe ich jetzt nicht warum ein angegebenes Beispiel auf dsdt.info nicht funktioniert. Naja ich will nichts auf dsdt.info schieben. - Aber ich habe es jetzt mal geändert, aber einen Sinn ergibt das alles noch nicht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| begin sList:=TStringList.Create; try sList.Add('parameter1'+ComboBox1.Text); sList.Add('parameter2'+ComboBox2.Text); sList.Add('parameter3'+ComboBox3.Text); sList.Add('parameter4'+Edit2.Text); sList.Add('parameter5'+Edit1.Text); sList.Add('parameter6'+Edit3.Text); SendPostData(TIdHTTP,'http://www.sascha-st.de/gwm/eintragen.php',sList); finally sList.Free; end; end; |
Naja jetzt ist ja klar ist irgendwas aus der Klasse selbst nicht nochmal
da auftauchen darf --> Es kommt der Fehler, dass TIdHTTP und Class Refenrences
inkompatible Typen. Sind...
MfG
ZSKing
PS:
Also so ne Geschichte von wegen Units richtig einbinden war nicht
in dem Crashkurs enthalten, aber diese Indy-Unit ist auch irgendwie
eine Sache für sich, oder?!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!