Zum Inhalt springen

Workshop: Wir basteln uns einen Tradingbot (Lektion 2)


Empfohlene Beiträge

Hallo zusammen,

nach der ersten Lektion (https://coinforum.de/topic/15985-workshop-wir-basteln-uns-einen-tradingbot-lektion-1) geht es heute weiter, diese Punkte stehen auf dem Programm:

 

1. Datenbank einrichten
2. Drei Dateien einrichten, die wir für alles Weitere brauchen
3. Wir lernen Variablen kennen
4. Wir binden die Datenbank an
5. Wir schreiben etwas in die Datenbank
6. Wir lesen etwas aus der  Datenbank aus
7. Wir löschen Daten wieder aus der Datenbank

Sinn dieser Lektion ist, dass der Umgang mit einer Datenbank das Logging und das Auswerten erleichtert. Nur so wissen wir immer was der Bot macht und was er in der Vergangenheit gemacht hat.
Später kann man auch Telegram- oder eMail-Benachrichtigungen einrichten - ist aber nix mit dem man Fehler suchen kann, die im Betrieb auftraten.

Kurz: Als Prograammierer kommt man um Datenbanken nicht herum und Ihr tut das nun auch nicht :D

1. Datenbank einrichten

http://localhost/phpmyadmin bringt Euch als XAMPP-Benutzer direkt in Eure Datenbank.

02-DB1.thumb.png.af6ff4e2d56ed29fcb1b5d0c43d60234.png

Geht dort auf "Benutzerkonten" und dann unten  "Benutzerkonto hinzufügen" anklicken. (wer bei einem Webhoster eine Datenbank hat, der hat bereits Zugangsdaten zur Datenbank und überspringt das Anlegen eines neuen Benutzers)

02-DB2.thumb.png.0494ed2db4dfcca304dfa546841eb05e.png


1. Nennt den User einfach "balancebot"
2. Wählt den Hostname "Lokal" (sehr wichtig bei XAMPP und für die Sicherheit)
3. Vergebt ein Passwort (und wiederholt es) (in meinem Beispiel ist es "BalanceBotPasswort")
4. Setzt das Häkcheen "Erstelle eine Datenbank mit gleichem Namen und gewähre alle Rechte"
5. Klickt "ok" gaaanz unten rechts.

Und zack, Ihr habt eine Datenbank erstellt und einen Datenbankbenutzer angelegt.

02-DB3.thumb.png.0d1ef6b733a5ccb70a382327fea4be56.png

Nun klickt Ihr links auf die neu angelegte Datenbank "balancebot"
Und oben auf  "SQL".

Nun könnt Ihr direkt SQL-Befehle eingeben und die Datenbank abfragen - da die neue Datenbank noch leer ist, kopiert nachstehende SQL-Befehle hinein um
1. eine Tabelle in der DB zu erstellen
2. Ihr einen eindeutigen Index (Primärschlüssel) zuzuweisen
3. diesen mit jedem neuen Datensatz automatisch um 1 hochzählen zu lassen.

CREATE TABLE `tblMessages` (
  `id` int(11) NOT NULL,
  `date_created` datetime NOT NULL,
  `message` text NOT NULL
);

ALTER TABLE `tblMessages`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tblMessages`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

... und auf "ok" klicken.

Und das war's auch schon in der Datenbank.

Links erscheint nun die Tabelle in der Auswahlliste - und wenn erste Datensätze drin sind, könnt Ihr direkt in der Datenbank diese Datensätze sehen, bearbeiten und auch löschen.

2. Drei Dateien einrichten, die wir für alles Weitere brauchen
Wir legen nun drei Dateien an:

01-dateien.png.ca95bebef42a37e6f91c0c0f6f71f86e.png

 

Datei "index.php" beinhaltet den Programmcode des Bots - und zu Beginn auch immer die Kommentare der jeweiligen Lektion - bitte auch lesen und nachvollziehen. Im Zweifel hier im Thread nachfragen 😉

.

<?php

/***
* Lektion 2: Hallo Datenbank
* ... wir widmen uns der Datenbank
* ... wir legen eine Datenbank an
* ... wir lernen phpmyadmin kennen um eine MySQL-Datenbank zu verwalten
* ... wir erzeugen die Tabellen, die wir brauchen, indem wir eine Tabelle anlegen, 
*     ihr einen Primärschlüssel geben und diesen automatisch mit jedem neuen 
*     Datensatz um 1 hochzählen lassen:

CREATE TABLE `tblMessages` (
  `id` int(11) NOT NULL,
  `date_created` datetime NOT NULL,
  `message` text NOT NULL
);

ALTER TABLE `tblMessages`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `tblMessages`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
  
* ... wir gliedern diese Programmcode-Datei in Abschnitte, die in späteren Lektionen gefüllt werden.
*     Auf diese Weise behalten wir die Orientierung wann welcher Code wie zu aktiualisieren ist.
* ... wir lagern den Konfigurations-Code in eine externe Datei "config.php" aus, so trennen wir 
*     Einstellungen von Programmcode und können einfacher Updates einspielen indem wir nur
*     den Programmcode austauschen und sämtliche Konfigurationen beibehalten können.
* ... Wir erstellen eine Funktion "update_messages()" um Statusmeldungen in die Datenbank zu schreiben
*     Das ist nötig um später im automatischen Betrieb den Status des Bots abzufragen
* ... wir lesen die Inhalte aus der Datenbank aus (Datei show_messages.php")
*     Ebenso wie wir die Konfiguration abtrennen werden wir auch Programmcode und 
*     Status-Ausgabe voneinander trennen.
* ... und nach X Tagen läschen wir die Datenbankeinträge wieder um zu vermeiden, dass 
*     die Datenbank irgendwann zu voll wird (Abschnitt 14).
*
* Weiterführende Informationen:
*   Google "mysql select" um nachzulesen was der MYSQL-Befehl "select" macht
*   Google "php manual date" um nachzulesen was "date()" in unserer Funktion update_message() anstellt.
*   Google "php manual real_escape_string" um nachzulesen was "real_escape_string()" in unserer Funktion update_message() anstellt.
*   Google "php manual require_once" um nachzulesen wie "require_once()" den Code weiterer Dateien einbindet.
*
* Dokumentation:
*  https://coinforum.de/topic/15993-workshop-wir-basteln-uns-einen-tradingbot-lektion-2
*  https://github.com/Jokin-BalanceBot/BalanceBot
*/

// Abschnitt index.php 1: Datei mit den Konfigurationsparametern einlesen
require_once("config.php");

// Abschnitt index.php 2: Datenbankverbindung aufbauen und einen DB-Handler erzeugen
// (Platzhalter)

// Abschnitt index.php 3: 
// (Platzhalter)

// Abschnitt index.php 4: 
// (Platzhalter)

// Abschnitt index.php 5:
// (Platzhalter)

// Abschnitt index.php 6:
// (Platzhalter)

// Abschnitt index.php 7:
// (Platzhalter)

// Abschnitt index.php 8:
// (Platzhalter)

// Abschnitt index.php 9:
// (Platzhalter)

// Abschnitt index.php 10:
// (Platzhalter)

// Abschnitt index.php 11:
// (Platzhalter)

// Abschnitt index.php 12:
// (Platzhalter)

// Abschnitt index.php 13:
// (Platzhalter)

// Abschnitt index.php 14: 
// (Platzhalter)
?>

Datei "config.php" beinhaltet die onfiguration des Bots. Auf diese Weise lässt sich der Programmcode einfach austauschen ohne die Konfiguration immer wieder eintragen zu müssen:

<?php

// Abschnitt config.php 1: Zugangsdaten für Datenbankverbindung
$__db="balancebot";
$__db_server="localhost";
$__db_user="balancebot";
$__db_passwort="BalanceBotPasswort";

// Abschnitt config.php 2: 
// (Platzhalter)

// Abschnitt config.php 3: 
// (Platzhalter)

// Abschnitt config.php 4: 
// (Platzhalter)

?>

Datei "show_messages.php" enthält die Ausgaben des Bots aus der Datenbank:

<?php

// Abschnitt show_messages.php 1: Datei mit den Konfigurationsparametern einlesen
require_once("config.php");

// Abschnitt show_messages.php 2:
// (Platzhalter)

// Abschnitt show_messages.php 3:
// (Platzhalter)

// Abschnitt show_messages.php 4:
// (Platzhalter)

// Abschnitt show_messages.php 5:
// (Platzhalter)

?>

Mit dem Befehl "require_once()" binden wir den code aus "config.php" in den anderen beiden Dateien ein.

3. Wir lernen Variablen kennen

Nun erweitern wir die Konfigurationsdatei "config.php" um die Datenbankzugangdaten:

// Abschnitt config.php 1: Zugangsdaten für Datenbankverbindung
$__db="balancebot";
$__db_server="localhost";
$__db_user="balancebot";
$__db_passwort="BalanceBotPasswort";

Im weiteren Verlauf werde ich nur Codeschnipsel posten, die sich direkt auf die Abschnitte beziehen, sodass Ihr immer wisst wo diese Codeschnipsel hingehören.

// Abschnitt index.php 2: 
// Variablen werden wir auf diese Weise immer mal wieder ausgeben oder in Zeichenfolgen verwenden:
echo "a) Variable __db enthält $__db <br>";
echo "b) Variable __db enthält ".$__db." <br>";

Speichern und http://localhost/BalanceBot/ aufrufen.

ihr erkennt, dass man die Variablen auf zwei Arten in den Echo-Befehl einbinden kann. Mit dem Punkt werden zeicheenketten verbunden, davon machen wir noch häufiger Gebrauch.

Die beiden Echo-Befehlee könnt Ihr danach wieder löschen.

4. Wir binden die Datenbank an

nun geht es mal ans richtige Programmieren ... wir binden die Datenbank in der index.php und in der "show_messages.php" ein:

// Abschnitt index.php 2: Datenbankverbindung aufbauen und einen DB-Handler erzeugen
$mysqli = new mysqli($__db_server, $__db_user, $__db_passwort, $__db);

if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    exit(); // Skript beenden, wenn keine DB-Verbindung zustande kommt.
}

echo "DB-Verbindung hat offenbar geklappt<br>";

und auch in der anderen Datei:

// Abschnitt show_messages.php 2: Datenbankverbindung aufbauen und einen DB-Handler erzeugen
$mysqli = new mysqli($__db_server, $__db_user, $__db_passwort, $__db);

if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    exit(); // Skript beenden, wenn keine DB-Verbindung zustande kommt.
}

echo "DB-Verbindung hat offenbar geklappt<br>";

Wenn Ihr im Browser nun " DB-Verbindung hat offenbar geklappt " lest, habt Ihr alles richtig gemacht.

5. Wir schreiben etwas in die Datenbank

Nun wollen wir auch mal Daten in die Datenbank schreiben - das brauchen wir sehr häufig im weiteren Verlauf.
Dazu schreiben wir unsere erste Funktion - keine Sorge, wir werden gar nicht viele Funktionen bruachen und allzu viel Codee wird das am Ende auch nicht sein (weniger alss 1.000 Zeilen inkl. aller Kommentare)

// Abschnitt index.php 4: 
// Da wir zukünftig öfters Statusmeldungen in die Datenbank schreiben werden, machen wir eine Funktion draus 
function update_messages($message){

    global $mysqli;    // Datenbank-Handler innerhalb der Funktion zugänglich machen

    // Mit "real_escape_string" werden Sonderzeichen umgewandelt um sie in der DB zu speichern
    $sql_query = "INSERT INTO `tblMessages` (`date_created`, `message`) 
        VALUES ('".date("Y-m-d H:i:s")."', '".$mysqli->real_escape_string($message)."')";

    echo "MESSAGE: $message <br>"; // Was in die DB kommt, kann auch gleich mal ausgegeben werden, 

    // Minimales Fehlerhandling
    if (!$mysqli->query($sql_query)) {
        echo $mysqli->error;
    }
}


// Abschnitt index.php 4.1: 
// Nun benutzen wir die Funktion um eine Nachricht in die Datenbank zu schreiben. 
update_messages("Hallo Welt!"); 

// Nun wollen wir auslesen was in der Datenbank drin steht. 
// das machen wir aber in der Datei show_messages.php, denn der Code des Bots sollte der Ausgabe der Status-Meldungen getrennt sein.

Im Browser sehen wir nach dem Aktualisieren von "http://localhost/BalanceBot":

DB-Verbindung hat offenbar geklappt
MESSAGE: Hallo Welt!

Und in der Datenbank shen wir das hier:

02-DB4.thumb.png.4fc5c4db149610f0e1fa45fa03386a9f.png

.. und damit hätten wir das auch schon geschafft 🙂

6. Wir lesen etwas aus der  Datenbank aus

Toll wäre es nun wenn wir auch noch auslesen würden, was wir alles so in die Datenbaank schreiben. Das machen wir über unsere Datei "show_messages.php", auch da aktualisieren wir einen Abschnitt:

// Abschnitt show_messages.php 5:
// Nun wollen wir auslesen was in der Datenbank drin steht.
// Dazu wollen wir die DB abfragen und die Ergebnisse sollen nach der ID absteigend sortiert werden (Datum ginge auch)
$sql_query="SELECT * FROM `tblMessages` ORDER BY `id` DESC";

$result_tblMessages = $mysqli->query($sql_query);

// in einer while-Schleife durchlaufen wir jeden Datensatz, den wir von der Datenbank zurück erhalten.
while($entry_tblMessages = $result_tblMessages->fetch_array(MYSQLI_BOTH)) {
	// ... und geben diesen einfach über einen echo-Befehl im Browser aus
    echo " ".$entry_tblMessages['date_created'].": ".$entry_tblMessages['message']." <br>";
}

Im Browser rufen wir nun "http://localhost/BalanceBot/show_messages.php" auf um alle Nachrichten aus der Datenbank auszugeben.

Und wann immmer Ihr den Bot startet (http://localhost/BalanceBot/  oder eben auch http://localhost/BalanceBot/index.php) wird nun ein neuer Datensatz erzeugt, den Ihr über http://localhost/BalanceBot/show_messages.php sehen könnt - und das mit Datum und Uhrzeit wann der Eintrag in der Datenbank erfolgte.

In der SQL-Abfrage benutze ich "DESC" um eine absteigende Sortierung zu erhalten, ich mag es die neuesten datensätze immer ganz oben zu sehen.

7. Wir löschen Daten wieder aus der Datenbank

Damit die Datenbank nicht zu voll wird müssen wir veraltete Datensätze löschen, das geht so:

// Abschnitt index.php 14: 
// Irgendwann ist die Datenbank voll, daher löschen wir Einträge, die älter als 7 Tage sind. (aus Teil 2)
$sql_query = "DELETE FROM `tblMessages` where `date_created`  < DATE_ADD(now(),INTERVAL -7 DAY)";

// Und auch obiges SQL-Statement an die Datenbank senden (aus Teil 2)
$mysqli->query($sql_query);

.. wir bereiten das SQL-Statement vor indem wir alles was älter ist als 7 Tage löschen wollen und übergeben das Statement an unseren Datenbankhandler ... der kümmert sich dann schon um alles Weitere. 

So, und das war's dann auch schon mit Lektion 2 - nun könnt Ihr ein bischen selber rumspielen und Euch weitere Informationen besorgen.

Ich werde die kompletten PHP-dateien auf Github hinterlegen damit ihr sie nochmal im Ganzen runterladen könnt:

https://github.com/Jokin-BalanceBot/BalanceBot

 

Übrigens sind das nun schon die ersten ca. 120 Codezeilen der index.php - nach der Lektion 7 stehen da ca. 600 Zeilen drin, also wirklich nicht wild. Wer bereits jetzt denkt "boah, ist das schwer" ... durchhalten, es lohnt sich 🙂

Im Zweifel einfach aufhören und später nochmal versuchen - oder posten wenn Ihr nicht weiterkommt. Wenn Ihr Euch nicht traut öffentlich zu fragen, dann auch gern als eMail an balancebot(eet)gmx(dooot)de

 

 

Bearbeitet von Jokin
  • Love it 3
  • Thanks 7
  • Like 8
Link zu diesem Kommentar
Auf anderen Seiten teilen

Juhuuu soeben mit Lektion 2 fertig geworden. Nach anfänglichen Startschwierigkeiten unter Linux (da mir die Oberfläche nicht so geläufig ist und dass mit der ganzen Rechtevergabe) hab ich alles auf meinem Raspberry Pi 2 zum laufen gebracht. Bin schon ganz gespannt auf die weiteren Lektionen.

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Lieber Jokin,

vielen Dank für deine fantastische Arbeit hier! Ich bin leider blutiger Anfänger im Bereich der Programmierung und versuche mich gerade anhand deiner Anleitungen einzuarbeiten. Leider hänge ich an einer Stelle. Wahrscheinlich ist es ganz banal, aber ich bekomme es trotzdem nicht hin.
Ich habe die Dateien config.php, index.php und show_messages.php wie du beschrieben hast angelegt. Beim Aufruf von http://localhost/BalanceBot bekomme ich im Browser jedoch immer die Meldung:

Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'balancebot'@'localhost' (using password: YES) in C:\xampp\htdocs\BalanceBot\index.php on line 52
Failed to connect to MySQL: (1045) Access denied for user 'balancebot'@'localhost' (using password: YES)

In Zeile 52 kann ich bei mir aber keine Abweichungen von deiner Datei finden und auch bei der Einrichtung der Datenbank habe ich mich strikt nach deinen Anweisungen gehalten. Könntest du mir vielleicht weiterhelfen?

Grüße

Link zu diesem Kommentar
Auf anderen Seiten teilen

47 minutes ago, Max Power said:

Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'balancebot'@'localhost' (using password: YES) in C:\xampp\htdocs\BalanceBot\index.php on line 52
Failed to connect to MySQL: (1045) Access denied for user 'balancebot'@'localhost' (using password: YES)

In Zeile 52 kann ich bei mir aber keine Abweichungen von deiner Datei finden und auch bei der Einrichtung der Datenbank habe ich mich strikt nach deinen Anweisungen gehalten.

Typischerweise ist das ein Rechtefehler, d.h. Fehler in Accountname oder Passwort.

Die Zeile 52 selbst ist ganz unschuldig, ihr Verbindungsversuch an die Datenbank wird nur abgewiesen - deshalb die Fehlermeldung - weil der übergebene Accountname oder das übergebene Passwort nicht stimmen - oft nur ein kleiner Tippfehler oder sowas.

Vielleicht steckt auch in den Variablennamen der Zeile 52 ein Tippfehler?

$mysqli = new mysqli($__db_server, $__db_user, $__db_passwort, $__db);

Wenn du z.B. versehentlich nur einen Unterstrich statt den zweien nach dem $ hast.

Bearbeitet von PeWi
  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Oder ein Tippfehler in den anfänglichen Definitionen?

On 1/6/2019 at 9:58 PM, Jokin said:

$__db="balancebot";
$__db_server="localhost";
$__db_user="balancebot";
$__db_passwort="BalanceBotPasswort";

Wenn ich mich recht erinnere - @Jokin, korrigiere mich, falls es falsch ist -  dann meckert PHP nicht, wenn du einen minimalen Tippfehler bei der Verwendung einer Variablen hast, sondern legt stillschweigend eine neue Variable mit dem minimal veränderten Namen und leerem Inhalt an - solche unauffälligen Vertipper sind fies zu finden. 😉

Also, am besten nochmal die Variablen aus Jokins Vorlage mit Copy-Paste Variable für Variable in deinen Quelltest kopieren.

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank für deine Antwort PeWi!

Die Zeile 52 habe ich schon mehrmals genau untersucht. Auch auf Hinblick des Passwortes habe ich die Datenbank bereits überprüft, nochmals neu angelegt und auch komplett ohne Passwort einen Versuch gestartet. Aber immer bekomme ich die selbe Meldung.

Ich werde aber nicht aufgeben und es nochmals ganz von vorne beginnen. Irgendwo muss sich der Fehlerteufel ja eingeschlichen haben. Aber wie gesagt, danke schon mal für deine Hilfe PeWi!

Link zu diesem Kommentar
Auf anderen Seiten teilen

41 minutes ago, Max Power said:

Die Zeile 52 habe ich schon mehrmals genau untersucht.

Auch die anfänglichen Definitionen  der vier Variablen im Abschnitt 1?  Ich tippe nach wie vor auf so 'nen subtilen Tippfehler, den man auch bei 10x Drüberschauen übersieht ...

Viel Erfolg jedenfalls!

Bearbeitet von PeWi
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Stoppe in XAMPP die MySQL-Datenbank und starte sie erneut.

Dadurch werden die Rechte neu eingelesen.

Alternativ geht auch der SQL-Befehl "flush privileges" 

 

Falls der Fehler weiterhin besteht:

 

Geh mal bitte in phpmyadmin und dann in "Benutzerkonten".

Dort ist die Übersicht der angelegten Benutzer - schicke einen Screenshot an mich: balancebot@gmx.de

Ich gehe von einem Problem mit der Datenbank aus.

Das bekommen wir in den Griff 🙂

  • Love it 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Auch ein beliebter Fehler, den ich gerne mache: Ich vergesse die Änderungen zu speichern und wundere mich, dass das Programm noch dasselbe tut wie vorher.

... ider ich ändere die falsche Datei ... zwar richtiger Name, jedoch im falschen Dateiordner. 

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Auch noch eine Lösungsmöglichkeit.

In phpmyadmin diese SQL-Befehle reinkopieren und ausführen um User und database des Users zu löschen:

DROP USER 'balancebot'@'localhost';
DROP DATABASE balancebot;

Danach diese Befehle ausführen um neuen User und Datenbank annzulegen:

CREATE USER 'balancebot'@'localhost' IDENTIFIED BY 'BalanceBotPasswort';
GRANT USAGE ON *.* TO 'balancebot'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
CREATE DATABASE IF NOT EXISTS `balancebot`;
GRANT ALL PRIVILEGES ON `balancebot`.* TO 'balancebot'@'localhost';
FLUSH PRIVILEGES;

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Stunden schrieb Max Power:

So, der Fehler konnte nun behoben werden. Jokin hat mir den Tip gegeben in der config.php als user "root" und als Passwort "" einzustellen. Nun funktioniert alles wunderbar.

Danke für eure Hilfe!! 🙂

Ah, prima - dann ist das in der Tat ein Problem bei Deinem MySQL - merkwürdig.

Natürlich sollte ein root-User nicht ohne Passwort auf eine MySQL-Datenbank zugreifen können - in korrekt installierten Produktivsystemen gibt es das nicht, aber hier ist das in der Standardinstallation erstmal "unkompliziert".

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Boah ist das schwer ;).

In Go ist zwar manches einfacher, aber manches auch komplizierter. Für die Verwendung von MS SQL Server statt MySql muss ich auch manches anders machen.

  • $-Zeichen in Variablennamen sind in Go verboten und Unterstriche _  verpönt, letztere werden jedenfalls vom Debugger angemeckert, weil sie nicht der Konvention entsprechen.
  • Ein Datum mit Zeit speichere ich nicht als Datum in der DB, sondern als int64 in Nanosekunden seit dem 1. Januar 1970 (Unix Zeit). Das kann Go leicht konvertieren und es hat den Vorteil, dass man den Code nicht so stark auf eine bestimmte DB-Engine zuschneiden muss. MySql hat ja andere Datumsfunktionen als z.B. SQLite oder MS SQL Server.
  • Die Backticks (`) in den SQL-Statements sind auch MySql-spezifisch und funktionieren nicht mit anderen Datenbanken. Ich verwende daher die normalen Anführungszeichen ". In MySql muss man dazu ggf. Ansi-Quotes einschalten:  SET sql_mode = 'ANSI_QUOTES';
  • Die Funktion update_messages finde ich ungeschickt benannt und heißt bei mir insertMessage, denn sie fügt ja nur eine Message ein (kein Plural) und "update" bedeutet in Bezug auf Datenbanken immer "ändern", nicht "einfügen". Die vier Standardoperationen sind auch unter dem Kürzel CRUD bekannt: Create, Read, Update, Delete (Erzeugen bzw. Einfügen, Lesen, Ändern, Löschen).

