• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

if empty?

devilseye

Neues Mitglied
wie kann ich bei einem Formular die Pflichtfelder, schnell und einfach darauf prüfen
ob diese Leer sind oder nur "white Space" resp. tabulatoren vorhanden sind.
Im Normalfall werden dazu ja, empty und trim gebraucht aber wenn Name oder Nach-
name mehr als ein Wort sind dann Hilft trim nicht weiter.
Ich hoffe ich habe mich klar genug geäussert.

MFG Devilseye
 
Werbung:
okey nehmen wir an die variable ist gesetzt.

PHP:
$name = "Dal Molin";

dann setzte ich as trim

PHP:
$name = trim($name);

dann würde die Ausgabe so aussehen

DalMolin

ich möchte aber eigentlich dass das Leerzeichen zwischen den beiden
Wörtern bestehen bleibt.
 
Werbung:
Werbung:
Wenn Du die Inhalte aller Felder zusammenfügst und dann auf "leer" prüfst, wie willst Du dann feststellen welches Feld leer ist? Das kann doch nur funktionieren, wenn zufällig alle leer sind.
 
Es gibt Formular-Frameworks, die auch die Möglichkeit enthalten, Validatoren zu definieren. Ganz schematisch (lange nicht vollständig implementiert) funktionieren die so:

Es wird ein Formular definiert:

PHP:
$myForm = array(
    'name'   => 'myform',
    'method' => 'post',
    'action' => '',
    'submittext' => 'Abschicken',
    'fields' => array(
        array(
            'label'      => 'Name',
            'name'       => 'name',
            'type'       => 'text',
            'required'   => true,
            'args'       => array(),
            'filters'    => array('string', 'trim'),
            'validators' => array('notEmpty')
        ),
        array(
            'label'      => 'Alter',
            'name'       => 'age',
            'type'       => 'text',
            'required'   => true,
            'args'       => array(),
            'filters'    => array('int'),
            'validators' => array('greaterThan0')
        )
    )
);

Dieses kann über eine allgemeine Funktion gerendert werden:

PHP:
function formRender(array $form)
{
    $html = '';

    $html .= sprintf('<form method="%s" action="%s">' . "\n",
            $form['method'], $form['action']);

    foreach ($form['fields'] as $field) {
        $fieldName = $form['name'] . '_' . $field['name'];

        $html .= sprintf('<p><label for="%s">%s:</label> <input name="%s" type="%s" /></p>' . "\n",
                $fieldName, $field['label'], $fieldName, $field['type']);
    }

    $html .= sprintf('<p><input type="hidden" name="%s" value="" /><input type="submit" name="%s" value="%s" /></p>' . "\n",
            '_' . $form['name'], $form['name'], $form['submittext']);

    $html .= '</form>' . "\n";

    return $html;
}

Ausgabe:

HTML:
<form method="post" action="">
<p><label for="myform_name">Name:</label> <input name="myform_name" type="text" /></p>
<p><label for="myform_age">Alter:</label> <input name="myform_age" type="text" /></p>
<p><input type="hidden" name="_myform" value="" /><input type="submit" name="myform" value="Abschicken" /></p>
</form>

Außerdem kann geprüft werden, ob es abgeschickt wurde:

PHP:
function formIsSent(array $form)
{
    $requestVars = array();

    switch (strtolower($form['method'])) {
        case 'get':
            $requestVars = &$_GET;
            break;
        case 'post':
            $requestVars = &$_POST;
            break;
        default:
            // Unknown method
            break;
    }

    if (isset($requestVars['_' . $form['name']])) {
        return true;
    }

    return false;
}

Und ob die einzelnen Felder „valide“ sind:

PHP:
function formIsValid(array $form)
{
    $requestVars = array();

    switch (strtolower($form['method'])) {
        case 'get':
            $requestVars = &$_GET;
            break;
        case 'post':
            $requestVars = &$_POST;
            break;
        default:
            // Unknown method
            break;
    }

    foreach ($form['fields'] as $field) {
        if (isset($requestVars[$form['name'] . '_' . $field['name']])) {
            $value = &$requestVars[$form['name'] . '_' . $field['name']];

            foreach ($field['filters'] as $filter) {
                switch ($filter) {
                    case 'int':
                        $value = (int) $value;
                        break;
                    case 'string':
                        $value = (string) $value;
                        break;
                    case 'trim':
                        $value = trim($value);
                        break;
                    default:
                        // Unknown filter
                        break;
                }
            }

            foreach ($field['validators'] as $validator) {
               switch ($validator) {
                    case 'greaterThan0':
                        if (!is_int($value) || $value <= 0) {
                            throw new Exception(sprintf('Value for field "%s" is invalid. Value given "%s"', $field['name'], $value));
                        }
                        break;
                    case 'notEmpty':
                        if (!is_string($value) || $value === '') {
                            throw new Exception(sprintf('Value for field "%s" is invalid. Value given "%s"', $field['name'], $value));
                        }
                        break;
                    default:
                        // Unknown validator
                        break;
                }
            }

            unset($value);
        } else {
            if ($field['required'] === true) {
                throw new Exception(sprintf('Required field "%s" not set', $field['name']));
            }
        }
    }

    echo '<p>Data is valid.</p>';

    var_dump($requestVars);
}

Die letzte Funktion wirft derzeit nur Fehlermeldungen oder gibt die gefilterten korrekten Formularwerte aus.

Beispielaufruf der gesamten Sache:

PHP:
if (!formIsSent($myForm)) {
    echo formRender($myForm);
} else {
    formIsValid($myForm);
}

So ein Framework in ordentlich:

- Zend Framework: Documentation: Zend_Form - Zend Framework Manual
 
Zurück
Oben