Posts mit dem Label PHP werden angezeigt. Alle Posts anzeigen
Posts mit dem Label PHP werden angezeigt. Alle Posts anzeigen

Montag, 6. Januar 2014

ZF2 zweite Datebanktabelle Ansprechen, Tablegateway Tabelle wechseln

Im Zendframework 2 kann man pro Tabellenobjekt nur eine Tabelle ansprechen.

Daher muss man entweder ein neues Gatewayobjekt oder ein SQLobjekt erzeugen. Im folgenden Beispiel habe ich ein SQL -Objekt verwendet:

Zuerst lädt man die entsprechenden Klassen:
use Zend\Db\TableGateway\TableGateway;
use Zend\Db\Sql\Sql;
use Zend\Db\Sql\Where;


In der Methode geht man dann wie folgt vor:           
 // Adapter Einstellungen holen -> die sind in der Sekelleton Application unter: Config / Autoload / local.php bzw. global.php zu finden:
$mysql_adapter=$this->tableGateway->getAdapter();
// Falls man die Einstellungen sehen möchte:
//echo var_dump ($mysql_adapter);
// Erzeugen eines neuen SQL Objektes, falls man möchte kann man hier schon die Tabelle übergeben  (Achtung: Join abfragen funktionieren dann nicht):
       $sql = new Sql($mysql_adapter);
// Dann die Select Anweisung erstellen:
        $select = $sql->select();
// Auswählen der Tabelle 
        $select->from('tabelle');
// Auswählern der WHERE Anweisung
        $select->where('spalte='.$wert);
// SQL-Anweisung anzeigen lassen:
        echo $select->getSqlString();
// SQL Anweisung ausführbar machen:
        $selectString = $sql->getSqlStringForSqlObject($select);
// Und ausführen:
        $result = $mysql_adapter->query($selectString, $mysql_adapter::QUERY_MODE_EXECUTE);
// Falls man das Ergebnis direkt auswerten möchte, kann man das mit use Zend\Db\Adapter\Driver\ResultInterface; und
use Zend\Db\ResultSet\ResultSet; tun:

//Neues result-Objekt erzeugen und initialisieren
$resultSet = new ResultSet;
$resultSet->initialize($result);
//Jede Zeile auswerten:
            foreach ($resultSet as $row) {
                echo $row->spalte . PHP_EOL
            }

Freitag, 1. März 2013

Mod-Rewrite schneidet url ab

Es hatte mich einige Zeit gekostet heraus zufinden warum folgender Mod-Rewrite Befehl scheinbar nicht richtig arbeit:

RewriteRule ^(.*).html$ irgendwas.php?v1=$1

Wenn normale Zeichen gesendet wurden, funktioniert das prima aber sobald ein sonderzeichen ins spiel kam änderte sich das. Insbesondere durch das &-Zeichen.

Aus Bequemlichkeit habe ich die Begriffe alle HTML kodiert in er Datenbank gespeichert und so wandern diese dann auch in die Links wo sie urlcodiert ann so aussehen: M%26ouml%3Bbel+Lagerung

Grundsätzlich kein Problem  - für PHP aber schon. Da PHP anscheinend vor dem verarbeiten der GET - Parameter diese Decodiert. Was dazu führt das in PHP eine weitere  Variable angelegt wird:

VariableValue
_REQUEST["v1"]M
_REQUEST["ouml;bel_Lagerung_Wolfsheim_55578"]no value
_GET["v1"]M
_GET["ouml;bel_Lagerung_Wolfsheim_55578"]no value

Zunächst dachte ich MOD-Rewrite würde einen Fehler Produzieren aber es ist PHP!

Schaut man sich den Query String an wurde alles richtig übermittelt - aber ist decodiert(!):

_SERVER["QUERY_STRING"]                        v1=Möbel+Lagerung_Wolfsheim_55578

Ich nutze nun halt den Query String. Alternativ kann man auch alle &-Zeichen aus dem Link entfernen und später wieder einfügen.

Edit:

Die oben genannten infos findet man mit der funktion phpinfo() - der Fehler liegt also bei PHP nicht im mod_rewrite

Montag, 7. März 2011

PHP: Notice: Unknown: Invalid quoted-printable sequence:

Wenn man versucht eine base64 - codierte mail mit imap_qprint() zu decodieren bekommt man die Fehlermeldung:

Notice: Unknown: Invalid quoted-printable sequence: =_NextPart_???? Content-Type: text/plain; charset="iso-8859-1 (errflg=3) in Unknown on line 0

Wobei ??? für den Delimiter steht. Dies kann abgefangen werden mit:


$parts=explode("base64",$emailstring);
if (1{
$partsa=explode("------",$parts[1]);
$emailstring=base64_decode($partsa[0]);
$emailstring=utf8_decode($emailstring);
}
else
{
$emailstring=imap_qprint($emailstring);//decodieren der nachricht
}

Allerdings wird hier nur der erste Teil der Mime-Mail übersetzt - wahrscheinlich gibt es bessere Lösungen war jedoch die am schnellsten mir eingefallen ist. Eine suche nach PHP Mime base64 ergibt bestimmt noch andere lösungen.