Lektion 2 ist damit auch geschafft :).

Bearbeitet von Herr Coiner
Duden
  • Love it 1
  • Up 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

@Jokin: Bitte solche Anmerkungen von mir nicht als Kritik auffassen, höchstens als konstruktive Kritik.
Ich finde es ganz großartig, dass du dir so viel Arbeit machst und uns eine anfängertaugliche Schritt-für-Schritt Anleitung für einen Trading-Bot lieferst :).

Da ich mich als erfahrenen Programmierer betrachte, möchte ich halt ein paar Tipps weitergeben, wenn mir etwas auffällt.
Was die Benennung von Variablen etc. angeht, hat mal ein berühmter Programmierer gesagt "There are only two hard things in Computer Science: cache invalidation and naming things".

Aber Programmiererfahrung hin oder her – wenn ich mir das alles autodidaktisch hätte beibringen müssen, wäre es wohl ein Jahresprojekt geworden. Aber so wird man ja an die Hand genommen und ich kann gleich drei Fliegen mit einer Klappe schlagen: Bot bauen, neue Sprache Go lernen und Raspberry Pi3 aufsetzen, einfach cool :cool:.

Bearbeitet von Herr Coiner
  • Like 1
  • Up 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 42 Minuten schrieb Herr Coiner:

Bitte solche Anmerkungen von mir nicht als Kritik auffassen, höchstens als konstruktive Kritik.

