Alter über Geburtsdatum mit PostgreSQL ermitteln

Wie man dynamisch das Alter anhand eines Geburtsdatums mit PostgreSQL bestimmt? Ganz einfach:

SELECT 
    id,
    firstname,
    lastname,
    date_of_birth,
    EXTRACT(YEAR FROM age(users.date_of_birth::DATE)) AS age
FROM users;

/*
id |firstname |lastname     |date_of_birth |age
-----------------------------------------------------
24 |"Max"     |"Mustermann" |"1987-08-12"  |25
51 |"John"    |"Doe"        |"1985-02-03"  |28
*/

UPSERT in PostgreSQL mit PHP

Diese kleine Methode erzeugt SQL-Queries (postgres) zum Erstellen oder Bearbeiten von Datensätzen. Als Parameter werden die Datensätze, die betreffende Tabelle und die Spalte mit dem Primärschlüssel übergeben.

Code:

  function getUpsertSQL($aRows, $sTable, $sIDField)
  {
    $sSQL = "";
    foreach( (array) $aRows as $aRow)
    {
        $sUpdate = "";
        $sWhere = " WHERE ".$sIDField."=".$aRow[$sIDField];
        foreach( (array) $aRow as $sColumnName => $mColumnValue)
        {
            if($sColumnName == $sIDField) continue;
            $sColumn = $sColumnName." = ".$mColumnValue;
            $sUpdate.= (empty($sUpdate) ? " SET ".$sColumn : ", ".$sColumn);
        }
        unset($aRow[$sIDField]);
        $sSQL.= "UPDATE ".$sTable.$sUpdate.$sWhere.";";
        $sSQL.= "INSERT INTO ".$sTable."(".implode(",",array_keys($aRow)).") ";
        $sSQL.= "SELECT ".implode(", ", array_values($aRow))." ";
        $sSQL.= "WHERE NOT EXISTS (SELECT 1 FROM ".$sTable." ".$sWhere.");";
    }
    return $sSQL;
  }

UPSERT in PostgreSQL mit PHP weiterlesen

Lightweight-PHP-Validator: Neue Version

Neue Features:
– Unterstützung von Fehlermeldungen
– Mehrsprachigkeit (deutsch / englisch) über Annotations
– Manuelles Festlegen einer Validierungsklasse

Definition der Fehlermeldungen über Annotations:
In der Validierungsklasse „ValidatorRules“ können die Fehlermeldungen in beliebig vielen Sprachen mit Hilfe von Annotations hinterlegt werden.

/**
 * @ErrorMessage[lang=de] Bitte geben Sie eine Zahl an, die kleiner ist als %.2f.
 * @ErrorMessage[lang=en] Please enter a number less than %.2f.
 */

public function check_less_than($mValue, $aParams)
{
    return (number_format($mValue, 15) < $aParams[0]);
}

Sprache festlegen:
Die Sprache in der die Fehlermeldungen zurückgegeben werden sollen, lässt sich im Validator ganz einfach über die Funktion „setLanguage“ festlegen.

$oValidator = new Validator();
$oValidator->setLanguage('de'); //Deutsch

Validieren und Fehlermeldung auslesen:
Die jeweilige Fehlermeldung kann direkt nach der Validierung über die Funktion „getLastErrorMessage“ ermittelt werden.

$oValidator->setLanguage('de');
$oValidator->isValid("15", 'less_than[10.90]'); //false
echo $oValidator->getLastErrorMessage();
//Bitte geben Sie eine Zahl an, die kleiner ist als 10.90.

//Nochmal auf Englisch
$oValidator->setLanguage('en');
$oValidator->isValid("15", 'less_than[10.90]'); //false
echo $oValidator->getLastErrorMessage();
//Please enter a number less than 10.90.

Lightweight-PHP-Validator: Neue Version weiterlesen

Anzahl der Tweets einer URL mit PHP auslesen

Die API von Twitter bietet die Möglichkeit, die Anzahl der Tweets einer URL auszulesen. Hierzu reicht es die folgende Adresse (http://urls.api.twitter.com/1/urls/count.json?url=http://meineurl) mit entsprechendem GET-Parameter (url) aufzurufen. Als Antwort erhält man ein JSON-Array mit der Tweetzahl.
Mit PHP kann das Ganze wie folgt aussehen:

Code:

function getTweetCount($sURL)
{
    $sJSON = file_get_contents("http://urls.api.twitter.com/1/urls/count.json?url=".urlencode($sURL));
    $aResult = json_decode($sJSON, true);
    return $aResult['count'];
}

Anzahl der Tweets einer URL mit PHP auslesen weiterlesen

Verzeichnis rekursiv mit PHP auslesen

Diese Methode durchläuft mit Hilfe des DirectoryIterators rekursiv das angegebene Verzeichnis und gibt die Struktur in Form eines Arrays zurück.

Code:

function iterateDir($sPath)
{
    $aRes = array();
    foreach(new DirectoryIterator($sPath) as $oItem)
    {
        if($oItem->isDir())
        {
            (!$oItem->isDot() ? $aRes[$oItem->getFilename()] = iterateDir($oItem->getPathname()):0);
            continue;
        }
        $aRes[] = $oItem->getFilename();
    } return $aRes;
}

Verzeichnis rekursiv mit PHP auslesen weiterlesen