IF Abfrage alle 3 Stunden ausführen

  • Gut ich mache es jetzt mal sehr ausführlich.

    Ich habe als Beispiel Zwei Dateien. Die eine Datei heißt createFolder.php und die andere Datei heißt createUser.php.

    In beiden Dateien werden unterschiedliche Aktionen ausgeführt. Wie der Dateiname es bereits schon erklärt.


    Beide Dateien werden über einen Ajax Call aufgerufen. Ebenfalls von zwei unterschiedlichen Dateien.

    Ich habe also die Datei verzeichnis.php wo über einen Ajax Call createFolder.php ausgeführt. wird. Das gleiche dann bei der Datei admin.php dort wird über einen Ajax Call die Datei createUser.php ausgeführt.


    In den Dateien createFolder.php und createUser.php steht soweit immer das gleiche drin. In der createFolder.php wird ein Ordner erstellt auf meinem Linux Server. Bei createUser.php wird dann eben ein Benutzer in der Datenbank erstellt. Die Dateien sehen dann so aus.

    (Beide sind wieder wie am Anfang. Ohne änderungen)


    createFolder.php

    createUser.php


    In Beiden Dateien werden weitere Funktionen ausgeführt wenn ich diese aufrufe.
    also wenn ich in den Browser auf die Seite createFolder.php gehe, wird zwar der Verbindungstest durchgeführt. Aber ebenfalls auch die $createFolder Variable. Das gleiche ebenfalls bei createUser.php


    Und wie man sieht habe ich in beiden Dateien die Variable $alleFehler wo bei dem execute - Teil immer die Seite angegeben wird, in der sich diese Variable auch befindet.

    Und ich wollte gerne das ich für diese Seiten jeweils Nur die Verbindung Testen kann, ohne die anderen Funktionen ebenfalls auszuführen.

    Klar kann ich diese Abfrage in eine andere Datei schreiben, aber dann ist es das Problem mit der $alleFehler Variable.



    Ich hoffe ich konnte es soweit veranschaulichen und verdeutlichen.

  • Gut ich mache es jetzt mal sehr ausführlich.

    Ich jetzt auch mal

    Zitat

    Wenn die Verbindung nicht vorhanden ist, wird ein Datenbank Eintrag erstellt.

    Wenn die Verbindung Vorhanden ist und bereits ein Datenbank Eintrag vorhanden ist, wird dieser wieder gelöscht.

    Genau das ist die Aufgabe des Scriptes, das du erstellen sollst. Da spielt createUser und createFolder überhaupt keine Rolle, vergiss es einfach. Dieses Script wird auch nur durch den Cronjob aufgerufen. Im Grunde ist das nur ein wenig Copy/Paste aus deinen vorhanden Scripten.

    Aber solange du versuchst, das mit deinen exisitieren Scripten zu lösen, wird das nichts. Also nochmal: erstelle eine Script was genau diese beiden Anforderungen erfüllt, nicht mehr nicht weniger! Jetzt verstanden?


    Nachtrag:

    Zitat

    Wenn die Verbindung nicht vorhanden ist, wird ein Datenbank Eintrag erstellt.

    Wenn die Verbindung Vorhanden ist und bereits ein Datenbank Eintrag vorhanden ist, wird dieser wieder gelöscht.

    Das würde ich auch anders machen. Das Script schreibt grundsätzlich den Status in die DB, löschen würde ich da nichts. Auf diese Weise hättest du ein gewisses Logging und man könnte bei Problemen eventuell ein Muster erkennen.

  • Zum Cronjob-Problem hat m.scatello ja schon geschrieben: einfach ein Script unabhängig von den schon existierenden Dateien erstellen (den ersten Punkt im Folgenden beachten!)

    In den Dateien createFolder.php und createUser.php steht soweit immer das gleiche drin.

    Sehe ich das richtig? Der Teil zum prüfen der Verbindung ist in beiden Dateien identisch (bis auf den Dateinamen halt?). Wenn du Code durch kopieren von einer Datei in eine andere duplizieren musst, ist das ein deutlicher Hinweis darauf dass du den Code in eine Funktion/Klasse auslagern und die Methode/Funktion in beiden Dateien aufrufen möchtest.

    ":datum" => date('d.m.y'),

    Das Datenbankdesign scheint mir defekt zu sein: das ist kein Datumsformat mit dem MySQL was anfangen kann. Der Parameter ist aber überflüssig, NOW() in den Query zu schreiben reicht (Voraussetzung ist natürlich ein korrekter Datentyp was bei dir nicht gegeben scheint).


    $passwort = $_POST['passwort'];

    Das umkopieren von Werten aus $_POST usw. war schon immer Unsinn, du kannst bei execute auch direkt die Werte aus $_POST verwenden. Speziell bei der Zeile erhebt sich allerdings noch die Frage: wo kommt $password_gehasht weiter unten dann auf einmal her?

    $createFolder = ssh2_exec($connection, "mkdir " . escapeshellarg("/media/Files/" . htmlspecialchars(ucfirst($userData["nachname"])) . "/" . $pfad . "/" . $nameNeu));

    Das htmlspecialchars hierdrin ist Käse, einen Kontextwechsel nach HTML gibt es hier nicht. Und wo kommt $userData auf einmal her? Und wo wird sichergestellt dass in $userData['nachname'] kein ../ steht?

  • welche Anforderungen den genau?


    tk1234

    Danke für die Tipps werde es versuchen.

  • Ja die habe ich ja bereits in eine eigene Datei getan.


    aber um das zu löschen braucht er doch die variable $allefehler wo die Seiten ausgewählt sind.


    die soll ich ja anscheinend nicht mit hinzufügen.


    Ist auch egal. Ich lasse es sein.

  • Dann pack die Variable $allefehler da mit rein , mit dem Kram was hinter der Variable steht .

    Oder alle Inhalte der Variablen in ein Array packen wie ich in #20 gemacht hätte.


    Ich glaube das du ab post #6 dar nicht mehr richtig liest was hier gesagt wird , oder du verstehst es nicht was dir gesagt wird.

    Dann sag es, dann kann man dir vielleicht anders helfen , bzw. bessere Erklärung geben oder sonst was

  • Aktuell sieht es so aus:

    Was ich nun nicht verstehe, wie ich für die verschiedenen Dateien, Datenbankeinträge machen kann. Also z.B für createFolder.php oder "createUser.php".

    Weil er beim Aufrufen der Datei "verbindung.php" (Über Cronjob) Dann immer als ":seite" verbindung.php nutzt.

    Das ganzer auch beim Löschen.


    basename($_SERVER['PHP_SELF'])

  • Ich habe das Script nun soweit, das ich es in jeder Datei einbinden kann.

    Das ist ja nicht der sinn der Datei.

    Die soll ja nicht irgendwo eingebunden werden , die soll nur das machen, was du vorhast, das wurde in #6 auch schon mal gesagt;


    Zitat

    Wenn er alle 3 Stunden also nun die "verbindung.php" aufruft, denkt er ja, dass er nach einer Zeile in der Datenbank Suchen muss, wo die Spalte "seite" den Wert "verbindung.php" hat.

    Dann musst du das tauschen , mit den Date Namen, die du da normalerweise darin hast .

    Wie viele verschiedene Datei Namen können das insgesamt sein?

  • Zitat

    Weil er beim Aufrufen der Datei "verbindung.php" (Über Cronjob) Dann immer als ":seite" verbindung.php nutzt.

    Mir scheint da liegt ein Missverständnis vor: Wenn diese verbindung.php per Cronjob aufgerufen wird, besteht keine Verbindung zu einer anderen PHP-Datei und es würde keinen Sinn machen, einen anderen Namen als "verbindung.php" einzutragen, weil die Störung/in-Ordnung-Meldung ja genau durch diese Datei erkannt wird.

  • Stimmt, natürlich auch.
    Daran habe ich nicht gedacht.


    // edit

    Jetzt funktioniert crontab nicht.
    Ich wollte es als Test mal jede Minute durchlaufen lassen.


    Habe also den Befehl "crontab -e" genutzt auf meinem Raspberry PI und habe ganz unten folgendes hinzugefügt.


    /1 * * * * root /usr/bin/php /var/www/html/includes/verbindung.php


    Auch nach längerer Wartezeit ist nichts passiert.

  • Habe also den Befehl "crontab -e" genutzt auf meinem Raspberry PI und habe ganz unten folgendes hinzugefügt.


    /1 * * * * root /usr/bin/php /var/www/html/includes/verbindung.php


    Auch nach längerer Wartezeit ist nichts passiert.

    Logisch. Da zum einen ist »/1« als Angabe für die Minuten falsch, vor »/1« muss ein Bereich oder ein »*« stehen - wobei »*/1« zwar richtig, aber wenig sinnvoll ist: »*« macht das gleiche (siehe »man crontab.5«). Zudem gehört das »root« da nicht rein - zum einen soll das ganze sicher nicht als root ausgeführt werden und zum anderen gibt es in der Datei die mit »crontab -e« bearbeitet wird (im Gegensatz zu /etc/crontab) keine Spalten für den Benutzernamen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!