Keine Sorge - Deine Kritik ist absolut berechtigt 🙂

vor 43 Minuten schrieb Herr Coiner:

Aber so wird man ja an die Hand genommen und ich kann gleich drei Fliegen mit einer Klappe schlagen: Bot bauen, neue Sprache Go lernen und Raspberry Pi3 aufsetzen, einfach cool :cool:.

Genau das ist mein Ziel 🙂

Ich habe die Vision, dass hier im Forum der Anteil derer steigt, die technisch und strategisch denen ein Schritt voraus sind, die erst in der nächsten Hype-Phase einsteigen.

Die Strategie ist am Ende beliebig erweiter- und austauschbar.

Sobald bitcoin.de den Handel von Coin zu Coin erlaubt, also ohne Umweg über Fiat, werde ich den Bot auch für bitcoin.de erweitern.

  • Like 1
  • Up 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 Monate später...
Am 6.1.2019 um 21:58 schrieb Jokin:

Datei "config.php" beinhaltet die onfiguration des Bots. Auf diese Weise lässt sich der Programmcode einfach austauschen ohne die Konfiguration immer wieder eintragen zu müssen:


<?php

// Abschnitt config.php 1: Zugangsdaten für Datenbankverbindung
$__db="balancebot";
$__db_server="localhost";
$__db_user="balancebot";
$__db_passwort="BalanceBotPasswort";

