| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 18417 -->
- <!-- 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.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('users', '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('users', '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 <code>!=</code> 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(
- 'users',
- 'username',
- 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 qu'aucun utilisateur dont l'id n'est pas celui spécifié,
- possède ce nom là <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 <code>!=</code>.
- </para>
- <programlisting language="php"><![CDATA[
- $post_id = $post->getId();
- $clause = $db->quoteInto('post_id = ?', $category_id);
- $validator = new Zend_Validate_Db_RecordExists(
- 'posts_categories',
- 'post_id',
- $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 <code>posts_categories</code> pour s'assurer
- qu'un enregistrement avec <code>post_id</code> corresponde à <varname>$category_id</varname>
- </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('users', 'id', null, $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
- <code>table</code> et <code>schema</code>. Voici un exemple:
- </para>
- <programlisting language="php"><![CDATA[
- $validator = new Zend_Validate_Db_RecordExists(array('table' => 'users',
- 'schema' => 'my'), 'id');
- ]]></programlisting>
- </sect3>
- </sect2>
|