Programmieren mit php und mySQL (Entscheidungen, Teil 2) - Guru 2.0
Programmieren mit php und mySQL (Entscheidungen, Teil 2)

Programmieren mit php und mySQL (Entscheidungen, Teil 2)

Nachdem Du dich im vorhergehenden Teil mit der if-else-Anweisung beschäftigt hast, gab es eine Hausübung. Diese war ein wenig aufwendig, denn Du kennst noch nicht alle Möglichkeiten, welche php in diesem Bereich bietet. Diese werden wir in diesem Teil kennenlernen. Aber schauen wir uns zuerst die Lösungen der Hausaufgabe an.
Da der Code jetzt immer komplizierter und länger wird und der Platz in meinem Blog einfach eingeschränkt ist, hier ein kleiner Hinweis. kleiner_Baum (Danke!) hat mich darauf hingewiesen. Durch die Formatierung und die automatischen Zeilenumbrüche mit dem grünen Pfeil, kann es sein, dass die Darstellung unübersichtlich wird. Doch dazu habe ich eine Lösung: Sobald der Mauszeiger im Fenster mit dem SourceCode steht, erscheint rechts oben eine kleine Symbolleiste. Dort kannst Du mit dem ersten Knopf ein PopUp-Fenster (Achtung auf Deinen PopUp-Blocker) mit dem unformatierten SourceCode einblenden. Mit dem zweiten Symbol kannst Du den Code in die Zwischenablage kopiere und der dritte Knopf druckt den SourceCode unformatiert aus. Ich hoffe das hilft Dir beim weiteren Verfolgen des Kurses.

Lösung zu Übung 2.4

Hier die Lösung zur Hausübung Übung 2.4. Hier solltest Du die Ausgabe der Bewertung auf drei Antworten erweitern. Die entscheidenden Zeilen sind wieder grün hervorgehoben.

[php highlight=”32,33,34,35,36,37,38,39,40,41,42,43″]<?php
/******************
* Berechnung des Verbrauchs eines Autos auf 100km
* mit formatierten Zahlen
* Dateiname: uebung_2_4.php
* Funktion: Durchschnittsverbrauch berechnen
* erstellt am: 18. Mai 2009, 13:51
* Copyright: Clemens Gull
*/
//Basiswerte festlegen
$kmGefahren = 852.4;
$tankFuellung = 39.72;
$preisLiter = 0.972;
$normVerbrauch = 4.8;

//Berechnung durchfuehren
$verbrauch = $tankFuellung / ($kmGefahren /100);
$kosten = number_format($verbrauch * $preisLiter, 3, ",", ".");

//Ausgabe der Basiswerte
echo "<p>Basiswerte:<br />".
"gefahrene Kilometer: ".number_format($kmGefahren, 3, ",", ".")."<br />".
"getankte Liter: ".number_format($tankFuellung, 3, ",", ".")."<br />".
"Preis/Liter: ".number_format($preisLiter, 3, ",", ".")." Euro</p>";

//Ausgabe der Resultate
echo "<p>Ergebnisse:<br />".
"Durschnittsverbrauch: ".number_format($verbrauch, 3, ",", ".")." Liter<br />".
"Kosten pro 100 km: ".$kosten." Euro</p>";

//Bewertung ausgeben
if ($verbrauch > $normVerbrauch) {
$mehrVerbrauch = number_format(($verbrauch – $normVerbrauch), 2, ",", ".");
echo "Bewertung:<br />Du hast um ".$mehrVerbrauch.
" Liter mehr verbraucht, als normal!";
} else {
if ($verbrauch == $normVerbrauch) {
echo "Bewertung:<br />Du liegst genau im Normalverbrauch!";
} else {
$mehrVerbrauch = number_format(($normVerbrauch – $verbrauch), 2, ",", ".");
echo "Bewertung:<br />Du hast um ".$mehrVerbrauch.
" Liter weniger verbraucht, als normal!";
}
}
?>[/php]

Lösung zu Übung 2.5

Hier die Lösung zum zweiten Teil der Hausübung. In dieser Übung solltest Du eine Erweiterung der Bewertung des Fahrverhaltens ausgeben.