// Abschnitt config.php 2: 
// (Platzhalter)

// Abschnitt config.php 3: 
// (Platzhalter)

// Abschnitt config.php 4: 
// (Platzhalter)

?>

 

 

Jokin, erst mal vielen Dank, dass du deinen Bot mit allen teilst und dir dann auch noch die Mühe machst, die Entwicklung ausgiebig zu dokumentieren! *daumen hoch*

Zum zitierten Teil: Hinter dem <?php ist wohl ein Leerzeichen versteckt. Wird zumindest von meinem Safari so mitkopiert. Erst wenn man dieses löscht, kommt das erhoffte "DB-Verbindung hat offenbar geklappt". Bis dahin bleibt das Browser-Fenster komplett weiß, was die Fehlersuche erschwert. 😂

P.S. Ich editiere am Mac mit BBEdit, das ist quasi der Nachfolger vom TextWrangler. Die kostenlose Variante ist diesem ebenbürtig.

Bearbeitet von plangin
Tippfehler, Formatierung
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 26 Minuten schrieb plangin:

Zum zitierten Teil: Hinter dem <?php ist wohl ein Leerzeichen versteckt.

Ja, das Problem hab ich einige Male gehabt und es offenbar nicht zu 100% entfernt. Ich hab keine Ahnung wieso oftmals nichtdruckbare Zeichen reingekommen sind, die sind schon beim Erstellen der Posts reingekommen.

