Hier ein paar Codeschnipsel die Dir vielleicht weiterhelfen können.

[PHP] Deutsches Zahlenformat konvertieren mit Punkt als Dezimaltrenner

Hallo,

du kennst das wahrscheinlich. Man hat auf seiner Webseite ein Eingabefeld für eine Zahl, die Kommastellen beinhalten kann. Ein Geldbetrag zum Beispiel. Wir geben da dann natürlich etwas in der Art ein: 54,23
So sieht eine Zahl bei uns aus. Aber nicht überall auf der Welt. Die meisten sogar schreiben eine Zahl mit Dezimalstellen so: 54.23. Also mit einem Punkt als Dezimaltrenner. “Leider” wollen auch Computer und Datenbanken die Zahl mit Punkt als Dezimaltrenner. Und damit geht das Problem los. Man muss also alle Eingaben prüfen und ggf umwandeln.

In meiner ganzen Zeit als Programmierer ist mir das schon oft vor die Füße gefallen. Und heute habe ich eine einfach wie auch geniale Lösung gefunden. Die folgende Zeile nimmt jede Form einer Zahl und wandelt sie in eine Zahl mit Punkt als Dezimaltrenner um. Soweit ich das getestet habe, funktioniert sie absolut sauber.

$val = floatval(preg_replace('/\.(?=.*\.)/', '', str_replace(",",".",$val)));

Was passiert da?

Als erstes wird jedes Komma durch einen Punkt ersetzt. Danach werden alle Punkte, bis auf den letzten entfernt und dann das Ergebnis noch in ein Float umgewandelt und damit auch gleich validiert.

Damit sollte sich das Thema hoffentlich erledigt haben :-)

[PHP] Zeichenketten normalisieren – Groß- und Kleinschreibung

Hallo,

heute mal wieder eine kleine Aufgabe in PHP. Folgende Situation:

Wir haben einen Text-String in dem (natürlich) ein Text steht. Nehmen wir an der Inhalt lautet
HIER bekommen Sie heute total GÜNSTIGE Gurken DIREKT vom Landwirt.
Wir möchten diesen String jetzt automatisch so umändern das alle Wörter die nur Großbuchstaben enthalten, umgewandelt wird in: Anfangsbuchstabe groß – Rest klein
Also so wie sich das gehört. Natürlich müssten wir jetzt logischerweise gucken welche davon wirklich mit einem Großbuchstaben anfangen, wenn Sie denn mitten im Satz stehen. Denn sonst würden wir eine furchtbare Rechtschreibung dabei entstehen lassen. Aber wenn man nicht gerade ein verdammt gutes Wörterbuch (Datenbank) und eine entsprechend gute Routine parat hat, dann muss man sich erst einmal mit meiner Lösung zufrieden geben.

Also Aufgabenstellung ist klar. Wörter die nur aus Großbuchstaben bestehen sollen in kleine Buchstaben mit dem ersten Zeichen groß umgewandelt werden. Aus dem Beispiel oben wird dann aus HIER -> Hier

Eine fertige Lösung gibt es nicht. Etwas eigenes muss her. Der naheliegendste Gedanke ist die Wörter aufteilen und jedes einzelne Kontrollieren ob es nur aus Großbuchstaben besteht. Wenn ja, dann umwandeln, wenn nicht…. dann nicht. Danach alles wieder zusammenbasteln und fertig.

Soweit, so gut. Funktioniert auch sehr schön. Nur eine Sache ist mir aufgefallen. Ich habe zum Umwandeln erst die Funktion ucfirst() benutzt. Diese macht genau das. Erster Buchstabe groß. Man muss nur vorher alles erst einmal mit strtolower() alles klein machen.
Und hier gab es das Problem. Durch Zufall habe ich “GRÖßE” umwandeln wollen. Dabei hat es die Umlaute total zerschossen. Wenn strtolower() Umlaute “klein macht” dann zerschießt es irgendwie den Charset. Genauer habe ich mich damit noch nicht beschäftigt, aber zumindest eine Lösung gefunden. Und die heißt: mb_strtolower($String,’UTF-8′)

