Informatik

Abitur 2020 dezentral

PHP

S

Schleifen und bedingte Anweisungen

A

Aufgaben zu Schleifen

P

PHP Grundlagen

F

Formulare und PHP

Schleifen und bedingte Anweisungen

If- und Else-Anweisungen

if (condition) {
  /* code */
} else {
  /* code */
}

Wenn die Bedingung erfüllt ist, also TRUE ergibt, wird der Körper ausgeführt. Wenn die Bedingung nicht TRUE ist wird der Else-Körper ausgeführt. Es muss kein Else angefügt werden. Weitergehend gibt es noch "else if" oder auch "elseif" geschrieben. Ist die if-Bedingung nicht erfüllt wird die elseif-Bedingung geprüft. Es können mehrere elseif aneinander gehangen werden wie im folgenden Beispiel:

$var = 5 if ($var == 4) {
  echo "\$var ist vier";
} elseif ($var == -3) {
  echo "\$var ist minus drei";
} elseif ($var == 5) {
  echo "\$var ist fünf";
} else {
  echo "Idk.";
} // Ausgabe: $var ist fünf

Ohne Vorweg greifen zu wollen, aber generell lassen sich solche Überprüfungen einfacher und übersichtlicher mit Switch machen. Weitere Vergleichs-Operatoren wie == oder != findest du im PHP-Manuel.

Schleife

Schleifen wiederholen Code. Das spart Arbeit und wenn nicht klar ist wie oft etwas wiederholt wird sind sie sogar essenziell.

for (expr1; condition; expr3) {
  /* Code … */
}
  • Expr1 wird vor dem Schleifenbeginn ausgeführt. Normalerweise wird eine Variable definiert z.B. $i=0;
  • Expr2 (condition) wird vor jedem Schleifendurchgang getestet. Ist das Ergebnis TRUE wird der Schleifenkörper ausgeführt.
  • Expr3 wird nach jedem Schleifendurchgang ausgeführt. Normalerweise ändert man die Variable z.B. $i++

Ein Beispiel wäre:

/* $_POST['float'] ist in unserem Fall 10. */
for ($int = 0; $int < $_POST['float']; $int++) {
  echo $int . ", ";
}

Die Ausgabe wäre: "0, 1, 2, 3, 4, 5, 6, 7, 8, 9,".

"Foreach"-Schleife

Eine weiter Schleife ist die Foreach-Schleife. Sie geht die Elemente eines Arrays (euch bekannt als Liste) einzeln durch. 

$pizzaToppingList = ["Pilze", "Schinken", "Salami"];
foreach ($pizzaToppingList as $int => $topping) {
  echo $topping . "ist der " . $int . ". Belag in der Liste.<br>";
}
// Ausgabe:
// Pilze ist der 0. Belag in der Liste.
// Schinken ist der 1. Belag in der Liste.
// Salami ist der 2. Belag in der Liste.


Aufgaben mit Lösungen findest du hier.

Aufgaben zu Schleifen

Aufgabe 0:

Um in das Thema reinzukommen: Es soll von 0 auf minus 100 in dreier Schritten runtergezählt werden.

Ausgabe:

0 -3 -6 -9 -12 -15 -18 -21 -24 -27 -30 -33 -36 -39 -42 -45 -48 -51 -54 -57 -60 -63 -66 -69 -72 -75 -78 -81 -84 -87 -90 -93 -96 -99

Lösung:

for ($var = 0; $var > -100; $var -= 3) {
  echo $var . " ";
}

Aufgabe 1:

Gib die Quadratzahlen von 10 bist 20 in Form dieses Satzes aus: Die Quadratzahl von 10 ist 100.

Ausgabe:

Die Quadratzahl von 10 ist 100.
Die Quadratzahl von 11 ist 121.
Die Quadratzahl von 12 ist 144.
Die Quadratzahl von 13 ist 169.
Die Quadratzahl von 14 ist 196.
Die Quadratzahl von 15 ist 225.
Die Quadratzahl von 16 ist 256.
Die Quadratzahl von 17 ist 289.
Die Quadratzahl von 18 ist 324.
Die Quadratzahl von 19 ist 361.
Die Quadratzahl von 20 ist 400.

Lösung:

for ($i=10; $i < 21; $i++) {
  echo "Die Quadratzahl von " . $i . " ist " . $i*$i . ".<br>";
}

Aufgabe 2:

Gib die Quadratzahlen 1, 4, 9, 16, … 225 aus. Hinter der 225 soll kein Komma sein und die 25 soll fettgedruckt dargestellt werden.

Ausgabe:

1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225

Lösung:

for ($i=1; $i*$i <= 225; $i++) {

  /* <b> Tag öffnen wenn 25 */
  if ($i*$i == 25) {
    echo "<b>";
  }

  /* gibt das Quadrat von $i aus. */
  echo $i*$i;

  /* <b> Tag schließen wenn 25 */
  if ($i*$i == 25) {
    echo "</b>";
  }

  /* Komma wenn nicht 225 */
  if ($i*$i != 225) {
    echo ", ";
  }
}

