PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Rehcen OP´s (http://www.selfphp.de/forum/showthread.php?t=9001)

Rudolfsport 05.11.2004 14:49:44

Rehcen OP´s
 
hi,
nachdem die geschcihte mit der Datenbank nun klappt habe ihc ein letztes problem und zwar habe ich folgende 2 verschiedene Cods:

CODE 1:

PHP-Code:

<HTML>
<HEAD>
<FONT bgcolor="black" text="white" link="white" vlink="white"</FONT>
</HEAD>
<BODY>
<center>
<?PHP
ECHO "Dein Setup war:<p>";
ECHO 
"Tankinhalt: $tank <br>";
ECHO 
"Runden am Stück: ".number_format($runden,1) ." Runden<br>";
IF (
$reifen == "a")
{
$rdnzeit$runden $tank;
ECHO 
"Ihre Rundenzeit war: "number_format($rdnzeit,2) . "Minuten schnell<p>";
}
ELSE
{
$rdnzeit3$runden $tank 1.1;
$rdnzeit2 $rdnzeit3 1000;
$rdnzeit $rdnzeit2 1;
ECHO 
"Durch die weichen Reifen haben Sie einen Vorteil. <br>";
ECHO 
"Deshalb ist ihre tatsächliche Zeit: " number_format($rdnzeit,2) . " Minute schnell<p>";
}
?>
</center>
</BODY>
</HTML>

CODE 2:

PHP-Code:

<HTML>
<HEAD>
<FONT bgcolor="black" text="white" link="white" vlink="white"</FONT>
</HEAD>
<BODY>
<center>
<?PHP
ECHO "Dein Setup war:<p>";
ECHO 
"Tankinhalt: $tank <br>";
ECHO 
"Runden am Stück: ".number_format($runden,1) ." Runden<br>";
IF (
$reifen == "b")
{
$rdnzeit$runden $tank;
ECHO 
"Ihre Rundenzeit war: "number_format($rdnzeit,2) . "Minuten schnell<p>";
}
ELSE
{
$rdnzeit3$runden $tank 1.12;
$rdnzeit2 $rdnzeit3 1000;
$rdnzeit $rdnzeit2 1;
ECHO 
"Durch die Harten Reifen haben Sie einen Vorteil. <br>";
ECHO 
"Deshalb ist ihre tatsächliche Zeit: " number_format($rdnzeit,2) . " Minute schnell<p>";
}
?>
</center>
</BODY>
</HTML>

So nun sind die Rechenwerte unterschiedlich und eigentlich müsste bei dem 2.Code ein deutlich höherer WErt als beim 1.Code raus kommen.
Dem ist aber nicht so. Wo ist mein Fehler? Könnt ihr mir helfen?

xabbuh 05.11.2004 16:17:54

Re: Rehcen OP´s
 
Welche Werte haben denn $runden und $tank?
Und welche Ergebnisse erhälst du jeweils bei den beiden Codes?
Und dass der Wert beim zweiten Code wesentlich größer wird als beim ersten Wage ich dann doch mal stark zu bezweifeln, wenn du einmal mit 1,1 und einmal mit 1,12 rechnest.

Rudolfsport 05.11.2004 21:02:22

$tank ist nicht bestimmt. Man muss vorher in einem Formular eingaben, welche Menge Sprit man mitnimmt.Genauso ist es mit der Variable $runden.
Sagen wir zum Beispiel $tank = 50 ; $runden = 5

Dann bekomm ich bei Code 1 in der ersten RechenOP 50*5*1.1 = 275
275 / 1000 = 0.275
0.275 + 1 = 1.275

Rechen OP bei Code 2 mit gleichen werten = 50*5*1.12 = 280
280 / 1000 = 0.28
0.28 + 1 = 1.28

So sollte es sein, stattdessen zeigt das Programm bei beiden 250 an.

xabbuh 05.11.2004 21:12:39

Zitat:

Original geschrieben von Rudolfsport
Sagen wir zum Beispiel $tank = 50 ; $runden = 5

Dann bekomm ich bei Code 1 in der ersten RechenOP 50*5*1.1 = 275
275 / 1000 = 0.275
0.275 + 1 = 1.275

Rechen OP bei Code 2 mit gleichen werten = 50*5*1.12 = 280
280 / 1000 = 0.28
0.28 + 1 = 1.28

So sollte es sein, stattdessen zeigt das Programm bei beiden 250 an.

Da fällt mir spontan folgende Stelle in deinem Quelltext auf:
PHP-Code:

<?php
    
if($reifen == "a") {
        
$rdnzeit$runden $tank;    //  <- 50 * 5 = 250
        
echo "Ihre Rundenzeit war: "number_format($rdnzeit,2) . "Minuten schnell<p>";
    } else {
        
$rdnzeit3$runden $tank 1.1;
        
$rdnzeit2 $rdnzeit3 1000;
        
$rdnzeit $rdnzeit2 1;
        echo 
"Durch die weichen Reifen haben Sie einen Vorteil. <br>";
        echo 
"Deshalb ist ihre tatsächliche Zeit: " number_format($rdnzeit,2) . " Minute schnell<p>";
    }
?>

Also wird $reifen wohl in diesem Beispiel a sein.

Rudolfsport 06.11.2004 00:49:30

jo man hat vorher eine aus whal von 4 reifen. bei den anderen 2 gehts ja, aber hier wills nicht wirklich gehen.
Wie meinst du $reifen = a ? ja wenn er die a variante gewählt hat dann stimmt es so.
Aber den Fheler warum da nicht 275 raus kommt findeste nicht wa?

yozek 06.11.2004 01:42:40

es ist ein denkfehler...

folgender Vorschlag um dem ein Ende zu bereiten:

PHP-Code:


<?
/* Ausgabe zu Testzwecken : Start */
$runden = "5"; 
$tank = '50';
/* Ausgabe zu Testzwecken : Ende */

switch ($_GET['reifen']) {  // Ansonsten bitte das $_POST verwenden
case 'a':
    $multi = 1.1;
    $art = 'weichen ';
    break;
case 'b':
    $multi = 1.2;
    $art = 'harten ';
    break;
case 'c':
    $multi = 1.9;
    $art = 'Winter-';
    break;
case 'd':
    $multi = 1.5;
    $art = 'Regen-';
    break;
default:
    $multi = 1.0;
    $art = 'Normal-';
}

$rdnzeit= $runden * $tank * $multi;
$rdnzeit2 = $rdnzeit / 16.;
$rdnzeit = $rdnzeit2 + 1;

?>
Durch die <?=$art;?> Reifen haben Sie einen Vorteil.<br>
Deshalb ist ihre tatsächliche Zeit: <?=number_format($rdnzeit,2);?> 
Minute schnell<p>

Was mir persönlich nicht gefällt ist die Rundenzeit als solche.. Wäre es nicht besser eine Ausgabe mit Sekunden zu definieren.. ??

PHP-Code:

$rdnzeit= $runden * $tank * $multi;
$rdnzeit2 = $rdnzeit / 16.67;
$rdnzeit = $rdnzeit2 + 60;

?>
Durch die <?=$art;?> Reifen haben Sie einen Vorteil.<br>
Deshalb ist ihre tatsächliche Zeit: <?=date('i:s',$rdnzeit);?>
 <?=($rdnzeit != 60) ? 'Minuten' : 'Minute';?> schnell<p>

Desweiteren wäre es von Interesse über eine Klasse und Funktionen nachzudenken ...

HTH

Surfe lang und erfolgreich

xabbuh 06.11.2004 09:12:35

Zitat:

Original geschrieben von Rudolfsport
jo man hat vorher eine aus whal von 4 reifen. bei den anderen 2 gehts ja, aber hier wills nicht wirklich gehen.
Wie meinst du $reifen = a ? ja wenn er die a variante gewählt hat dann stimmt es so.
Aber den Fheler warum da nicht 275 raus kommt findeste nicht wa?

Doch, es wird einfach nie die Bedingung ausgeführt, mit der er 275 rausbekommen könnte, sondern immer du die Anweisung, die von der Bedingung $reifen == 'a' abhängig ist.

Rudolfsport 06.11.2004 18:37:21

danke es geht. wie sähe jetzt aber eine mindest begrenzung aus? Also man sollte mindestens 10 bei Tankfüllung eingeben und bei runde mindestens 1.
Also wenn einer bei Tankfüllung 9 eingibt, sollte dann da ein tExt kommen, der besagt, dass man so nicht fahren kann. Oder auch bei den Runden. IWe mach ich das?

yozek 06.11.2004 18:47:24

PHP-Code:

/* Min Variablen definieren */
$min_runden '10';
$min_tank '100';

/* Krass abbrechen */
if ($_POST['runden'] < $min_runden):
   die(
'Zu wenige Runden angegeben, Aufwand lohnt nicht');
endif;
if (
$_POST['tank'] < $min_tank):
   die(
'Mit leeren Tank fahren gibts noch nicht ;)');
endif; 

Das wäre eine ziemlich krasse Lösung...


Eine Empfehlung wäre per Redirect Befehl nochmal die Seite aufzurufen, wo die Werte angegeben werden und die falsch eingegebenen Werte nocheinmal rot erscheinen zu lassen.

Wenn du viel mit Formfeldern arbeitest, kann ich dir HTML_QUICKFORM von PEAR empfehlen..

HTH

Gruß

Rudolfsport 06.11.2004 21:55:48

hm. ber nun zeigt es nurnoch die fehlermeldung an. egal was ich eingaebe.

PHP-Code:

<HTML>
<BODY>
<center>
<?
/* Min Variablen definieren */
$min_runden = '1';
$min_tank = '10';
/* Krass abbrechen */
if ($_POST['runden'] < $min_runden):
   die('Zu wenige Runden angegeben');
endif;
if ($_POST['tank'] < $min_tank):
   die('Zuwenig Sprit im Tank');
endif;
/* Min Variablen definieren */
$max_runden = '20';
$max_tank = '100';

/* Krass abbrechen */
if ($_POST['runden'] > $max_runden):
   die('Zuviele Runden angegeben');
endif;
if ($_POST['tank'] > $max_tank):
   die('Der Tank ist überfüllt');
endif;
switch ($_GET['reifen']) {  // Ansonsten bitte das $_POST verwenden
case 'a':
    $multi = 1.1;
    $art = 'weichen';
    break;
case 'b':
    $multi = 1.12;
    $art = 'harten';
    break;
case 'c':
    $multi = 1.3;
    $art = 'intermediate';
    break;
default:
    $multi = 1.5;
    $art = 'regen';
}

$rdnzeit= $runden * $tank * $multi;
$rdnzeit2 = $rdnzeit / 1000.;
$rdnzeit = $rdnzeit2 + 1;
?>
Durch die <?=$art;?> Reifen haben Sie einen Vorteil.<br>
Deshalb ist ihre tatsächliche Zeit: <?=number_format($rdnzeit,2);?> 
Minuten schnell
</center>
</BODY>
</HTML>



Alle Zeitangaben in WEZ +2. Es ist jetzt 09:08:07 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.