Im Zweifel lade den Code bei Github runter, da passt das komplett.

BBEdit kenne ich bisher noch nicht, da ich mit dem Textwrangler wunderbar zurecht komme, bleib ich dabei - ich brauche ja nicht mehr als Syntaxhighlighting und Multi-File-Search :D

 

  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 6 Monate später...

Ok weiter gehts 😁

Also ich bekomme bei der Abfrage des Serceers -> http://192.168.64.2/BalanceBot/ folgende Fehlermeldung:


Warning: mysqli::__construct(): (HY000/1044): Access denied for user 'balancebot'@'localhost' to database 'balancebot' in /opt/lampp/htdocs/BalanceBot/index.php on line 61
Failed to connect to MySQL: (1044) Access denied for user 'balancebot'@'localhost' to database 'balancebot'

 

Hab schon die Lösungsvorschläge versucht die Max Power weitergeholfen hatten. Bei mir hats leider nicht funktioniert.

Was mir aufgefallen ist das mein Verzeichnis ein anderes ist, die drei Dateien liegen bei mir unter > lampp > htdocs > BalanceBot  ist das richtig so? Bei dir sind die Dateien unter > XAMPP > htdocs > BalanceBot Kann der Fehler eventuell damit zusammenhängen? Außerdem habe ich den "BalanceBot" Ordner mit großen Buchstaben geschrieben. Evetuell liegt der Fehler auch daran? Ansonsten ist alles wie beschrieben. 😕

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 9 Minuten schrieb E_001:

