Alternativ zu deinem SQL-Armageddon: http://redbeanphp.com/
Ankündigung
Einklappen
Keine Ankündigung bisher.
Gebäude_bau Ablauf
Einklappen
Neue Werbung 2019
Einklappen
X
-
[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].
-
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
-
*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
-
$db_connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);Competence-Center -> Enjoy the Informatrix
PHProcks! • Einsteiger freundliche Tutorials • PreComposed Packages
Kommentar
-
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 obPHP-Code:$rest > 0
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 = 4 ;
$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 !";
}
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
-
Zitat von Ascalon Beitrag anzeigenich hab doch eine if in der geprüft werden soll obPHP-Code:$rest > 0
PHP-Code:$rest = $saegewerk_bauzeit - $aktuelle_zeit;
if ($rest < 0)
{
[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
-
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
-
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
-
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 inPHP-Code:mysql
PHP-Code:mysqli
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ä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();
?>
PHP-Code:
Server Version: 5.5.33a-MariaDB
-- PHP-Version: 5.5.5
--
-- Tabellenstruktur für Tabelle `rohstoff_gebaeude`
--
CREATE TABLE IF NOT EXISTS `rohstoff_gebaeude` (
`id` int(11) NOT NULL,
`saegewerk_gesamt` int(15) NOT NULL,
`endbauzeit` int(11) NOT 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
-
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();
[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
Kommentar