Aufgabe 3:

Mit einem Formular sollen Potenzen berechnet werden. Benötigt werden der Exponent und die Basis. Die Ausgabe könnte so aussehen: "34 = 3 * 3 * 3 * 3 = 81".

Ausgabe:

Wenn 2 und 8 gewählt wurden käme dieses Ergebnis zustande
28 = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 256

Lösung:

<form method="POST" action="./informatik.php" name="power">
  <input type="number" name="base" id="base" placeholder="Basis" required />
  <input type="number" name="exp" id="exp" placeholder="Exponent" min="1" required />
  <button type="submit" name="sub">ausrechnen</button>
</form>
$result = 1;
/* Basis^Exponent und = ausgeben */
echo $_POST['base'] . "" . $_POST['exp'] . "" . " = ";

for ($i=1; $i <= $_POST['exp']; $i++) {
  /* Basis ausgeben +/
  echo $_POST['base'];

  /* Malzeichen nur ausgeben, wenn es nicht das letzte Mal ist. */
  if ($i != $_POST['exp']) {
    echo " * ";
  }

  $result *= $_POST['base'];
}
/* Ergebnis ausgeben */
echo " = " . $result; // alternativ kann auch pow($_POST['base'], $_POST['exp']) oder $_POST['base']**$_POST['exp'] anstelle von $result.

Aufgabe 4

Ein Countdown von 100 bis 0 wird verlangt. Jede gerade Zahl soll unterstrichen werden. Modular gibt den Rest beim Teilen aus wie z.B. 10%3 = 1. Es kann 3 mal geteilt werden und dann bleibt einer übrig.

Tipp: Eine zahl ist gerade wenn sie ohne Rest durch 2 teilbar ist.

Ausgabe:

100
99 98 97 96 95 94 93 92 91 90
89 88 87 86 85 84 83 82 81 80
79 78 77 76 75 74 73 72 71 70
69 68 67 66 65 64 63 62 61 60
59 58 57 56 55 54 53 52 51 50
49 48 47 46 45 44 43 42 41 40
39 38 37 36 35 34 33 32 31 30
29 28 27 26 25 24 23 22 21 20
19 18 17 16 15 14 13 12 11 10
9 8 7 6 5 4 3 2 1 0

Lösung:

/* von 100 bis 0 */
for ($i=100; $i > -1 ; $i--) {
  /* unterstreichen gerader Zahlen anfangen */
  if ($i%2 == 0) {
    echo "<u>";
  }
  echo $i;
  /* unterstreichen gerader Zahlen beenden */
  if ($i%2 == 0) {
    echo "</u>";
  }
  /* damit das Leerzeichen nicht unterstrichen wird nach den Tags */
  echo " ";
  /* ein Umbruch wenn die Zahl durch 10 ohne Rest teilbar ist */
  if ($i%10 == 0) {
    echo "<br />";
  }
}

Aufgabe 5

In ein Formular sollen das Kapital, den Zinssatz und die Jahre angegeben werden. Die Ausgabe soll so aussehen: Für das 1. Jahr erhalten Sie x Euro Zinsen, damit beträgt Ihr Gesamtvermögen y Euro.

Ausgabe:

Wenn 1.000, 5% und 3 Jahre gewählt wurden, würde die Ausgabe wie folgt aussehen:
Für das 1. Jahr erhalten Sie 50,00 Euro Zinsen, damit beträgt Ihr Gesamtvermögen 1.050,00 €.
Für das 2. Jahr erhalten Sie 52,50 Euro Zinsen, damit beträgt Ihr Gesamtvermögen 1.102,50 €.
Für das 3. Jahr erhalten Sie 55,13 Euro Zinsen, damit beträgt Ihr Gesamtvermögen 1.157,63 €.

Lösung:

<form action="/other/a4.php" name="rateCalculator" method="POST">
  <input type="number" name="capital" placeholder="Kapital" max="100000000" />
  <input type="number" name="interest_rate" placeholder="Zinssatz" min="0.01" max="1000" step="1.00" />
  <input type="number" name="years" placeholder="Jahre" min="1" max="100" step="1" />
  <button type="submit" name="button">berechnen</button>
</form>
<?php
for ($i=1; $i <= $_POST['years']; $i++) {
  $rate = $_POST['capital'] * ($_POST['interest_rate'] /100);

  echo "Für das " . $i . ". Jahr erhalten Sie "
    . number_format($rate, 2, ',', '.') .
    " Euro Zinsen, damit beträgt Ihr Gesamtvermögen ";

  $_POST['capital'] += $rate;

  echo number_format($_POST['capital'], 2, ',', '.') . " €.<br />";
}
?>

Aufgabe 6

Statt der Liste soll der Zinsplan in Tabellenform ausgegeben werden. Folgende Spalten sind notwendig:

Jahr - Zinsen des Jahres - Zinsen gesamt - Vermögensstand

Ausgabe:

alle Werte in Euro (€)
Jahr Zinsen des Jahres Zinsen gesamt Vermögensstand
1 50,00 50,00 1.050,00
2 52,50 102,50 1.102,50
3 55,13 157,63 1.157,63
Total: 157,63
1.157,63