Warning: mysqli::__construct(): (HY000/1044): Access denied for user 'balancebot'@'localhost' to database 'balancebot' in /opt/lampp/htdocs/BalanceBot/index.php on line 61
Failed to connect to MySQL: (1044) Access denied for user 'balancebot'@'localhost' to database 'balancebot'

Kannst Du Dich mit dem User über phpmyadmin anmelden?

Hast Du die Datenbank mit Großbuchstaben benannt?

Generell solltest Du unbedingt konsistent bei der Groß- und Kleinschreibung sein.

Der Fehler ist ein Berechtigungsproblem, Ordnernamen dürften daher stimmen.

vor 13 Minuten schrieb E_001:

Was mir aufgefallen ist das mein Verzeichnis ein anderes ist, die drei Dateien liegen bei mir unter > lampp > htdocs > BalanceBot  ist das richtig so? Bei dir sind die Dateien unter > XAMPP > htdocs > BalanceBot Kann der Fehler eventuell damit zusammenhängen?

Ob lampp, XAMPP, /opt/var/html oder wo auch immer ist abhängig von der Webserverumgebung.

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 5 Monate später...

Habe auch Probleme bei der Anmeldung. Der Bot lief ca. 1 Woche und dann kam die Fehlermeldung. 

Zitat

Warning: mysqli::__construct(): (HY000/1044): Access denied for user 'balancebot'@'localhost' to database 'balancebot' in C:\xampp\htdocs\BalanceBot\index.php on line 21
Failed to connect to MySQL: (1044) Access denied for user 'balancebot'@'localhost' to database 'balancebot'

Ich habe danach den SQL-Server neu konfiguriert, nach einer Woche wieder das gleiche Problem beim Zugriff.

 

Leider versteh ich von programmieren nicht sehr viel (nichts, außer SPS und CNC-Heidenhein und auch das schon 10 Jahre her) und die Fehlersuche ist schwierig für mich. Nach der Lektion 7 lief mein Bot nicht und ich musste die Dateien von GitHub nehmen 🤪.

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Stunden schrieb Axmlm:

Ich habe danach den SQL-Server neu konfiguriert, nach einer Woche wieder das gleiche Problem beim Zugriff.

Kurioses Verhalten, das kenne ich noch nicht. Ich hab das auf Windows nur testweise laufen gehabt. Da funktionierte das jedoch.

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.