| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect2 id="zend.validate.Db">
- <title>Db_RecordExists et Db_NoRecordExists</title>
- <para>
- <classname>Zend_Validate_Db_RecordExists</classname> et
- <classname>Zend_Validate_Db_NoRecordExists</classname> permettent de vérifier si un enregistrement
- existe (ou pas) dans une table de base de données.
- </para>
- <sect3 id="zend.validate.set.db.options">
- <title>Options supportées par Zend_Validate_Db_*</title>
- <para>
- Les options suivantes sont supportées par
- <classname>Zend_Validate_Db_NoRecordExists</classname> et
- <classname>Zend_Validate_Db_RecordExists</classname> :
- </para>
- <itemizedlist>
- <listitem>
- <para>
- <emphasis><property>adapter</property></emphasis> : l'adaptateur de base
- de données qui sera utilisé pour la recherche.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>exclude</property></emphasis> : jeu d'enregistrements
- qui seront exclus de la recherche.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>field</property></emphasis> : le champs dans la table
- de la base de données dans lequel sera effectué la recherche.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>schema</property></emphasis> : le schéma utilisé
- pour la recherche.
- </para>
- </listitem>
- <listitem>
- <para>
- <emphasis><property>table</property></emphasis> : la table qui sera
- utilisée pour la recherche.
- </para>
- </listitem>
- </itemizedlist>
- </sect3>
- <sect3 id="zend.validate.db.basic-usage">
- <title>Utilisation de base</title>
- <para>
- Voici un exemple basique:
- </para>
- <programlisting language="php"><![CDATA[
- //Vérifie que l'email existe bien dans la base de données
- $validator = new Zend_Validate_Db_RecordExists(
- array(
- 'table' => 'users',
- 'field' => 'emailaddress'
- )
- );
- if ($validator->isValid($emailaddress)) {
- // l'adresse email existe
- } else {
- // l'adresse email n'existe pas, affichons les messages d'erreur
- foreach ($validator->getMessages() as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- Le code ci-dessus vérifie la présence d'une adresse email <varname>$emailaddress</varname>
- vis à vis d'un champ d'une table de base de données.
- </para>
- <programlisting language="php"><![CDATA[
- //Vérifie que le nom d'utilisateur n'est pas présent dans la table
- $validator = new Zend_Validate_Db_NoRecordExists(
- array(
- 'table' => 'users',
- 'field' => 'username'
- )
- );
- if ($validator->isValid($username)) {
- // Le nom d'utilisateur semble absent de la table
- } else {
- // invalide : l'utilisateur est probablement présent dans la table
- $messages = $validator->getMessages();
- foreach ($messages as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- Le code ci-dessus vérifie l'absence d'un nom d'utilisateur <varname>$username</varname>
- vis à vis d'un champ d'une table de base de données.
- </para>
- </sect3>
- <sect3 id="zend.validate.db.excluding-records">
- <title>Exclure des enregistrement</title>
- <para>
- <classname>Zend_Validate_Db_RecordExists</classname> et
- <classname>Zend_Validate_Db_NoRecordExists</classname> proposent aussi un moyen de tester
- la base de données en excluant certaines parties de table, en passant une clause where
- ou un tableau de paires "champs" "valeur".
- </para>
- <para>
- Lorsqu'un tableau est passé, l'opérateur <emphasis>!=</emphasis> est utilisé et vous
- pouvez ainsi tester le reste de la table.
- </para>
- <programlisting language="php"><![CDATA[
- // Vérifie qu'aucun autre utilisateur que celui dont l'id est spécifié,
- // ne possède ce nom
- $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)) {
- // OK
- } else {
- // KO
- $messages = $validator->getMessages();
- foreach ($messages as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- L'exemple ci dessus va vérifier dans la table qu'aucun autre enregistrement que celui
- pour lequel <command>id = $user_id</command> ne contient la valeur
- <varname>$username</varname>.
- </para>
- <para>
- La clause d'exclusion peut aussi être renseignée avec une chaine afin de pouvoir utiliser
- un opérateur autre que <emphasis>!=</emphasis>.
- </para>
- <programlisting language="php"><![CDATA[
- $email = 'user@example.com';
- $clause = $db->quoteInto('email = ?', $email);
- $validator = new Zend_Validate_Db_RecordExists(
- array(
- 'table' => 'users',
- 'field' => 'username',
- 'exclude' => $clause
- )
- );
- if ($validator->isValid($username)) {
- // OK
- } else {
- // KO
- $messages = $validator->getMessages();
- foreach ($messages as $message) {
- echo "$message\n";
- }
- }
- ]]></programlisting>
- <para>
- L'exemple ci-dessus vérifie la table 'users' pour s'assurer
- qu'un seul enregistrement avec un nom <varname>$username</varname> et un
- email <varname>$email</varname> est valide.
- </para>
- </sect3>
- <sect3 id="zend.validate.db.database-adapters">
- <title>Adaptateurs de base de données</title>
- <para>
- Un adaptateur spécifique peut être passé au validateur. Dans le cas contraire,
- il utilisera l'adaptateur déclaré comme étant celui par défaut:
- </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>Nom des bases de données</title>
- <para>
- Vous pouvez spécifier un nom de base de données (schéma) pour l'adaptateur
- PostgreSQL et DB/2 simplement grâce à un tableau possédant les clés
- <property>table</property> et <property>schema</property>. Voici un exemple :
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_Db_RecordExists(
- array(
- 'table' => 'users',
- 'schema' => 'my',
- 'field' => 'id'
- )
- );
- ]]></programlisting>
- </sect3>
- </sect2>
|