Wie man sieht kann man hier den Charset mit angeben.  Somit bleiben Umlaute erhalten.

Hier noch mal der ganze Code.

function NormalizeString($String) {
		$StrA = explode(" ", $String);
		$StrAc = count($StrA);
		$Out = "";
		for($i=0;$i<$StrAc;$i++) {
			$tmp = preg_replace('/[^a-zA-ZäÄöÖüÜß]/', '', $StrA[$i]);
			if(!empty($tmp) && strtoupper($tmp) == $tmp) {
				//Alles groß
				$StrA[$i] = ucfirst(mb_strtolower($StrA[$i],'UTF-8'));
			}
			$Out .= $StrA[$i]." ";
		}
		
		return $Out;
	}

Erst erstellen wir mit explode() ein Array der einzelnen Wörter. Dann durchlaufen wir jedes einzelne in einer For-Schleife. Wir erstellen eine TMP-Variable in der das Wort noch einmal bereinigt wird, damit man es besser vergleichen kann. Was dann auch getan wird. Wird festgestellt das dass Wort groß geschrieben ist, so ändern wir das. Und dann geht alles wieder in die $Out Variable zurück und wird schließlich zurück gegeben.

Viele Grüße
Gordon

[PHP] Datum und Datumsfunktionen

Hallo,

lasst uns heute mal über Datumsfunktionen in PHP reden.

Um denjenigen erst einmal kurz den Wind aus den Segeln zu nehmen die eine interaktive Uhr (sprich eine mitlaufende Uhrzeitanzeige) haben möchten, die müssen sich nach Javascript-Codes umsehen. PHP ist eine Serverseitige Programmiersprache und kann selbst keine Interaktionen im Browser durchführen. Gut, man könnte jetzt anfangen mit AJAX oder Reloads rumzuspielen… aber warum schwierig wenn es auch (mit Javascript) einfacher geht.

Nun aber zum Datum mit PHP. Hier werden verschiedene Funktionen zur Verfügung gestellt. Die wohl wichtigste ist dabei date().

Date() gibt ein formatiertes Datum aus. Es kann sich um das aktuelle oder ein Datum aus einer Variable handeln. Zum Beispiel kann man damit auch Timestamps aus einer Datenbank formatieren. Weiterhin kann man genau angeben wie das Datum formatiert werden soll. Nur Datum oder nur Zeit oder beides.
string <strong>date</strong> ( string <code>$format [, int $timestamp = time() ] )

Eine weitere, oft genutzte Funkation, stellt mktime() dar. Dieser Befehl gibt einfach den aktuellen Timestamp zurück. Diesen kann man dann z.B. in einer Datenbank speichern oder was auch immer damit machen. Man kann bei dieser Funktion auch noch das Datum angeben, um zum Beispiel den Timestamp vom 01.03.1998 zu erhalten. Meist wird er aber ohne Parameter genutzt um einfach den aktuellen Timestamp zu erhalten.

int <strong>mktime</strong> ([ int <code>$hour = date(“H”) [, int $minute = date(“i”) [, int $second = date(“s”) [, int $month = date(“n”) [, int $day = date(“j”) [, int $year = date(“Y”) [, int $is_dst = -1 ]]]]]]] )

Mit strtotime() kann man einfach ein Datumsformat in einen Timestamp umwandeln. Um diesen dann z.B. mit date() neu zu formatieren oder ihn in einer Datenbank zu speichern. Erhält man also von irgendwo her z.B. ‘2000-07-01T00:00:00+00:00’ und braucht aber einen Timestamp… dann ist strtotime() die richtige Funktion.

int <strong>strtotime</strong> ( string <code>$time [, int $now ] )

Das sind die 3 meist genutzten Datumsfunktionen in PHP. Insgesamt sind es aber an die 50. Wenn hier also nicht das richtige dabei war, dann einfach mal bei php.net nachschauen.

