App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
[PHP] unvorstelles Problem mit if-Anweisung
- Ersteller ViruZ
- Erstellt am
ViruZ
Commander
Hi,
ich überprüfe bevor ich etwas in der Datenbank ändere nochmal ob die Daten stimmen:
Leider geht das auf vielen Rechnern aber nicht auf allen! Bei manchen geht es nicht. Und
wenn ich auf einem Rechner auf dem es nicht geht, die Seite mit meinem Laptop als Server öffne dann geht es... im Internet aber nicht!
Wenn ich
rausnehme dann geht es plötzlich auf allen PC`s...
WARUM?!
Vielen Dank
mfG ViruZ
ich überprüfe bevor ich etwas in der Datenbank ändere nochmal ob die Daten stimmen:
Code:
if($user['geld']>=$kosten && $baut['baut'] == '0')
Leider geht das auf vielen Rechnern aber nicht auf allen! Bei manchen geht es nicht. Und
wenn ich auf einem Rechner auf dem es nicht geht, die Seite mit meinem Laptop als Server öffne dann geht es... im Internet aber nicht!
Wenn ich
Code:
$user['geld']>=$kosten
WARUM?!
Vielen Dank
mfG ViruZ
Zuletzt bearbeitet:
AndyK
Vice Admiral Special
- Mitglied seit
- 07.01.2006
- Beiträge
- 758
- Renomée
- 18
- Prozessor
- Ryzen 5 3600
- Mainboard
- Gigabyte B550M S2H
- Kühlung
- boxed Kühler
- Speicher
- 32GB Patriot Viper 4 rot DDR4-3200 DIMM CL16 Dual Kit
- Grafikprozessor
- MSI NVIDIA GeForce GTX 960 4GB
- Display
- LG 22EA63 (22", Full HD)
- SSD
- 1000GB Kingston SA2000M8 1000G M.2 2280 PCIe 3.0 x4 NVMe
- HDD
- Hitachi Deskstar (HDS5C3020BLE630) 2TB, Sata-III 6Gb/s
- Optisches Laufwerk
- HL-DT-ST DVDRAM GH24NSB0
- Soundkarte
- Realtek ALC887 (OnBoard)
- Gehäuse
- Sharkoon VS3-V Midi Tower
- Netzteil
- 430 Watt Corsair CX Series Modular 80+ Bronze
- Tastatur
- Cherry G230
- Maus
- Logitech MX518
- Betriebssystem
- Windows 10 Home 64Bit
- Webbrowser
- Firefox, Chrome
- Internetanbindung
-
▼200 MBit
▲10 MBit
Bist Du Dir ständig im klaren darüber was in der Variable $kosten drinsteht?
Was ist, wenn die Variable $kosten leer ist, oder ein leerer String ($kosten = "") ist?
Besser ist es da, dann mit einer explizten Typwandlung zu arbeiten:
Wobei auch da frage ich mich, warum Du bei der Varible $baut['baut'] auf einen String vergleichst und nicht auf den Zahlenwert 0:
Wenn es unerheblich ist, ob $baut['baut'] gleich 0 ist oder auch gleich false ist, dann kannst Du es so stehen lassen.
Ansonsten:
Mit den 3 Gleicheitszeichen wird der Vergleich nur wahr, wenn $baut['baut'] wirklich den Zahlenwert 0 hat, aber unwahr, wenn $baut['baut'] = false ist.
AndyK
Was ist, wenn die Variable $kosten leer ist, oder ein leerer String ($kosten = "") ist?
Besser ist es da, dann mit einer explizten Typwandlung zu arbeiten:
PHP:
if(floatval($user['geld']) >= floatval($kosten) && $baut['baut'] == '0')
PHP:
if(floatval($user['geld']) >= floatval($kosten) && $baut['baut'] == 0)
Wenn es unerheblich ist, ob $baut['baut'] gleich 0 ist oder auch gleich false ist, dann kannst Du es so stehen lassen.
Ansonsten:
PHP:
if(floatval($user['geld']) >= floatval($kosten) && $baut['baut'] === 0)
AndyK
ViruZ
Commander
In Kosten steht definitiv immer was drin! Mit deinem Tipp geht es auf garkeinem PC mehr...
Aber warum geht es auf PC`s bei denen es im Internet nicht geht, wenn sie meinen Laptop als Server nehmen?
Ich versteh das nicht...
mfG ViruZ
Aber warum geht es auf PC`s bei denen es im Internet nicht geht, wenn sie meinen Laptop als Server nehmen?
Ich versteh das nicht...
mfG ViruZ
Antarctica
Grand Admiral Special
- Mitglied seit
- 11.09.2004
- Beiträge
- 2.444
- Renomée
- 34
- Standort
- Kupferstadt Stolberg
- Mein Laptop
- HP 625, V140, 4GB RAM, 32GB SSD, Ubuntu 15.04 (WT279EA)
- Prozessor
- Intel Core i5-4690, 4x 3.50GHz, boxed (BX80646I54690)
- Mainboard
- ASRock H97M Pro4 (90-MXGTA0-A0UAYZ)
- Kühlung
- Scythe Big Shuriken 2 Rev. B (SCBSK-2100)
- Speicher
- 2x Exceleram Black and White 8GB PC3-12800 DDR3-1600 Kit (EBW301A)
- Grafikprozessor
- Gigabyte GeForce GTX 750 Ti OC low profile, 2GB GDDR5, DVI, 2x HDMI, DisplayPort (GV-N75TOC-2GL)
- Display
- Samsung SyncMaster T24A350, 24" (LT24A350EW)
- SSD
- Samsung SSD 960 EVO 500GB, PCIe (MZ-V6E500BW)
- HDD
- 2x Seagate GoFlex Desk 3TB, USB 3.0 (STAC3000201/STAC3000202)
- Optisches Laufwerk
- Samsung SH-224BB schwarz, SATA, retail (SH-224BB/RSMS)
- Soundkarte
- on-board
- Gehäuse
- Inter-Tech IT-5908
- Netzteil
- be quiet! System Power S6 80Plus 300W ATX 2.2 (S6-SYS-UA-300W/BN080)
- Betriebssystem
- Microsoft: Windows 10 Pro 64Bit, DSP/SB (deutsch) (PC) (FQC-08922)
- Webbrowser
- Mozilla Firefox
Poste mal was mehr Code, damit wir dir helfen können. Das Problem liegt wahrscheinlich eher im Bereich HTML (z.B. method="get" vergessen), PHP-Optionen (z.B. register_globals) oder so was, und nicht am Code selbst.
AndyK
Vice Admiral Special
- Mitglied seit
- 07.01.2006
- Beiträge
- 758
- Renomée
- 18
- Prozessor
- Ryzen 5 3600
- Mainboard
- Gigabyte B550M S2H
- Kühlung
- boxed Kühler
- Speicher
- 32GB Patriot Viper 4 rot DDR4-3200 DIMM CL16 Dual Kit
- Grafikprozessor
- MSI NVIDIA GeForce GTX 960 4GB
- Display
- LG 22EA63 (22", Full HD)
- SSD
- 1000GB Kingston SA2000M8 1000G M.2 2280 PCIe 3.0 x4 NVMe
- HDD
- Hitachi Deskstar (HDS5C3020BLE630) 2TB, Sata-III 6Gb/s
- Optisches Laufwerk
- HL-DT-ST DVDRAM GH24NSB0
- Soundkarte
- Realtek ALC887 (OnBoard)
- Gehäuse
- Sharkoon VS3-V Midi Tower
- Netzteil
- 430 Watt Corsair CX Series Modular 80+ Bronze
- Tastatur
- Cherry G230
- Maus
- Logitech MX518
- Betriebssystem
- Windows 10 Home 64Bit
- Webbrowser
- Firefox, Chrome
- Internetanbindung
-
▼200 MBit
▲10 MBit
In Kosten steht definitiv immer was drin! Mit deinem Tipp geht es auf garkeinem PC mehr...
Aber warum geht es auf PC`s bei denen es im Internet nicht geht, wenn sie meinen Laptop als Server nehmen?
Ich versteh das nicht...
mfG ViruZ
Die Frage ist jetzt:
Liegt es an $user['geld']? Ist der Betrag vielleicht inklusive Währungszeichen in der Tabelle abgespeichert? Also ein String? Zahlenwerte (Geld, Prozent, etc.) sollte man in einer Tabelle immer als Zahl (int oder float/double) ablegen und nie als String.
Was ist mit der Variable $kosten? Enthält die ebenfalls nur den Zahlenwert, oder auch ein Währungssymbol?
Was stellt die Variable $baut['baut'] dar? Soll sie nur ein Trigger (Bool-Wert) sein, ob jemand schon baut, bzw. bauen darf, oder steckt da mehr hinter? Welche Werte kann diese Variable annehmen? Wie ist sie in der Datenbank/Tabelle definiert?
Etwas mehr Code könnte wirklich hilfreich sein.
AndyK
ViruZ
Commander
soo.. hier der Code:
Das ist die komplette Funktion zum Bauen einer Werkstatt in einem Browsergame... (http://schuestel.uttx.net)
$user['geld']:
Die Daten werden im Format int in der Datenbank gespeichert. (Ohne € oder ähnliches)
$kosten:
Enthält ebenfalls nur nur einen Zahlenwert. meist double.
$baut['baut']:
Darin steht 0 wenn der Spieler nichts baut bzw. die ID des Gebäudes was gebaut wird. Das ist in der Datenbank als int definiert.
Vielen Dank
mfG
Code:
$haus_id=$_GET['id'];
//Abfrage von Geld des Spielers
$abfrage = "SELECT
geld,punkte
FROM
user
WHERE
ID = '".$_SESSION['ID']."'";
$ergebnis = mysql_query($abfrage);
$user = mysql_fetch_assoc($ergebnis);
//Abfrage von Preis des Gebäudes
$abfrage = "SELECT
preis,zeit,preis_faktor,zeit_faktor
FROM
werkstatt
WHERE
id = '$haus_id'";
$ergebnis = mysql_query($abfrage) OR die(mysql_error());
$haus = mysql_fetch_assoc($ergebnis);
//Abfrage ob Spieler baut
$abfrage = "SELECT
baut,werkstatt,endzeit
FROM
spieler_haus
WHERE
id = '".$_SESSION['ID']."'";
$ergebnis = mysql_query($abfrage);
$baut = mysql_fetch_assoc($ergebnis);
$kosten=$haus['preis']*($haus['preis_faktor']*$baut['werkstatt']+1);
echo "geld:".$user['geld']." ksoten:$kosten";
//Test ob genug Geld für das Gebäude da ist
if($user['geld'] >= $kosten && $baut['baut'] == 0)
{
//Berechnung des neuen Kontostandes
$geld_neu = $user['geld'] - $kosten;
//Neues Kontostand updaten
$aendern = "UPDATE user Set geld = '$geld_neu' WHERE id = '".$_SESSION['ID']."'";
$update = mysql_query($aendern) OR die(mysql_error());
//Endzeit berechnen
$zeit=$haus['zeit']*($haus['zeit_faktor']*$baut['werkstatt']+1);
$endzeit=$zeit+$akt_sek;
//Startzeit updaten
$aendern = "UPDATE spieler_haus Set startzeit = '$akt_sek' WHERE id = '".$_SESSION['ID']."'";
$update = mysql_query($aendern) OR die(mysql_error());
//Endezeit updaten
$aendern = "UPDATE spieler_haus Set endzeit = '$endzeit' WHERE id = '".$_SESSION['ID']."'";
$update = mysql_query($aendern) OR die(mysql_error());
//Bauendes Gebäude updaten
$aendern = "UPDATE spieler_haus Set baut = '99999' WHERE id = '".$_SESSION['ID']."'";
$update = mysql_query($aendern) OR die(mysql_error());
//Punktestand ändern
$punkte2=($kosten/100)+$user['punkte'];
//Punktestand updaten
$aendern = "UPDATE user SET punkte = '$punkte2' WHERE id = '".$_SESSION['ID']."'";
$update = mysql_query($aendern) OR die(mysql_error());
//Werkstatttyp updaten
$aendern = "UPDATE user Set werkstatt_typ = '$haus_id' WHERE id = '".$_SESSION['ID']."'";
$update = mysql_query($aendern) OR die(mysql_error());
}
Das ist die komplette Funktion zum Bauen einer Werkstatt in einem Browsergame... (http://schuestel.uttx.net)
$user['geld']:
Die Daten werden im Format int in der Datenbank gespeichert. (Ohne € oder ähnliches)
$kosten:
Enthält ebenfalls nur nur einen Zahlenwert. meist double.
$baut['baut']:
Darin steht 0 wenn der Spieler nichts baut bzw. die ID des Gebäudes was gebaut wird. Das ist in der Datenbank als int definiert.
Vielen Dank
mfG
AndyK
Vice Admiral Special
- Mitglied seit
- 07.01.2006
- Beiträge
- 758
- Renomée
- 18
- Prozessor
- Ryzen 5 3600
- Mainboard
- Gigabyte B550M S2H
- Kühlung
- boxed Kühler
- Speicher
- 32GB Patriot Viper 4 rot DDR4-3200 DIMM CL16 Dual Kit
- Grafikprozessor
- MSI NVIDIA GeForce GTX 960 4GB
- Display
- LG 22EA63 (22", Full HD)
- SSD
- 1000GB Kingston SA2000M8 1000G M.2 2280 PCIe 3.0 x4 NVMe
- HDD
- Hitachi Deskstar (HDS5C3020BLE630) 2TB, Sata-III 6Gb/s
- Optisches Laufwerk
- HL-DT-ST DVDRAM GH24NSB0
- Soundkarte
- Realtek ALC887 (OnBoard)
- Gehäuse
- Sharkoon VS3-V Midi Tower
- Netzteil
- 430 Watt Corsair CX Series Modular 80+ Bronze
- Tastatur
- Cherry G230
- Maus
- Logitech MX518
- Betriebssystem
- Windows 10 Home 64Bit
- Webbrowser
- Firefox, Chrome
- Internetanbindung
-
▼200 MBit
▲10 MBit
ok, supi!
Mit den Informationen kann ich gut was anfangen, ich schau mir das mal etwas genauer an...
AndyK
Edit1:
Du hast in einer Zeile stehen:
ist nicht wichtig für die Berechnung, aber stimmt ksoten:$kosten wirklich?
Edit2:
Ich würde dann mal folgende if nehmen:
Es müsste aber auch mit drei Gleichheitszeichen bei && $baut['baut'] === 0 funktionieren, wenn das Feld in der Tabelle mit INT NOT NULL definiert wurde. Ansonsten muss Du explizit auch auf NULL-Werte prüfen! Das gilt übrigens auch für $user['geld'] !!
Bei den weiteren Berechnungen kann man sich die Typenumwandlung sparen, da php die Typen dynamisch wandelt. Nur bei Vergleichen (und bei NULL-Werten!!!!) muss man explizit drauf achten.
Edit3:
Und hier würde ich wieder auf int gehen, da Du sagtest $kosten kann double sein, $user['geld'] ist aber als int definiert:
AndyK
Mit den Informationen kann ich gut was anfangen, ich schau mir das mal etwas genauer an...
AndyK
Edit1:
Du hast in einer Zeile stehen:
PHP:
echo "geld:".$user['geld']." ksoten:$kosten";
Edit2:
Ich würde dann mal folgende if nehmen:
PHP:
if(doubleval($user['geld']) >= doubleval($kosten) && $baut['baut'] == 0
Bei den weiteren Berechnungen kann man sich die Typenumwandlung sparen, da php die Typen dynamisch wandelt. Nur bei Vergleichen (und bei NULL-Werten!!!!) muss man explizit drauf achten.
Edit3:
Und hier würde ich wieder auf int gehen, da Du sagtest $kosten kann double sein, $user['geld'] ist aber als int definiert:
PHP:
$aendern = "UPDATE user Set geld = '".intval($geld_neu)."' WHERE id = '".$_SESSION['ID']."'";
AndyK
Zuletzt bearbeitet:
ViruZ
Commander
Hi,
ich meinen Fehler gefunden...
Die Anweisung hat so funktioniert wie sie sollte -> da ein Fehler in der Datenbank war (er hatte noch nix gebaut aber schon angeblich die 5. Stufe) -> es wird der 5 fache Baupreis verlangt -> er lässt den Bau nicht zu... ich frage mich nur wie die 5 da rein kam!!
Danke trotzdem...
mfG ViruZ
ich meinen Fehler gefunden...
Die Anweisung hat so funktioniert wie sie sollte -> da ein Fehler in der Datenbank war (er hatte noch nix gebaut aber schon angeblich die 5. Stufe) -> es wird der 5 fache Baupreis verlangt -> er lässt den Bau nicht zu... ich frage mich nur wie die 5 da rein kam!!
Danke trotzdem...
mfG ViruZ
Ähnliche Themen
- Antworten
- 1
- Aufrufe
- 538
- Antworten
- 38
- Aufrufe
- 6K
- Antworten
- 12
- Aufrufe
- 3K
- Antworten
- 9
- Aufrufe
- 2K