Wie mit Bash in Mysql schreiben

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    ich bin gerade dabei eine Weboberfläche zu schreiben. Dabei sollen dann Updates jede Nacht ausgeführt werden und wenn die fertig sind soll ein Eintrag in Mysql vorgnommen werden, wo dann steht wie lange das Update dauert und dann noch ein Link zu einer neuen Seite wo die Ausgabe steht die bei dem Update zustande gekommen ist.
    Wichtig ist, das alles in Bash und oder PHP und Mysql geschrieben ist. Wenn das mit dem Link nicht funktioniert ist es nicht schlimm. Wichtig wie gesagt halt wie man in Mysql schreibt und zwar die ganze Ausgabe von den Updates.

    Lg
    dukennstmchnicht

    Einmal editiert, zuletzt von StillFire23143 (31. August 2015 um 17:20)

  • Schreib's doch gleich in PHP. Dann brauchst du dich nicht mit Bash rumärgern und Mysql ist gar kein Problem.
    Du kannst mit dem shebang auf deinen Phpinterpreter auch Phpscript in der Console ausführen.

  • Naja aber es wäre einfacher, wenn ich eine Datei habe die mir mit bash halt alles ausrechnet und mir das dann in die Datenbank schreibt..


    Ausserdem habe ich keine Lust auf zusätzliche Software, da alles ziemlich schnell installiert und funktionstüchtik sein soll...

    Einmal editiert, zuletzt von StillFire23143 (5. September 2015 um 13:58)

  • Wenn du eine Weboberfläche bastelst wäre es besser (und später auch einfacher) dies direkt/nativ in PHP umzusetzen. Man sollte immer so viel wie möglich in einer Sprache machen und auf Vermischungen verzichten.

    Innerhalb PHP's bash Scripte auszuführen ist "zusätzliche Software", aber auch langsamer und umständlicher zu prüfen ob alles i.O. abläuft.

    PHP hat von Haus aus bereits Schnittstellen für MySQL eingebaut. Rechnen usw geht auch ziemlich einfach in PHP.

    Zeig dein bisherigen Code und ich erklär dir Schritt für Schritt was du wie machen kannst

  • Danke meigrafd,
    Es sollen jede nacht um 1 Uhr Updates ausgeführt werden, wo dann ein Mysql Eintrag erstellt wird, mit folgenden Spalten: id, time, endtime, text, dauer
    Die id wird automatisch vergeben. bei zeit sollte die Startzeit rein, also mit Php auslesen. Dann die Endzeit, wo man dann auch die Dauer halt mit ausrechnen könnte und beim Text bin ich mir noch nicht sicher ob ich einfach nur sage Update wurde erfolgreich ausgeführt, oder ob ich das mitgeloggt haben möchte.

    Gäbe es auch die Möglichkeit, das man noch eine Spalte mit ausgabe macht, und dort die Ausgabe des Updates hineinpackt? Ich würde das dann m ende alles Als Tabelle darstelen, und be der Ausgabe dann einen Link oder Button machen, die Dann ein Popup fenster öffnen wo dann der ganze text ausgegeben wird...
    Automatisch zusammengefügt:
    Hier jetzt noch mal meine jetzige PHP Datei, diese liegt im Ordner /var/www/.../info/downloads/index.php

    machen.. Die Punkte werde ich dann durch einen Verzeichnis Namen ersetzen.

    Einmal editiert, zuletzt von StillFire23143 (5. September 2015 um 15:36)

  • ...Nun versteh ich aber gerade absolut nicht was der von dir gezeigte Code mit deinem Anliegen hier zu tun hat? :-/ Ich sehe weder das bash Script, noch was gebackupt wird oder sonst was - wie soll ich nun wissen wie ich dir wobei helfen soll? Ich kann nur die index.php kritisieren und Verbesserungen vorschlagen - aber zum eigentlich Thema hier in diesem Thread kann ich nichts weiter zu sagen da mir die nötigen Infos fehlen ...


    Also zu der Tabelle:
    Es wäre besser und effizienter wenn du nur folgende Spalten hast: id, timestamp, duration, text
    Generell ist zu empfehlen den sog. Unixtime-Stamp zu verwenden. Das ist ein globaler Standard und beziffert die Sekunden die seit dem 1.1.1970 vergangen sind. Diesen Timestamp kann man dann ziemlich einfach in ein beliebiges Datum konvertieren usw.
    duration: Beinhaltet nur die Sekunden die benötigt wurden. Anhand dessen lässt sich dann ganz einfach die EndTime errechnen (timestamp + duration = endtime). Benutze hierfür den Spalten-Typ: int(11)
    text: Hier könnte direkt das "log" vom Update hinterlegt werden. Der Spalten-Typ sollte dann aber 'mediumtext' sein. Aber ob du nun das Log dort mit rein schreibst oder nur "updated" ist relativ egal. Du kannst Zeilenumbrüche ( \n ) einfügen wenn du ein Log mit rein tust, oder eben nicht...
    Benenne die Spalten auf jeden Fall eindeutig, zutreffend/passend und am besten durchgehend mit englischen Begriffen ;)

    Zu deinem PHP:
    Ich hatte dir schon mal erklärt das 'SELECT *' schlecht sind - wieso beherzigst du diesen Tip nicht? Na, jedenfalls sieht > das < irgendwie genau so aus... Komisch :s Hast du hier 2 Logins oder wie kommt sowas?

    Es wäre auch übersichtlicher wenn du die while etwas anders schreiben würdest - zumindest für mich... Es kann die ganze Zeit <?php offen bleiben und den HTML Kram echo'st du dann halt.
    action="user.php?page=2" ... versteh ich auch nicht so recht, die Datei in der das steht heißt doch index.php ? :s Lass das lieber leer wenn du nicht weiß was das bewirkt ;)
    Auch dieses umschließen am Anfang falls "username" bekannt ist usw ist, naja, ungewöhnlich und trägt zur Unübersichtlichkeit bei :(
    Ebenfalls solltest du die Abfrage ob der Löschen-Button gedrückt wurde und dann den jeweiligen Datenbankeintrag zu löschen, an den Anfang der Datei setzen damit nicht noch mal der eigentlich bereits gelöschte Eintrag angezeigt wird... Das Script wird von oben nach unten abgearbeitet. Drückt man auf "Löschen" wird das Script neu geladen, die Datenbank ausgelesen und zB auch noch die id 5 angezeigt, aber danach wird bei Dir id 5 gelöscht... Also wieso sollte man den Datensatz noch mal anzeigen lassen obwohl die bereits gelöscht wurde? Setzt man das löschen vor die HTML-Tabelle, sieht man auch nicht mehr den bereits gelöschten Teil.

    Und was ist "link-login-3.php" ? Steht da wirklich nur ein Link drin? Wenn ja solltest du dir eine globale, oder auch 2, Konfigurationsdateien zulegen und nicht für jede Variable eine eigene Datei :D

    Bevor du dich vor lauter PHP Dateien nicht mehr zurecht findest und im Chaos versinkst - solltest du dir lieber jetzt die Mühe machen und eine vernünftige Struktur überlegen. "link-login-3.php" ist nur ein Beispiel was mir zeigt das du bereits Chaos hast.
    Generell sollte sich die Struktur an folgendem Gerüst orientieren:

    Die einzige Datei die du dann auf jeder Seite mit "require_once" einbindest wäre 'common.php'. In dieser Datei wiederum wird dann die global.php und config.php sowie die functions.php mit eingebunden. In der common.php kannst du dann auch session_start(); einfügen usw. In der global.php stehen nicht veränderbare Einstellungen und in der config.php stehen solche Sachen wie die MySQL Zugangsdaten und anderes was man sogar über die Webseite selbst bearbeiten lassen könnte.
    Wenn du nur eine css Datei hast brauchst du dafür aber nicht unbedingt ein Verzeichnis erstellen.

    Beispiel:

    Spoiler anzeigen


    index.php

    PHP
    <?php
    require_once("include/common.php");

    include/common.php

    include/functions.php

    PHP
    <?php
    function _exit() {
        echo "\n</body>\n</html>";
        exit();
    }

    include/global.php

    include/config.php


    Also noch mal ein Versuch das ganze etwas übersichtlicher und mit vernünftigeren Style zu versehen: http://pastebin.com/DwRNAdjB

    Spoiler anzeigen

    [code=php]
    <?php
    session_start();

    if (!isset($_SESSION["username"])) {
    echo "Bitte erst anmelden, <a href=\"" . include('../../itable/include/link-login-3.php') . "\">hier</a>.";
    exit();
    }

    include('../../include/db_config2.php');

    if (isset($_POST["id"]) AND !empty($_POST["id"])) {
    $delete = "DELETE FROM updates WHERE id=".$_POST["id"];
    $query = mysql_query($delete);
    if ($query == true) {
    echo "Erfolgreich gel&ouml;scht.";
    } else {
    echo "Fehler im System. Bitte versuche es sp&auml;ter noch einmal...";
    }
    }
    ?>
    <html>
    <head>
    <title><?php include '../../include/title/name.php'; ?></title>
    <link rel='SHORTCUT ICON' href='../../img/itable.jpg'>
    </head>
    <body>
    <h1>Updates</h1>
    <hr />
    <table border="1">
    <tr>
    <h4><th>Startzeit:</th><th>Endzeit:</th><th>Text:</th><th>Dauer:</th><th>Ausgabe:</th><th>L&ouml;schen:</th></h4>
    </tr>
    <?php
    $abfrage = "SELECT id,time,endtime,text,dauer FROM updates ORDER BY time DESC";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis)) {
    echo "<tr>";
    echo "<td>" . $row->time . "</td>";
    echo "<td>" . $row->endtime . "</td>";
    echo "<td>" . $row->text . "</td>";
    echo "<td>" . $row->dauer . "</td>";
    echo "<td></td>";
    echo "<td>";
    echo "<form action='' method='POST'>";
    echo "<input type='hidden' name='id' value='" . $row->id . "'/>";
    echo "<input type='submit' value='Benutzer l&ouml;schen'/></form>";
    echo "</td>";
    echo "</tr>";
    }
    ?>
    </table>
    </body>
    </html>
    [/php]

    ...Das sieht doch gleich viel besser aus - oder nicht? :huh:

  • Nein, hatte gerade bloß keine Zeit, und da ich gerade dabei bin alle Funktionen zum funktionieren zu bringen bei der weboberfläche, werde ich das alles erst später umstellen.. Werde nachher irgendwann mal posten wie mein erster Vorschlag aussieht.


    Kannst du mir schon mal sagen wie ich ein php programm im Ordner var/x/ ausführen kann?

  • Aus eigener Erfahrung rate ich dir das lieber jetzt umzustellen - wo du noch nicht allzu weit bist. Das ist meist einfacher, kostet weniger Zeit und auch Nerven. Lieber von Anfang an vernünftig machen als später alles umschreiben zu müssen.


    FAQ --> Nützliche Links / Linksammlung --> Befehle über PHP mit root Rechten ausführen (sudo webscript)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!