[php highlight=”18,37,38,39,48,49,50″]<?php
/******************
* Berechnung des Verbrauchs eines Autos auf 100km
* mit formatierten Zahlen
* Dateiname: uebung_2_5.php
* Funktion: Durchschnittsverbrauch berechnen
* erstellt am: 18. Mai 2009, 13:53
* Copyright: Clemens Gull
*/
//Basiswerte festlegen
$kmGefahren = 852.4;
$tankFuellung = 39.72;
$preisLiter = 0.972;
$normVerbrauch = 4.6;

//Berechnung durchfuehren
$verbrauch = $tankFuellung / ($kmGefahren /100);
$kosten = number_format($verbrauch * $preisLiter, 3, ",", ".");

//Ausgabe der Basiswerte
echo "<p>Basiswerte:<br />".
"gefahrene Kilometer: ".number_format($kmGefahren, 3, ",", ".")."<br />".
"getankte Liter: ".number_format($tankFuellung, 3, ",", ".")."<br />".
"Preis/Liter: ".number_format($preisLiter, 3, ",", ".")." Euro</p>";

//Ausgabe der Resultate
echo "<p>Ergebnisse:<br />".
"Durschnittsverbrauch: ".number_format($verbrauch, 3, ",", ".")." Liter<br />".
"Kosten pro 100 km: ".$kosten." Euro</p>";

//Bewertung ausgeben
if ($verbrauch > $normVerbrauch) {
$mehrVerbrauch = ($verbrauch – $normVerbrauch);
echo "Bewertung:<br />Du hast um ".
number_format($mehrVerbrauch, 2, ",", ".").
" Liter mehr verbraucht, als normal!";
if ($mehrVerbrauch > 0.5) {
echo "<br />Du must sparsamer fahren!";
}
} else {
if ($verbrauch == $normVerbrauch) {
echo "Bewertung:<br />Du liegst genau im Normalverbrauch!";
} else {
$mehrVerbrauch = ($normVerbrauch – $verbrauch);
echo "Bewertung:<br />Du hast um ".
number_format($mehrVerbrauch, 2, ",", ".").
" Liter weniger verbraucht, als normal!";
if ($mehrVerbrauch > 0.5) {
echo "<br />Du bist sehr sparsam gefahren!";
}
}
}
?>[/php]

Diese Übungen werden Dir gleich komisch vorkommen, denn mit dem nächsten Befehl wären sie viel einfacher zu lösen gewesen. Aber nimm es nicht so schlimm, denn es war auch eine Übung im logischen Denken. Kommen wir jetzt zum neuen Befehl.

elseif

Wie der Name des Kommandos schon andeutet, ist es eine Kombination aus else und if. Dieses Kommando kann , genauso wie else, nur gemeinsam mit einer if-Anweisung vorkommen. Es ist relativ ähnlich zum bereits bekannten else. Denn wenn die Bedingung im if-Teil mit false ausgewertet wird, kommt er elseif-Block zum Tragen. Nur hatt dieser im Gegensatz zu else eine eigene Bedingung, welche wieder true sein muss.

Durch den folgenden Sourcecode wird es Dir sicher klarer, wie dies gemeint ist. Schau in Dir einfach an und denke an Dein Wissen zu den if und else Anweisungen.

Beispiele

[php light=”true”]if ($a > $b) {
echo "a is größer als b";
} elseif ($a == $b) {
echo "a ist gleich b";
} else {
echo "a ist kleiner als b";
}[/php]

Übung 2.6

Du kannst jetzt die Übung 2.5 so anpassen, dass der Sourcecode einfacher und strukturiertet wird. Öffne dazu die Übung und speichere sie unter dem Namen uebung_2_6.php ab. Jetzt kannst Du die if-Anweisungen am Ende des Codes anpassen. Probier es aber zuerst selber, bevor Du dir den Code mit der Lösung einblendest.

[php collapse=”true” highlight=”17,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49″]<?php
/******************
* Berechnung des Verbrauchs eines Autos auf 100km
* mit formatierten Zahlen
* Dateiname: uebung_2_6.php
* Funktion: Durchschnittsverbrauch berechnen
* erstellt am: 18. Mai 2009, 13:59
* Copyright: Clemens Gull
*/
//Basiswerte festlegen
$kmGefahren = 852.4;
$tankFuellung = 39.72;
$preisLiter = 0.972;
$normVerbrauch = 4.66;

