Kategorien
PHP Zend Framework

ZF2 Zend Form Validierung: User Text-Eingaben

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:

Kategorien
PHP Zend Framework

ZF2 Zend Form Validierung: Email-Adressen

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,
                            )
                        )
                    )
                )
            );
        }
    }
Kategorien
Amazon MWS PHP

Products API gibt keine richtigen Fehlermledungen nur Fatal Error

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();
                }
Kategorien
PHP

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
Kategorien
PHP XT-Commerce

XTCommerce Sofortüberweisungs Modul leitet bei Abbruch auf Warenkorb weiter

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));

 

Kategorien
PHP SEO

PHP Redirect Header funktioniert nicht

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";
    }

 

Kategorien
PHP

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:

  1. Download von pdflib8.0 für PHP (erste Zeile in der Mitte)
  2. ö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
  3. Eintrag in der php.ini: extension=libpdf_php.dll; hinzufügen an der extension Stelle
Kategorien
PHP WordPress

WordPress Plugin Transposh Ignore Tag

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);
Kategorien
Amazon MWS

MWS Products API wird ersetzt durch Amazon Product Advertising API (PA-API)

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.

Kategorien
Amazon MWS PHP

Amazon MWS: SellerSKUList failed a validation check: Extraneous whitespace for input value

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');