Ich hoffe ich konnte ein wenig helfen.

Viele Grüße
Gordon

[PHP] Automatische Weiterleitung

Hallo,

heute möchte ich kurz über das Thema “Weiterleitungen mit PHP” sprechen. Kurz, weil es nicht viel zu sagen gibt :)

Der Code für eine Weiterleitung mit PHP sieht so aus:

<?php
	header("Location: http://www.domain.de/seite.php"); 
	exit(); 
?>

header() gibt einen HTML-Header aus. Mit “Location:” wird angewiesen das es sich um eine Weiterleitung handelt. Danach kommt dann die URL der Seite zu der Weitergeleitet werden soll. Und mit exit(); brechen wir das Script ab und beenden weitere Ausführungen.

Nun muss man aber noch dazu sagen das man schon nachdenken sollte bevor man einfach weiterleitet. Ist es z.B. eine permanente Weiterleitung, weil sich in der Webseitenstruktur etwas verändert hat (z.B. eine Seite hat eine neue Adresse bekommen), dann muss man dies auch angeben, sonst gibt es Probleme z.B. mit den Suchmaschinenrankings.

Eine permanente Weiterleitung sieht dann so aus:

<?php
	header("Status: 301 Moved Permanently");
	header("Location: http://www.domain.de/seite.php"); 
	exit(); 
?>

Mit der Zeile header("Status: 301 Moved Permanently"); geben wir an das diese Seite für immer verschoben wurde. Es gibt auch noch den 302 Code, der besagt das die Seite nur vorübergehend verschobene oder nicht erreichbar ist.
Wenn z.B. der Google-Bot vorbeikommt und den 301 Code vorfindet, dann wird er die Seitenänderung speichern und das nächste mal gleich zur neuen Seite gehen. So wird dann auch das Ranking übertragen, anstatt verloren zu gehen.

Das schöne an PHP Weiterleitungen ist das sie Serverseitig sind und immer funktionieren. Außerdem kann man Sie dynamisch gestalten. Weiterleitungen in der htaccess können zwar teilweise durch Regeln auch dynamisch erstellt werden, aber nicht so gut wie mit PHP direkt. Und Redirects in HTML sind irgendwie total für den Garten. Das gleiche mit Javascript-Weiterleitungen. Diese funktionieren bei Suchmaschinen und Benutzern ohne JS gar nicht.

Hoffe es hat geholfen. Wenn nicht, einfach Kommentar hinterlassen ;)

Viele Grüße
Gordon

[PHP] Zahlen runden mit PHP

Hallo zusammen,

heute mal wieder ein bisschen PHP. Eine kleine Anleitung zum hantieren mit Zahlen in PHP. Genauer gesagt das runden von Zahlen.

In PHP gibt es einige Funktionen mit denen man Zahlen runden kann. Dazu zählen number_format, ceil, floor und round. Mein persönlicher Liebling ist number_format. Warum?

Weil diese Funktion nicht nur rundet, sondern die Zahl auch gleich noch vernünftig Formatiert, soweit gewünscht. Der Syntax ist:

Syntax: string <strong>number_format</strong> (float Zahl [, int Dezimalstellen [, string Dezimaltrenner, string Tausendertrenner]])

Die Funktion kann mit einem Parameter, 2 oder 4 aufgerufen werden, nicht jedoch mit 3. Also

number_format (Zahl);
number_format (Zahl, Dezimalstellen)
oder
number_format (Zahl, Dezimalstellen, Dezimaltrenner, Tausendertrenner);

Ein Beispiel:

number_format (15329.6956, 2, ",", ".");

Ergibt eine Ausgabe von: 15.329,70

Die nächste Funktion, bzw. Funktionen sind ceil und floor. Diese runden einfach auf (ceil) oder ab(floor). Der Syntax lautet float ceil ( float $zahl ) bzw. float floor ( float $zahl ). In beiden Fällen wird auf die nächste Ganzzahl auf- bzw. abgerundet.