Lösung:

<table>
<caption>alle Werte in Euro (€)</caption>
<thead>
  <tr>
    <th scope="col">Jahr</th>
    <th scope="col">Zinsen des Jahres</th>
    <th scope="col">Zinsen gesamt</th>
    <th scope="col">Vermögensstand</th>
  </tr>
</thead>
<tbody>
  <?php
   /* Notiz: '\n' ist nicht notwendig. Es erzeugt im Code nur eine neue Zeile, damit er besser lesbar ist. */
   $grate = 0;
   $_POST['capital'] = $captial;
   for ($i = 1; $i <= $_POST['years']; $i++) {
     $rate = $_POST['capital'] * ($_POST['interest_rate'] / 100);
     $grate += $rate;
     $_POST['capital'] += $rate;

     echo "<tr>\n";
     echo "<td>" . $i . "</td>\n";
     echo "<td>" . number_format($rate, 2, ',', '.') . "</td>\n";
     echo "<td>" . number_format($grate, 2, ',', '.') . "</td>\n";
     echo "<td>" . number_format($_POST['capital'], 2, ',', '.') . "</td>\n";
     echo "</tr>\n";
  }
  ?>
</tbody>
<tfoot>
  <tr>
    <th scope="row">Total:</th>
    <td><?php echo number_format($grate, 2, ',', '.'); ?></td>
    <td></td>
    <td><?php echo number_format($_POST['capital'], 2, ',', '.'); ?></td>
  </tr>
</tfoot>
</table>

PHP Grundlagen

PHP steht heute für PHP Hypertext Preprocessor, ist eine serverseitige Skriptsprache, die in ".php"-Dateien geschrieben wird und seit Dezember 2018 in der Version 7.3 ist und wird von 79% aller Websites verwendet (stand: Anfang 2019).

<?php
  echo 'Hello World';
  # einzeiliger Kommentar
  // einzeiliger Kommentar
  /* mehrzeiliger Kommentar */
?>

PHP-Code muss zwischen <?php und ?> liegen. Mit echo wird das nachfolgende ausgegeben (hier: Hello World).

<?php
  $title = 'Dies ist ein titel';
?>
<!DOCTYPE html>
<html>
  <head>
    <title><?= $title ?></title>
  </head>
  <body>
    <h1><?php echo $title . " auf JS"; ?></h1>
    <p>Dieser Paragraf von "<?= $title ?>" hat keine Funktion.</p>
  </body>
</html>

Wie man sieht kann man beliebig oft <?php ?> setzen und sind diese gerade nicht geöffnet ganz normal html schreiben. Die neue Sache sind Variablen. Sie beginnen immer mit $ und dann eine sinnvolle Bezeichnung. In Variablen kann alles mögliche gespeichert werden. Text Anführungszeichen (") oder ' nennt man String. Will man mit mehrere Sachen ausgeben muss man diese mit einem Punkt verbinden wie in h1 zu sehen ist. Das ist auch in der kurzen Schreibweise (<?= 'Hallo' . " Hi" ?>) möglich.

<?php
  $val1 = 5;
  $val2 = 7;
  $sum      = $val1 + $val2; /* 13 */
  $multiply = $val1 * $val2; /* 35 */
  $divide   = $val1 / $val2; /* 0.71428571428 */
  $subtract = $val1 - $val2; /* -2 */
  $val1++; /* erhöht um 1 auf 6 wie $val1 = $val1 + 1 */
  $val1 += $val1; /* ist das gleiche wie $val1 = $val1 + $val1 und ergibt 12 */
?>

Bei den ersten vier Rechnungen werden $val1 und $val2 nicht verändert, sondern das Ergebnis in der Variable ($sum,...) gespeichert.

Formulare und PHP

Die URL in dem Formular ("action='/url/to/php.php'") schickt den User beim absenden zu der Datei und wenn es eine '.php' ist speichert PHP die gesendeten Daten in einer sogenannten Globalen Variable. Je nachdem ob man method="GET" oder "POST" gewählt hat werden sie in $_GET oder $_POST in einer Liste (Array) gespeichert. Eine Element aus der Liste bekommt man mit dem Namen des Input-, Textarea oder Select-Feld.

<form method="GET" action="/url/to/php.php">
  <input type="text" name="sirname">
  <select name="sel" size="2">
    <option value="Hallo">Hallo</option>
    <option value="Hi">Hi</option>
  </select>
  <button type="submit" name="subbutton" value="lol">Ergebnis anschauen</button>
</form>

<?php
  /* /url/to/php.php */
  echo $_GET['sel'] . " " . $_GET['sirname'] . "!<br>Wie geht es ihnen? " . $_GET['subbutton'];
?>

Ruft man die "/url/to/php.php" auf ohne das Formular ausgefüllt zu haben, kennt PHP 'sel' und 'sirname' natürlich nicht und gibt so einen Wahrnung für jede Variable aus: "Notice: Undefined index: sel in /url/to/php.php on line 2".