Ankündigung

Einklappen
Keine Ankündigung bisher.

Gebäude_bau Ablauf

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Alternativ zu deinem SQL-Armageddon: http://redbeanphp.com/
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #17
      Ich danke euch, habe meinen Fehler endlich endeckt ( nach fast 2 tagen ^^ )

      Habe meine Statments falsch geschlossen und dadurch ist das System ins drudeln gekommen .

      Muss jetzt nur noch regeln, das nach der abgelaufenen Zeit die vom User in Auftrag gegebenen Gebäude zu den gesamt dazu gerechnet wird aber sonst läuft es wunderbar.

      Wenn das Script komplett ist, werde ich es hier posten

      Kommentar


      • #18
        *auf RedBeans zeig*
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #19
          $db_connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
          Nur der Vollständigkeit halber, der TE verwendet mysqli
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #20
            ich kann machen was ich will aber es funktioniert troz dem nicht wie ich es will

            ... ich bin soweit, das nach dem ich einen auftrag gebe, die in dem fall 30 sekunden runter laufen nur das problem ist, die gebäude werden nicht erst nach ablauf der zeit dazu genommen, sondern schon am anfang direkt nach bestätigung des auftrag´s und ich bekomme es einfach nicht gelöst.

            ich hab doch eine if in der geprüft werden soll ob
            PHP-Code:
            $rest 
            ist, warum wird dann vorher schon das zeug innerhalb des if´s ausgeführt ? .. versteh ich absolut nicht und komme da auch gerade nicht mehr klar mit.
            3 geschlagene tage bin ich an dieser einen sache nun dran und mir kommt bald die galle zum hals raus ^^ .. ich habe doch einen logischen ablauf drin und weiß nicht was da schief läuft

            PHP-Code:
            <?php

            error_reporting
            (E_ALL);
            ini_set('display_errors'1);

            require_once (
            "../db_config.php");

            $id ;

            $sub_button = isset($_POST['submit']);
            $saegewerk_anzahl = isset($_POST['saegewerk']) ? ($_POST['saegewerk']) : false;
            $getreidefarm_anzahl = isset($_POST['getreidefarm']) ? trim($_POST['getreidefarm']) : false;

            $aktuelle_zeit time();
            $saegewerk_bau_zeit $aktuelle_zeit 30;




            $check_bauzeit = <<<SQL
            SELECT
                `saegewerk_bauzeit`
            FROM
                `rohstoff_gebaeude`
            WHERE
                `id` = 
            $id
            SQL;


            $set_bauzeit = <<<SQL
            REPLACE INTO
                `rohstoff_gebaeude`
                    (`id` , `saegewerk_auftrag` , `saegewerk_bauzeit`)
            VALUES
                (? , ? , ? )
            SQL;


            $check_gesamt = <<<SQL
            SELECT
                `saegewerk_gesamt`
            FROM
                `gebaeude_gesamt`
            WHERE
                `id` = 
            $id
            SQL;

            $check_auftrag = <<<SQL
            SELECT
                `saegewerk_auftrag`
            FROM
                `rohstoff_gebaeude`
            WHERE
                `id` = 
            $id
            SQL;


            $gesamt = <<<SQL
            REPLACE INTO
                `gebaeude_gesamt`
                    (`id` , `saegewerk_gesamt`)
            VALUES
                (? , ?)
            SQL;



            $check_saegwerk_bauzeit $db_connect->prepare($check_bauzeit);
            $check_saegwerk_bauzeit->execute();
            $check_saegwerk_bauzeit->bind_result($saegewerk_bauzeit);
            $check_saegwerk_bauzeit->fetch();
            $check_saegwerk_bauzeit->close();

            if(
            $saegewerk_bauzeit $aktuelle_zeit)
            {
                if(
            $sub_button || $saegewerk_anzahl)
                {
                    
            $setze_bauzeit $db_connect->prepare($set_bauzeit);
                    
            $setze_bauzeit->bind_param('iii' $id $saegewerk_anzahl $saegewerk_bau_zeit);
                    
            $setze_bauzeit->execute();
                    
            $setze_bauzeit->close();

                        
            $rest $saegewerk_bauzeit $aktuelle_zeit;

                        if (
            $rest 0)
                        {
                            
            $auftrag_saegewerk $db_connect->prepare($check_auftrag);
                            
            $auftrag_saegewerk->execute();
                            
            $auftrag_saegewerk->bind_result($saegewerk_auftrag);
                            
            $auftrag_saegewerk->fetch();
                            
            $auftrag_saegewerk->close();


                            
            $gesamt_saegewerk $db_connect->prepare($check_gesamt);
                            
            $gesamt_saegewerk->execute();
                            
            $gesamt_saegewerk->bind_result($saegewerk_user);
                            
            $gesamt_saegewerk->fetch();
                            
            $gesamt_saegewerk->close();

                                
            $saegewerke $saegewerk_auftrag $saegewerk_user;

                                
            $saegewerk_gesamt $db_connect->prepare($gesamt);
                                
            $saegewerk_gesamt->bind_param('ii' $id $saegewerke);
                                
            $saegewerk_gesamt->execute();
                                
            $saegewerk_gesamt->close();
                        }

                 }


            }
            else
            {
                echo  
            "Derzeit ist ein Auftag am laufen !";
            }
            bis auf diese eine sache läuft alles wie es soll, ich habe nun schon so oft das script umgeschrieben mittlerweile für die gesamt_gebaeude auch eine eigene tabelle angelegt... ich hab keinen plan mehr, wisst ihr nicht was es ist ?

            eins ist sicher.. die prepare statments habe ich nun lang und schmutzig geübt.. die kenne ich jetzt ausm ff ^^

            wenn ihr mal schaun wollt, habe einen test acc angelegt

            http://starkstrom.bplaced.net/forum/...n_formular.php

            Username: test
            Passwort: 000

            Kommentar


            • #21
              Zitat von Ascalon Beitrag anzeigen
              ich hab doch eine if in der geprüft werden soll ob
              PHP-Code:
              $rest 
              ist,


              PHP-Code:
                          $rest $saegewerk_bauzeit $aktuelle_zeit;

                          if (
              $rest 0)
                          { 
              Den Pfeil evtl falsch gesetzt?
              [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
              [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

              Kommentar


              • #22
                Arbeite mit Timestamps und Rangechecks ( in der DB ).

                Du kannst auch massig code sparen wenn du das von mir verlinkte simple ORM nutzt.
                [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                Kommentar


                • #23
                  hab nochmal darüber nachgedacht und möchte das ganze nun mit der funktion datetime lösen, sollte doch gehen oder ?.. kann ja mittels datetime die startzeit und in der anderen spalte die endzeit eintragen und die miteinander abgleichen ?

                  wenn ja, könntet ihr mir vll nur eben zeigen, wie man die datetime im einfachen format so schreibt, daß man sie für die datenbank nutzen kann ? ( habe schon einiges rumgestöbert, nur überall wird was anderes gesagt / geschrieben ) da blickt man nicht durch

                  .. würde dann die endbauzeit mit DATE_ADD ('now' , + INTERVAL ) regeln wollen.

                  ist das so umsetzbar und nicht zu kompliziert ?

                  ganz kurz ein format mit datetime und damit verbunden dann mit dem DATE_ADD wäre echt lieb von euch, dann kann ich weiter üben und muss nicht wieder tage an der selben sache hocken

                  Kommentar


                  • #24
                    Leute, an was liegt es denn, daß nach dem Bau das Updaten und zurück setzen der Bauzeit nicht geht ?

                    Ich habe nun schon das ganze mal in
                    PHP-Code:
                    mysql 
                    geschrieben und da funktioniert es aber ich kann mir nicht erklären, warum es bei mir mit
                    PHP-Code:
                    mysqli 
                    nicht klappt.

                    Es geht nur noch um das Updaten der vom User eingegebene Gebäude auf die Gesamt Gebäude und die Bauzeit auf 0 zu setzen nur funktioniert es nicht egal was ich probiert habe.

                    So schwer kann es doch nicht sein und der Ablauf müsste ja stimmen, was mir an Fehler schon aufgefallen ist, daß ich in den vorherigen Script´s den Start und das Ende ( also auch das Updaten ) in einem if Block geschrieben hatte, was ja nicht gehen kann.

                    Nun hab ich das ganze getrennt aber es funktioniert trozdem nicht.

                    Der erste Block wird wunderbar ausgeführt, nach eingeben der Gebäudeanzahl wird geprüft ob bereits etwas im Bau ist wenn nicht, wird die Bauzeit in die Tabelle eingetragen und die 20 Sekunden laufen runter ( in dieser Zeit kann auch wirklich kein neuer Auftrag erteilt werden ) .

                    Nur wenn die ausgegebene Restzeit abgelaufen ist, passiert nichts weiter außer das die Restzeit ins minus rein läuft. Ich habe einfach keinen Plan mehr und verstehe es einfach nicht. Hab schon soviel kleine Testscripts geschrieben ( jetzt ohne solchen Ablauf ) die funktionierten alle, nur das eben nicht.

                    Langsam zweifel ich an mir, da ich mir nicht erklären kann woran es liegt.
                    Habe es nun auch schon mit der DateTime Funktion probiert aber auch da wird am Ende nicht geupdatet

                    PHP-Code:
                    <?php

                    $id 
                    2;

                    error_reporting(E_ALL);
                    ini_set('display_errors'1);

                    require_once (
                    "../db_config.php");

                    $sub_button = isset($_POST['submit']);
                    $auftrag_saegewerk = isset($_POST['saegewerk']) ? trim($_POST['saegewerk']) : false ;

                    $aktuelle_zeit time();
                    $bauzeit time()+20;


                    $saegwerk_zeit "SELECT `endbauzeit` FROM `rohstoff_gebaeude` WHERE id = $id";

                    $stmt $db_connect->prepare($saegwerk_zeit);
                    $stmt->execute();
                    $stmt->bind_result($start);
                    $stmt->fetch();
                    $stmt->close();


                    if (
                    $start $aktuelle_zeit)
                    {
                        if (
                    $sub_button || $auftrag_saegewerk)
                        {
                            
                    $saegewerk_bau "REPLACE INTO `rohstoff_gebaeude` (`id` , `endbauzeit`) VALUES (? ,?)";

                            
                    $stmt $db_connect->prepare($saegewerk_bau);
                            
                    $stmt->bind_param('ii' $id $bauzeit);
                            
                    $stmt->execute();
                            
                    $stmt->close();
                        }
                    }
                    else
                    {
                        
                    $error_msg_gebaeude "Es befindet sich bereits ein Geb&auml;ude im Bau !";
                    }



                    $saegewerk_bauzeit "SELECT `endbauzeit` FROM `rohstoff_gebaeude` WHERE id = $id";

                    $rest $db_connect->prepare($saegewerk_bauzeit);
                    $rest->execute();
                    $rest->bind_result($rest_zeit);
                    $rest->fetch();
                    $rest->close();

                    $rest_bauzeit $start $aktuelle_zeit;
                    echo 
                    $rest_bauzeit;



                    if (
                    $rest_bauzeit 0)
                    {

                        
                    $saegewerk_fertig "UPDATE `rohstoff_gebaeude` SET `saegewerk_gesamt` = ? AND `endbauzeit` = 0 WHERE id = $id";

                        
                    $stmt $db_connect->prepare($saegewerk_fertig);
                        
                    $stmt->bind_param('i' $auftrag_saegewerk);
                        
                    $stmt->execute();
                        
                    $stmt->close();
                    }

                    $db_connect->close();


                    ?>
                    Das ist die dazu gehörige Tabelle:

                    PHP-Code:

                    Server Version
                    5.5.33a-MariaDB
                    -- PHP-Version5.5.5



                    --
                    -- 
                    Tabellenstruktur für Tabelle `rohstoff_gebaeude`
                    --

                    CREATE TABLE IF NOT EXISTS `rohstoff_gebaeude` (
                      `
                    idint(11NOT NULL,
                      `
                    saegewerk_gesamtint(15NOT NULL,
                      `
                    endbauzeitint(11NOT NULL,
                      
                    PRIMARY KEY (`id`)
                    ENGINE=InnoDB DEFAULT CHARSET=latin1;

                    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
                    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
                    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */

                    Kommentar


                    • #25
                      PHP-Code:
                      $saegwerk_zeit "SELECT `endbauzeit` FROM `rohstoff_gebaeude` WHERE id = $id"// <- SQL Injection und so

                      $stmt $db_connect->prepare($saegwerk_zeit);
                      $stmt->execute();
                      $stmt->bind_result($start);
                      $stmt->fetch();
                      $stmt->close(); 
                      Geh das mal mit Debugging an, lass dir die betroffenen rows zurückgeben.
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar

                      Lädt...
                      X