PHP-Code in building_superheroes/02_step/love_calculator.php
<?php
// Funktion für das Berechnen des "Liebespotentials" zweier Namen
// Dieser Code soll in eine Klasse transferiert werden
function lovecalc ($firstname, $secondname) {
$lovename = strtolower(preg_replace("/ /","",strip_tags(trim($firstname.$secondname))));
$alp = count_chars($lovename);
for($i=97;$i<=122;$i++){
if($alp[$i]!=false){
$anz = strlen($alp[$i]);
if($anz<2){ $calc[] = $alp[$i]; }
else{ for($a=0;$a<$anz;$a++){ $calc[] = substr($alp[$i],$a,1); } }
}
}
while (($anzletter = count($calc))>2) {
$lettermitte = ceil($anzletter/2);
for($i=0;$i<$lettermitte;$i++){
// Just a little bit SHIFT :D
$sum = array_shift($calc)+array_shift($calc);
$anz = strlen($sum);
if($anz<2){ $calcmore[] = $sum; }
else{ for($a=0;$a<$anz;$a++){ $calcmore[] = substr($sum,$a,1); } }
}
$anzc = count($calcmore);
for($b=0;$b<$anzc;$b++){ $calc[] = $calcmore[$b]; }
array_splice($calcmore,0);
}
$lovestat = $calc[0].$calc[1];
return $lovestat;
}
if (isset($_POST['go'])) {
// Hier müsste man dann in der realen Welt desinfizieren...
$name1Value = $_POST['name1'];
$name2Value = $_POST['name2'];
// Sind beide Formular-Felder ausgefüllt?
if ($name1Value == "" || $name2Value == "") {
// Nein: Setze Code für negatives Feedback zusammen
$feedback = "<div class=\"feedback_negative\">";
$feedback .= "Bitte fülle beide Namensfelder aus!";
$feedback .= "</div>\n";
}
else {
// Ja: Setze Code für positives Feedback zusammen
$feedback = "<div class=\"feedback_positive\" style=\"font-size: 28px; line-height: 40px;\">";
$feedback .= "Liebespotential: ";
$feedback .= lovecalc($name1Value, $name2Value)."%";
$feedback .= "</div>\n";
}
}
else {
$name1Value = "";
$name2Value = "";
$feedback = "<div class=\"feedback_negative\">";
$feedback .= "Das Formular wurde noch nicht verschickt. Bitte fülle beide Felder aus und klicke den Submit-Button!";
$feedback .= "</div>\n";
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Übung 2: Love Calculator</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Roboto+Condensed&family=Roboto:ital,wght@0,400;0,500;1,400&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/styles.css">
<link rel="stylesheet" href="/css/formstyles.css">
</head>
<body>
<div id="container">
<h1>Übung 2: Love Calculator</h1>
<p>Ziel: Transfer des Codes einer Funktion zu einer Klasse.</p>
<ul>
<li>Ausgangs-Code: Eine Funktion zur Bestimmung des "Liebespotentials" zweier Namen.</li>
<li>Das "Innenleben" dieser Funktion musst du nicht begreifen, der Code soll 1:1 übernommen werden.</li>
<li>Auch das Formular mit dem @-Mechanismus soll so belassen werden, wie es ist.</li>
<li>Versuche vorgängig zu verstehen, wie die Daten (Namen) in die Funktion hineingelangen, wie und wann die Funktion aufgerufen wird und wie das Resultat in das Dokument ausgeben wird.</li>
<li>Transferiere den Code der Funktion in eine Klassen-Datei.</li>
</ul>
<?=$feedback?>
<form method="post" action="">
<div class="form_control">
<label for="name1">Erster Name: </label>
<input type="text" name="name1" id="name1" value="<?=$name1Value?>">
</div>
<div class="form_control">
<label for="name2">Zweiter Name: </label>
<input type="text" name="name2" id="name2" value="<?=$name2Value?>">
</div>
<div class="form_control">
<button type="submit" name="go" class="btn btn-blue">Verschicken</button>
</div>
</form>
<p><img src="../images/love_calculator.jpg"></p>
</div>
</body>
</html>