//Berechnung durchfuehren
$verbrauch = number_format($tankFuellung / ($kmGefahren /100), 3) * 1;
$kosten = number_format($verbrauch * $preisLiter, 3, ",", ".");

//Ausgabe der Basiswerte
echo "<p>Basiswerte:<br />".
"gefahrene Kilometer: ".number_format($kmGefahren, 3, ",", ".")."<br />".
"getankte Liter: ".number_format($tankFuellung, 3, ",", ".")."<br />".
"Preis/Liter: ".number_format($preisLiter, 3, ",", ".")." Euro</p>";

//Ausgabe der Resultate
echo "<p>Ergebnisse:<br />".
"Durschnittsverbrauch: ".
number_format($verbrauch, 3, ",", ".")." Liter<br />".
"Kosten pro 100 km: ".$kosten." Euro</p>";

//Bewertung ausgeben
if ($verbrauch == $normVerbrauch) {
echo "Bewertung:<br />Du liegst genau im Normalverbrauch!";
} elseif ($verbrauch > $normVerbrauch) {
$mehrVerbrauch = ($verbrauch – $normVerbrauch);
echo "Bewertung:<br />Du hast um ".
number_format($mehrVerbrauch, 3, ",", ".").
" Liter mehr verbraucht, als normal!";
if ($mehrVerbrauch > 0.5) {
echo "<br />Du must sparsamer fahren!";
}
} else {
$mehrVerbrauch = ($normVerbrauch – $verbrauch);
echo "Bewertung:<br />Du hast um ".
number_format($mehrVerbrauch, 3, ",", ".").
" Liter weniger verbraucht, als normal!";
if ($mehrVerbrauch > 0.5) {
echo "<br />Du bist sehr sparsam gefahren!";
}
}
?>[/php]

Du siehst in der Zeile 17 einen kleinen Trick um Kommastellen abzuschneiden. Ich formatiere die Zahl auf drei Nachkommastellen mit number_format(). Da diese aber einen string als Rückgabewert hat, mutlipliziere ich sie wie mit eins um eine Variable vom Typ float zu erhalten. Erst dann werden die Vergleich mit der if-Anweisung richtig funktionieren. Mir ist schon klar, dass es dafür auch andere Befehle und Mögliochkeiten gibt, aber die kennen wir eben noch nicht.

Nun kommen wir zum letzten Befehl der Entscheidungen. Dieser ermöglich ein genaues auswählen von Werten bei Bedingungen. Für diesen Befehl brauchen wir aber zuerst die break-Anweisung.

break

Dieser Befehl bricht, ohne Rücksicht auf Verluste, verschiedenste Kontrollstrukturen ab. Er setzt den Sourcecode beim nächsten Befehl, welcher der unterbrochenen Struktur folgt, fort. break kann bei den unten aufgeführten Befehlen wirken. Manche wirst Du noch nicht kennen, aber keine Sorge, sie werden schon noch erklärt werden.

  • do-while
  • for
  • foreach
  • switch
  • while

Diesmal gibt es kein Beispiel zum Befehl, da wir ihn ja gleich bei der nächsten Anweisung genauer kennenlernen werden.

switch

Dieser Befehl ist eine Serie von Befehlen und ziemlich ähnlich einer Abfolge von einzelnen if-Anweisungen. Sie ist aber nicht so flexibel. Wenn Du nur eine Variable mit verschiedenen Werten vergleich willst, ist diese Anweisung die ideale Lösung. Sollen die Vergleiche aber komplexer sein, zum Beispiel mit einem logischen Und, dann wird man bei der if-Anweisung bleiben.

Der folgende Code zeigt Dir, wie eine switch-Anweisung aufgebaut ist.

Beispiele

[php light=”true”]switch ($i) {
case 0:
echo "i ist gleich 0";
break;
case 1:
echo "i ist gleich 1";
break;
case 2:
echo "i ist gleich 2";
break;
default:
echo "i ist größer als 2";
}[/php]

