| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 22767 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.validate.Db">
- <title>Db_RecordExists und Db_NoRecordExists</title>
- <para>
- <classname>Zend_Validate_Db_RecordExists</classname> und
- <classname>Zend_Validate_Db_NoRecordExists</classname> bieten die Möglichkeit zu testen ob
- ein Eintrag in einer angegebenen Tabelle einer Datenbank, mit einem gegebenen Wert,
- existiert.
- </para>
- <sect3 id="zend.validate.set.db.options">
- <title>Unterstützte Optionen für Zend_Validate_Db_*</title>
- <para>
- Die folgenden Optionen werden für
- <classname>Zend_Validate_Db_NoRecordExists</classname> und
- <classname>Zend_Validate_Db_RecordExists</classname> unterstützt:
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis><property>adapter</property></emphasis>: Der Datenbank-Adapter welcher
- für die Suche verwendet wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>exclude</property></emphasis>: Setzt die Einträge welche von
- der Suche ausgenommen werden.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>field</property></emphasis>: Das Datenbank-Feld in dieser
- Tabelle welches nach dem Eintrag durchsucht wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>schema</property></emphasis>: Setzt das Schema welches für
- die Suche verwendet wird.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>table</property></emphasis>: Die Tabelle welche nach dem
- Eintrag durchsucht wird.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.validate.db.basic-usage">
- <title>Grundsätzliche Verwendung</title>
- <para>
- Ein Beispiel der rundsätzlichen Verwendung der Validatoren:
- </para>
- <programlisting language="php"><![CDATA[
- // Prüft ob die Email Adresse in der Datenbank existiert
- $validator = new Zend_Validate_Db_RecordExists(
- array(
- 'table' => 'users',
- 'field' => 'emailaddress'
- )
- );
- if ($validator->isValid($emailaddress)) {
- // Die Email Adresse scheint gültig zu sein
- } else {
- // Die Email Adresse ist ungültig; gib die Gründe an
- foreach ($validator->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- Das oben stehende testet ob eine gegebene Email Adresse in der Datenbanktabelle
- vorhanden ist. Wenn kein Eintrag gefunden wird der den Wert von
- <varname>$emailaddress</varname> in der spezifizierten Spalte hat, wird eine
- Fehlermeldung angezeigt.
- </para>
- <programlisting language="php"><![CDATA[
- // Prüft ob der Benutzername in der Datenbank existiert
- $validator = new Zend_Validate_Db_NoRecordExists(
- array(
- 'table' => 'users',
- 'field' => 'username'
- )
- );
- if ($validator->isValid($username)) {
- // Der Benutzername scheint gültig zu sein
- } else {
- // Der Benutzername ist ungültig; gib die Gründe an
- $messages = $validator->getMessages();
- foreach ($messages as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- Das oben stehende testet ob ein angegebener Benutzername nicht in der Datenbanktabelle
- vorhanden ist. Wenn ein Eintrag gefunden wird, der den der von
- <varname>$username</varname> in der spezifizierten Spalte enthält, dann wird eine
- Fehlermeldung angezeigt.
- </para>
- </sect3>
- <sect3 id="zend.validate.db.excluding-records">
- <title>Ausnehmen von Einträgen</title>
- <para>
- <classname>Zend_Validate_Db_RecordExists</classname> und
- <classname>Zend_Validate_Db_NoRecordExists</classname> bieten auch die Möglichkeit die
- Datenbank zu testen, wobei Teile der Tabelle hiervon ausgenommen werden, entweder indem
- eine where Klausel als String angegeben wird, oder ein Array mit den Schlüsseln "field"
- und "value".
- </para>
- <para>
- Wenn ein Array für die Ausnahmeklausel angegeben wird, dann wird der
- <emphasis>!=</emphasis> Operator verwenden. Damit kann der Rest einer Tabelle auf einen
- Wert geprüft werden bevor ein Eintrag geändert wird (zum Beispiel in einem Formular für
- ein Benutzerprofil).
- </para>
- <programlisting language="php"><![CDATA[
- // Prüft ob kein anderer Benutzer diesen Benutzernamen hat
- $user_id = $user->getId();
- $validator = new Zend_Validate_Db_NoRecordExists(
- array(
- 'table' => 'users',
- 'field' => 'username',
- 'exclude' => array(
- 'field' => 'id',
- 'value' => $user_id
- )
- )
- );
- if ($validator->isValid($username)) {
- // Der Benutzername scheint gültig zu sein
- } else {
- // Der Benutzername ist ungültig; zeige den Grund
- $messages = $validator->getMessages();
- foreach ($messages as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- Das obige Beispiel prüft die Tabelle um sicherzustellen das keine anderen Einträge
- existieren bei denen <command>id = $user_id</command> als Wert $username enthalten.
- </para>
- <para>
- Man kann auch einen String an die Ausnahmeklausel angeben damit man einen anderen
- Operator als <emphasis>!=</emphasis> verwenden kann. Das kann nützlich sein um bei
- geteilten Schlüsseln zu testen.
- </para>
- <programlisting language="php"><![CDATA[
- $post_id = $post->getId();
- $clause = $db->quoteInto('post_id = ?', $category_id);
- $validator = new Zend_Validate_Db_RecordExists(
- array(
- 'table' => 'posts_categories',
- 'field' => 'post_id',
- 'exclude' => $clause
- );
- if ($validator->isValid($username)) {
- // Der Benutzername scheint gültig zu sein
- } else {
- // Der Benutzername ist ungültig; die Gründe ausgeben
- $messages = $validator->getMessages();
- foreach ($messages as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- Das obige Beispiel prüft die Tabelle 'posts_categories' und stellt sicher das ein
- Eintrag der 'post_id' einen Wert hat der <varname>$category_id</varname> entspricht.
- </para>
- </sect3>
- <sect3 id="zend.validate.db.database-adapters">
- <title>Datenbank Adapter</title>
- <para>
- Man kann auch einen Adapter spezifizieren wenn man die Prüfung
- instanziiert. Das erlaubt es mit Anwendungen zu arbeiten die mehrere Datenbankadapter
- verwenden, oder wo kein Standardadapter gesetzt wird. Als Beispiel:
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_Db_RecordExists(
- array(
- 'table' => 'users',
- 'field' => 'id',
- 'adapter' => $dbAdapter
- )
- );
- ]]></programlisting>
- </sect3>
- <sect3 id="zend.validate.db.database-schemas">
- <title>Datenbank Schemas</title>
- <para>
- Man kann für die eigene Datenbank bei Adaptern wie PostgreSQL und DB/2 ein Schema
- spezifizieren indem einfach ein Array mit den Schlüsseln <property>table</property> und
- <property>schema</property> angegeben wird. Anbei ein Beispiel:
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_Db_RecordExists(
- array(
- 'table' => 'users',
- 'schema' => 'my',
- 'field' => 'id'
- )
- );
- ]]></programlisting>
- </sect3>
- </sect2>
|