Und zu guter letzt die Funktion round. Sie ist das Mittelstück zwischen den vorherigen 3 Funktionen. Sie rundet einen Fließkommawert auf oder ab und man kann die Nachkommastellen angeben. Der Syntax lautet:
float <strong>round</strong> ( float <code>$zahl [, int $dezimalstellen = 0 [, int $modus]] )

Ein Beispiel:

round(15.1698, 2) ergibt: 15.17

Beachte das beim Programmieren immer mit dem Englischen Nummernformat gearbeitet wird. Dezimalstellen werden mit einem Punkt “.” abgetrennt und Tausenderstellen (wenn Sie denn einen Trenner haben) mit einem Komma “,”. Also genau andersrum als bei uns.
Deswegen ist die number_format Funktion ja auch so interessant ;)

Viele Grüße
Gordon

[PHP] Kommentare in PHP Scripten

Hallo zusammen.

Heute reden wir mal über Kommentare :)
Wenn man ein Script erstellt, dann ist es sinnvoll das Script zu kommentieren. Also eine kleine Dokumentation im Script. Denn solange man gerade damit Arbeitet und das Script in einer relativen Größe bleibt, weiß man noch was genau welche Zeile macht und wozu Sie da ist.

Doch spätestens wenn das Script beachtliche Formen annimmt und/oder man nach Wochen oder Monaten mal wieder reinschaut… ist alles weg. Wie war das noch gleich? Was macht diese Zeile hier? Wo finde ich jetzt das und das?…  Alles weg… der Code besteht nur noch aus Kauderwelsch.
Spätestens jetzt tritt man sich selbst in den Ar*** das man den Code nicht Kommentiert hat.

Natürlich dauert es länger wenn man zum Code auch noch was schreiben muss… aber irgendwann kann es sich auszahlen. Auch (und gerade) wenn man ein Projekt von einem anderen Programmierer übernimmt ist es wichtig Dokumentierten Code vorzufinden.

Und es ist sooo einfach ;) 2 Schrägstriche (//) bei einer Zeile und ein Schrägstrich mit Stern bei mehreren Zeilen (/* am Anfang… und */ am Ende). Das ganze sieht dann so aus.

<?php
echo "vor dem Kommentar";
// Hier ein Einzeiliger Kommentar
echo "nach dem Kommentar";
?>

Und noch ein Mehrzeiliger Kommentar:

<?php
echo "vor dem Kommentar";
/* Dieser Kommentar
   geht über mehrere
   Zeilen */
echo "nach dem Kommentar";
?>

Viele Grüße
Gordon

[PHP] Datei löschen

Hallo zusammen,

heute möchte ich mal auf die Frage eingehen ob man mit PHP Datei(en) löschen kann.

Zu erst einmal muss man unterscheiden. Dateien auf dem Webserver und Dateien auf der lokalen Festplatte. Ersteres ja, letzteres nein.
PHP hat natürlich keinen Zugriff auf die Dateien des Besuchers einer Webseite. Das hat keine Serverseitige Programmiersprache. Auch Clientseitige Scripte (wie Javascript) können das nur bedingt. Sonst wäre es ja jeder Webseite ohne weiteres wahllos Dateien zu löschen. Das wäre ein Desaster.

Auf dem Webserver kann PHP jedoch, bedingt, Dateien löschen. Bedingt heißt das man auch hier nicht einfach wahllos irgendwelche Dateien löschen kann. Auch das wäre ein Desaster.

Das PHP-Skript braucht für die entsprechende Datei auch entsprechende Rechte. Unter Linux sogar noch bestimmte Gruppen- und Benutzerzugehörigkeiten.

Doch im Normalfall ist es nicht so Kompliziert wie es sich jetzt anhört. Denn im Normalfall wird ja meist eine Datei gelöscht die auch mit dem gleichen Skript erstellt wurde. Also zum Beispiel eine temporäre Datei oder eine Datei die ein User hochgeladen (ein Bild z.B.). Dann wurde die Datei auch mit dem PHP Skript erstellt und trägt dessen User- und Benutzerrechte. Damit auch das Recht die Datei wieder zu löschen.

Doch wie funktioniert es?
Ganz einfach. Alles was wir brauchen ist der PHP-Befehl zum Datei löschen und der Pfad der Datei selbst. Das passt in eine Codezeile.

$res = unlink("testdatei.hm");

Das war’s schon. In $res ist dann der Rückgabewert enthalten. 1 = erfolgreich gelöscht und 0 = Datei konnte nicht gelöscht werden.

Bei Verzeichnisstrukturen können relative wie auch absolute Pfadangaben gemacht werden.

[PHP] Zeilenumbruch in PHP erzeugen

Hallo,

heute möchte ich mich mit dem Thema Zeilenumbruch in PHP beschäftigen. Ich denke der Artikel wird nicht sehr lang werden, denn das Thema ist ja mit einem kleinen Codeschnipsel getan :) Weiterlesen