Jetzt siehst Dua ch die Verwendung des break Befehls. Eigentlich ist das switch-Kommando relativ einfach: Direkt hinter dem Befehl, wird in Klammern eine Vergleichsvariable verlangt. Da mehrere Befehle von der Anweisung abhängen, muss ein Blockoperator folgen. Nun kommen die einzelnen case-Anweisungen, gefolgt vom zu vergleichenden Wert und einem Doppelpunkt. Man kann die case-Anweisungen auch wie beispielsweise $i == 0 lesen. Nun kommen die einzelnen Befehl welche vom erfolgreichen Vergleich abhängen. Da php den Sourcecode ja sequentiell ausführt, muss vor dem nächsten case ein break-Kommando kommen. Damit der Code nach dem schliessenden Blockoperator fortgesetzt wird.

Würde man den break-Befehl weglassen, würden alle weiteren case-Befehle ignoriert, aber die Kommandos die innerhalb der case-Anweisungen stehen, würden ausgeführt. Die Eigenart ist nämlich, dass nur solange verglichen wird, bis das erstemal ein true auftritt, danach erfolgt kein Vergleich mehr.

Ein Sonderfall ist der Abschnitt default. Dieser wird ausgeführt, wenn keiner der case-Vergleiche den Status true erreichte. Da er ganz am Ende des switch-Blockes steht, kannst Du hier den break weglassen, da er ja nichts mehr bewirken würde. Hier siehst Du, wie das in einem Flussdiagramm aussieht. Es sind die beiden Varianten (mit und ohne break-Anweisung). Du siehst darin sehr gut, wie die Befehle durch die Anwendung laufen.

Flussdiagramm switch-Anweisung

Flussdiagramm switch-Anweisung

Übung 2.7: “Hausübung: Switch”

Um Dich zu fordern gibt es heute etwas Schwieriges. Du hast folgenden beiden Befehle:

[php light=”true”]$datum = ‘Jun 2 2008 11:34PM’;
$monat = date(‘M’, strtotime($strdate)); [/php]

Finde zuerst heraus, welcher Wert in $monat enthalten ist, sonst kannst Du nicht weiterarbeiten. So und jetzt zu Deiner Aufgabe, ermittle mit dem switch-Befehl welches Quartal dieses Datum hat und gib das Resultat in einer Zeile aus. Du kannst die Aufgabe auf jeden Fall mit dem bereits vermittelten Wissen lösen und brauchst Dir nichts aus dem Web suchen.

In eigener Sache

Ich wünsche Dir wieder viel Erfolg bei den Übungen und auch bei der Hausübung. Ich bin gespannt wieviele mitmachen und auf die Lösung kommen. Ich werde es aber nur erfahren, wenn Du einen Kommentar eingibst. Also schreib ruhig, dass Du die Übungen machst und auch wie es Dir dabei geht. Der Kurs kann für Dich ein riesiger Erfolg werden, wenn Du mir eine Rückmeldung gibst. Denn dann kann ich die weiteren Artikel Deinen Wünschen anpassen. Wahrscheinlich werde ich morgen keinen Teil veröffentlichen, Du wirst also bis Mittwoch warten müssen.

Information

Diese Artikelserie ist mit dem Tag phpMySQL@Kurs versehen. Damit kannst Du schnell alle Teile des Kurses finden: https://www.guru-20.info/tag/phpMySQL@Kurs

Startseite bzw. Inhaltsverzeichnis des Kurses

Es wurden 2 Kommentare zu diesem Beitrag geschrieben.

  • kleiner_Baum

    Auch diese Aufgabe habe ich voller stolz gelöst.
    Vorausgesetzt die Änderung von $strdate ind $datum war richtig ??
    Gut, zugegeben, ich hätte schneller sein können, wenn ich die richtige Lösung nicht gelöscht und 7 mal von vorne angefangen hätte. Aber so etwas passiert halt, wenn man nur einmal brake statt break schreibt und mit copy&paste arbeitet.

Blogheim.at Logo
Diese Website verwendet Cookies - nähere Informationen dazu finden Sie in unserer „Datenschutzerklärung“. Klicken Sie auf „Ich stimme zu“, um Cookies zu akzeptieren und unsere Webseite zu besuchen, oder klicken Sie auf „Cookie-Einstellungen“, um Ihre Cookies selbst zu verwalten.