Dann machen wir halt noch etwas PHP – index.php

Es ist ja schön und gut, dass unsere QR-Codes funktionieren und auf eine Seite zeigen, aber diese Seite muss dann natürlich auch irgendwie sinnvoll den übergebenen Parameter verarbeiten, eure liebste Person vom “versehentlichen” Schummeln abhalten und eben am Ende auf den korrekten Song weiterleiten. Das ist aber alles gar nicht schwer und gleichermaßen auch nicht schön, weil mir PHP einfach nicht so viel Freude bereitet, wie eben Python. Aber gemeinsam stehen wir das durch.

Ihr müsst hier allerdings beachten, dass eure liebste Person auch auf die index.php zugreifen kann. Das bedeutet, sie (die Datei, nicht die Person) muss irgendwie auf einem über das Internet erreichbaren Server liegen. Sie (immer noch die Datei, nicht die Person) kann allerdings auch auf einem Server in eurem Netzwerk liegen, in dem sie (dieses mal die Person, nicht die Datei) sich auch befindet, wenn sie (Person) sie (Datei) abruft. Ihr versteht? Erreichbarkeit und Kommunikation. So wichtig in Beziehungen.

<?php
// Falls es ohne Parameter aufgerufen wird, einfach abbrechen
if (!isset($_GET["tag"]))
{
	error = true;
}
else
{
	$error = false;
	// This is where the magic happens
}

if ($error == true)
{
	echo "Hast du geschummelt?";
}
else
{
	header('Location: ' . $song['Link']);
	exit;
}
?>
Code language: PHP (php)

Ich schlage euch dieses äußere Konstrukt vor. In Zeile 3 fragen wir erstmal ab, ob der notwendige Parameter tag mit dem Aufruf der Seite übergeben wurde. Falls nicht, setze die Variable error auf true, ansonsten auf false. Ich arbeite gerne mit Variablen für Fehler, um sie dann später entsprechend auszuwerten, wie ich es auch hier mache. In Zeile 13 fragen wir nämlich diese Fehlervariable ab. Ist sie true, also gab es irgendwo einen Fehler, geben wir eine handliche Meldung aus, trat kein Fehler auf benutzen wir die Funktion header, um automatisch auf eine andere Seite zu springen. In diesem Fall liegt die Zielseite in der Variablen $song[‘Link’]. Aber wie befüllen wir die?

Nämlich mit allem, was unter dem Kommentar in Zeile 10 eingefügt wird. Und zwar:

	// Aktuelles Datum, Tag, Monat
	date_default_timezone_set("Europe/Berlin");
	$timestamp = time();
	$intTag = date ('j', $timestamp);
	$intMonat = date ('m', $timestamp);

	// Das alles nur im Dezember ausführen:
	if ($intMonat == 12) 
	{
		$strTag = $_GET["tag"];

		// Alle Parameter abholen, json auslesen, verarbeiten usw.
		$file = 'songs.json';
		$filecontent = file_get_contents($file);
		$songlist = json_decode($filecontent, true);

		
		foreach($songlist as $song)
		{
			if ($song['Guid'] == $strTag)
			{
				if ($intTag < intval($song['Day']))
				{
					$error = true;
				}
			}
		}
	}
	else
	{ 
		$error = true;
	}
Code language: PHP (php)

Zeile 1-5 sind eigentlich nur dazu da, um den aktuellen Tag als Zahl und den aktuellen Monat als Zahl in Variablen zu speichern. Anschließend prüfen wir, ob der aktuelle Monat der 12. des Jahres, also der Dezember, ist. Ist es nicht so, wird in Zeile 31 die Variable error mit true belegt (“Hast du geschummelt?”), falls doch, passiert eigentlich das, was im Idealfall passieren soll.

Mit $_GET[“tag”] holen wir uns erstmal den Parameter, der mit dem Aufruf der Seite übergeben wurde, anschließend benutzen wir wieder unsere aufwändig erzeugte songs.json, um sie auszupacken und zu einem JSON-Objekt zu machen. Mittlerweile solltet ihr auch hier den Vorteil erkannt haben, weil eine Excel-Datei in PHP zu behandeln einfach wirklich keinen Spaß macht. Es ist furchtbar und unnötig. Nehmt JSON. Immer (wenn ihr könnt).

Jedenfalls iterieren wir unser JSON wieder durch und schauen in Zeile 20, ob unser Parameter tag irgendwo zu einer GUID im JSON passt. Hier ist es dann in Zeile 22 wichtig, ob der aktuelle Tag auch zu dem Wert Day im JSON passt und ich sehe, warum es vielleicht nicht so sinnvoll war, den Parameter der Seite auch Tag genannt zu haben. Aber da müssen wir jetzt durch.

Jedenfalls prüfen wir in Zeile 22 ob der heutige Tag als Zahl kleiner dem Tag ist, der zu der ermittelten GUID gehört. Warum?
Angenommen heute wäre der 2. Dezember, aber die liebste Person hat “versehentlich” das Türchen für den 3. Dezember. geöffnet. Da wollen wir ihr natürlich nicht die Überraschung nehmen und setzen unsere Variable error lieber auf true, um dann zu fragen: “Hast du geschummelt?”

Läuft alles korrekt, bleibt die error-Variable immer false und die Weiterleitung findet statt.

Hier der Clou: Weil das alles voraussichtlich auf einem Smartphone stattfindet, mindestens das QR-Code lesen, und dort vermutlich auch Spotify installiert ist, wechselt das Telefon direkt in die App und spielt den Song ab. Super geil, oder? Ja, super geil.

Trotzdem seht ihr, dass ich nicht viel Freude mit PHP habe, weil ich für das Beispiel hier nicht mal die Energie aufbrachte, das irgendwie zu gestalten. Das könnt ihr natürlich gerne machen, es würde aber sowieso nur im Fehlerfall gesehen werden. Und der Fehler, dass eine falsche Zahl auf einem QR-Code steht, ist natürlich nicht möglich, da ja alles in Abhängigkeit voneinander entstanden ist.

Auf der folgenden Seite seht ihr dann nochmal das komplette Skript kommentarlos.

2 Comments Add New Comment

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hallo! Mein Name ist Marco Friedersdorf und bin Freelancer im Bereich der Software-Entwicklung und IT-Beratung. Mit Artikeln wie diesem möchte ich einen kleinen Einblick in meine Arbeit geben und über die Dinge sprechen, die mich als Informatiker beschäftigen.
tripadvisor flickr americanexpress bandcamp basecamp behance bigcartel bitbucket blogger codepen compropago digg dribbble dropbox ello etsy eventbrite evernote facebook feedly github gitlab goodreads googleplus instagram kickstarter lastfm line linkedin mailchimp mastercard medium meetup messenger mixcloud paypal periscope pinterest quora reddit rss runkeeper shopify signal sinaweibo skype slack snapchat soundcloud sourceforge spotify stackoverflow stripe stumbleupon trello tumblr twitch twitter uber vimeo vine visa vsco wechat whatsapp wheniwork wordpress xero xing yelp youtube zerply zillow px aboutme airbnb amazon pencil envelope bubble magnifier cross menu arrow-up arrow-down arrow-left arrow-right envelope-o caret-down caret-up caret-left caret-right