Um Text sicher zu Filtern kann man mit dem Zend Framwork 2 Validator und einem HTML-Filter wie HTML Purifier eine Validierung des Inhaltes durchführen:
Kategorie: PHP
PHP Probleme,Tipps und Tricks
Mit Zend_Validator lässt sich eine sehr anspruchsvolle und sichere E-Mail Validierung durchführen, die man mit passenden Fehlermeldungen für den User bei Bedarf versehen kann:
<?php use Zend\Form\Element; use Zend\InputFilter\InputProviderInterface; use Zend\Validator; class EmailElement extends Element implements InputProviderInterface { protected $attributes = array( 'type' => 'email', ); private $wrongEmailMessage = 'Bitte geben Sie eine gültige E-Mail-Adresse an.'; public function getInputSpecification() { return array( 'name' => $this->getName(), 'filters' => array( array('name' => 'Zend\Filter\StringTrim'), ), 'attributes' => array( 'type' => 'email' ), 'validators' => array( array( 'name' => 'NotEmpty', 'options' => array( 'messages' => array( \Zend\Validator\NotEmpty::IS_EMPTY => $this->wrongEmailMessage ), ), ), array( 'name' => 'EmailAddress', 'options' => array( 'hostnameValidator' => null, 'messages' => array( \Zend\Validator\EmailAddress::INVALID => $this->wrongEmailMessage, \Zend\Validator\EmailAddress::INVALID_FORMAT => $this->wrongEmailMessage, \Zend\Validator\EmailAddress::INVALID_HOSTNAME => $this->wrongEmailMessage, \Zend\Validator\Hostname::CANNOT_DECODE_PUNYCODE => $this->wrongEmailMessag, \Zend\Validator\Hostname::INVALID => $this->wrongEmailMessage, \Zend\Validator\Hostname::INVALID_DASH => $this->wrongEmailMessage, \Zend\Validator\Hostname::INVALID_HOSTNAME => $this->wrongEmailMessage, \Zend\Validator\Hostname::INVALID_HOSTNAME_SCHEMA => $this->wrongEmailMessage, \Zend\Validator\Hostname::INVALID_LOCAL_NAME => $this->wrongEmailMessage, \Zend\Validator\Hostname::INVALID_URI => $this->wrongEmailMessage, \Zend\Validator\Hostname::IP_ADDRESS_NOT_ALLOWED => $this->wrongEmailMessage, \Zend\Validator\Hostname::UNDECIPHERABLE_TLD => $this->wrongEmailMessage, \Zend\Validator\Hostname::UNKNOWN_TLD => $this->wrongEmailMessage, \Zend\Validator\Hostname::LOCAL_NAME_NOT_ALLOWED => $this->wrongEmailMessage, \Zend\Validator\EmailAddress::INVALID_LOCAL_PART => $this->wrongEmailMessage, \Zend\Validator\EmailAddress::INVALID_MX_RECORD => $this->wrongEmailMessage, \Zend\Validator\EmailAddress::INVALID_SEGMENT => $this->wrongEmailMessage, \Zend\Validator\EmailAddress::DOT_ATOM => $this->wrongEmailMessage, \Zend\Validator\EmailAddress::QUOTED_STRING => $this->wrongEmailMessage, \Zend\Validator\EmailAddress::INVALID_LOCAL_PART => $this->wrongEmailMessage, ) ) ) ) ); } }
Um aus Amazon die richtigen Fehlermeldungen heraus zu kitzeln, müssen die Fatals gefangen werden und ausgegeben, sonst kann man lange suchen:
try { $this->getListMatchingProductsForEanOrQueryData($ean, $country); } catch(MarketplaceWebServiceProducts_Exception $e) { var_dump($e); die(); }
Führende Nullen oder Komma am Ende entfernen
Mit den Funktionen ltrim und rtrim lassen sich Leerzeichen und bestimmte störende Buchstaben am Anfang oder am Ende von Strings entfernen.
Bsp. Entfernen von führenden Nullen:
$string = "03423452"; $string = ltrim($string,'0'); //03423452
oder Komma am Ende entfernen
$string = "bla, bla,bla,"; $string = rtrim($string,','); //bla, bla,bla
Bei einem Abbruch findet ein Redirect auf den Warenkorb statt, weil die verkaufte Artikel Mange schon um 1 erniedrigt wurde und die Artikel nicht mehr kaufbar sind laut Datenbank.
Deswegen muss in der checkout_payment.php folgender Code eingefügt werden
if($_GET['payment_error'] == 'sofortueberweisung_direct') { /* require (DIR_WS_CLASSES . 'payment.php'); $payment_modules = new payment('sofortueberweisung_direct'); if ($confirmation = $payment_modules->confirmation()) { }*/ require_once (DIR_WS_CLASSES.'order.php'); require_once (DIR_FS_INC.'xtc_db_query.inc.php'); require_once (DIR_FS_INC.'xtc_get_prid.inc.php'); $order = new order(); for ($i = 0, $n = sizeof($order->products); $i < $n; $i ++) { xtc_db_query("update ".TABLE_PRODUCTS." set products_quantity = products_quantity + 1 where products_id = '".xtc_get_prid($order->products[$i]['id'])."'"); } unset($order); }
oberhalb von
// if there is nothing in the customers cart, redirect them to the shopping cart page if ($_SESSION['cart']->count_contents() < 1) xtc_redirect(xtc_href_link(FILENAME_SHOPPING_CART));
Um Seiten SEO-freundlich umzuleiten, kann man in PHP einen 301 Redirect machen_
header("Location: http://www. new-location.de/foo_new.php",true,301); exit;
Ich hatte dabei das Problem, das keine Fehlermeldung „Header already sent“ ausgegeben wurde, um herauszufinden, warum der Befehl nicht funktioniert. Es ist nämlich so, dass der header() Befehl nur funktioniert, wenn noch keine Bildschirmausgabe stattgefunden hat. Das betrifft auch Leerzeichen, wie sie oft bei PHP-Dateien vorkommen am Anfang oder Ende des Quellcodes:
_<?php
oder
?>_
Um diesen Stellen zu finden sollte man vor dem Redirect folgenden Code einfügen, wenn man keine Fehlermeldung „header already sent in line“bekommt:
if(headers_sent($file, $line)){ echo "Headers already sent in $file on line $line"; }
pdflib Installation unter Windows Xampp
Bei einer Fehlermeldung wie:
Fatal Error: Call to undefined function pdf_new();
fehlt die die pdf-lib Erweiterung für PHP.
Die Installation ist denkbar einfach:
- Download von pdflib8.0 für PHP (erste Zeile in der Mitte)
- öffnen der .zip und kopieren der passenden libpdf_php.dll, je nach PHP Version aus dem Verzeichnis /pdflib/bind/php/php-530-v8 in das Verzeichnis php/ext
- Eintrag in der php.ini: extension=libpdf_php.dll; hinzufügen an der extension Stelle
Zum Übersetzen von Texten eignet sich dieses Plugin vorzüglich. Es kommt bei meinem Blog nur zu Problemen, wenn Code übersetzt wird, was man jedoch verhindern kann, indem man alles in <pre>-Tags ausschließt.
wp-content/plugins/transposh-translation-filter-for-wordpress/core/parser.php Z. 139:
protected $ignore_tags = array('script' => 1, 'pre' => 1,'style' => 1, 'code' => 1, 'wfw:commentrss' => 1, 'comments' => 1, 'guid' => 1);
Am 6. Februar gab es diese Email von Amazon:
Amazon Marketplace Web Service (Amazon MWS) is pleased to announce the availability of the new Amazon MWS Products API section. The Amazon MWS Products API section will replace the Amazon Product Advertising API (PA-API) as the means for sellers to obtain sourcing, listing matching, and pricing information for offering products on Amazon marketplace sites. PA-API will be discontinued for Amazon sellers use on August 31, 2012.
Das bedeutet, dass alle Operationen umgestellt werden müssen, die mit der alten Products Advertising API für Sellers zu tun haben. Davon unbeeindruckt ist die Amazon Product Advertising API (PA-API) für Affiliate User, d.h. diejenigen, die Werbung damit schalten un Geld verdienen. Daran wird sich auch so schnell nichts mehr ändern, weil Amazon ein Interesse hat, diese Benutzer nicht zu verlieren.
Eine sehr gute Übersicht über die Unterschiede von Seller und Affiliate gibt es hier.
Bei folgender Fehler Meldung bei der Amazon MWS API:
Fatal error: Uncaught exception 'MarketplaceWebServiceProducts_Exception' with message 'parameter SellerSKUList.SellerSKU.x failed a validation check: Extraneous whitespace for input value: "64145345473 "' in foo\\MarketplaceWebServiceProducts\Client.php on line 533 MarketplaceWebServiceProducts_Exception: parameter SellerSKUList.SellerSKU.x failed a validation check: Extraneous whitespace for input value: "64145345473 " in foo\MarketplaceWebServiceProducts\Client.php on line 533
War die Lösung, wie die Fehlermeldung schon sagt, die Whitespaces zu entfernen mit trim:
for($i = 0; $i < count($skus); $i++) { $skus[$i] = trim($skus[$i]); }
Komischerweise funktioniert das nicht in PHP mit:
array_walk($skus, "trim");
oder
function trim_value(&$value)
{
$value = trim($value);
}
array_walk($skus, 'trim_value');