[PHP] Array sortieren

Hallo,

heute beschäftigen wir uns mal mit einem Array in PHP. Genauer gesagt mit der Frage wie man ein PHP Array sortieren kann.

Arrays sind Variablen in denen mehrere Werte gespeichert werden können. Das ist in vielerlei Hinsicht nützlich. Hat man zum Beispiel ein Array mit Zahlen, die wild in das Array eingegeben werden, und möchte dieses dann Sortiert ausgeben, so muss man es sortieren lassen. Oder auch Namen nach Alphabet sortieren, etc.

Dazu bietet PHP natürlich eine Funktion. Doch Moment. Erst einmal müssen wir wissen was für ein Array vorliegt. Ein einfaches oder ein Multidimensionales. Ein einfaches Array hat nur eine Ebene. Zum Beispiel:

$array[0] = "Max"; 
$array[1] = "Ernst"; 
$array[2] = "Sven";

… und so weiter.
Ein Multidimensionales Array besitzt mehrere Ebenen. Zum Beispiel:

$array[0]["Vorname"] = "Max"; 
$array[0]["Nachname"] = "Schlüter"; 
$array[1]["Vorname"] = "Ernst"; 
$array[1]["Nachname"] = "Mustermann";

Ein einfaches Array lässt sich mit einer Codezeile sortieren.

$array  = asort($array);
Für Aufsteigend und
$array  = asort($array);
Für Absteigende Sortierung.

Komplizierter wird es jetzt bei Multidimensionalen Arrays. Hier brauchen wir eine Hilfsfunktion.

function multisort($value_a, $ value _b) {
	$a = $value _a[1];
	$b = $value _b[1];
	if ($a == $b) {
		return 0;
	}
	return ($a < $b) ? -1 : +1;
}

usort($array, 'multisort');

Damit lässt sich dann auch ein Multidimensionales Array sortieren.

[PHP] Text richtig kürzen. Nach dem Wort, nicht mittendrin.

Hallo,

hier mal wieder ein Codeschnipsel den ich selbst des Öfteren brauche.

Ab und an muss man mit PHP ja mal einen Text kürzen. Zum Beispiel um eine kleine Vorschau des Textes in einer Kategorie anzuzeigen oder auf sonst einer Übersichtsseite.

Nun könnte man mit substr() den Text einfach nach der vorgegebenen Anzahl an Zeichen abschneiden und 3 Punkte dahinter setzen. Leider passiert dann in den meisten Fällen folgendes:

Hallo lieber Mann im Mo…

Der Text wird mitten im Wort abgeschnitten. Das sieht bescheiden aus. :( Und die Lösung ist so einfach. Die folgende Zeile schafft einfach Abhilfe. Hier wird der Text nur nach ganzen Wörtern abgeschnitten.

$string = Der Text der abgeschnitten werden soll.
$length = Nach wie vielen Zeichen soll der Text abgeschnitten werden.

$string = preg_replace("/[^ ]*$/", '', substr($string, 0, $length));