Partage
  • Partager sur Facebook
  • Partager sur Twitter

FAQ du forum PHP

A CONSULTER AVANT DE POSTER

14 mars 2008 à 20:51:09

LA DOCUMENTATION





RESSOURCES




ERREURS LES PLUS COURAMMENT RENCONTRÉES





FOIRE AUX QUESTIONS



PHP





MySQL





Apache





Si vous voulez proposer une nouvelle entrée, veuillez envoyer un message privé à Fayden
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 20:53:02

Auteur: Dentuk
J'ai vu des ! devant le nom de certaines fonctions ! Qu'est-ce que cela veut dire ?


Réponse :

Le ! représente la négation.

Dans cet exemple :

  1. <?php
  2. if(!ctype_digit($nombre))
  3.    echo "Nombre n'est pas un nombre entier.";


On aurait pu mettre :

  1. <?php
  2. if(ctype_digit($nombre) == false)
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 20:56:35

Auteur: T@kniX

Comment faire fonctionner les sessions sur free.fr ?

Réponse :

Free accepte les sessions, il faut simplement créer un dossier sessions à la racine du site.
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 21:02:30

Auteur: T@kniX

Comment récupérer l'id de l'enregistrement qui vient d'être inséré dans une table ?


Réponse :
Il faut utiliser la fonction mysql_insert_id()

  1. <?php
  2. mysql_query("INSERT INTO ma_table(colonne1, colonne2) VALUES('$var_1', '$var_2')");
  3. $id = mysql_insert_id();
  4. ?>
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 21:03:41

Auteur: T@kniX

Je désire exécuter un script à intervalles réguliers (par exemple un backup de ma bdd), comment faire ?


Réponse :

Le site WebCron (entre autres) propose cela gratuitement.
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 21:04:48

Auteur: Arnaud

Quelle est la différence entre isset() et empty() ?


Réponse :

Citation : DOC PHP

Isset : Détermine si une variable est affectée



Donc, on se fiche de la valeur de la variable, si quelqu'un envoi un formulaire vide, isset sur les $_POST affichera forcément TRUE, car les variables ont été crées, ( comme le premier exemple ).

Citation : DOC PHP

Si une variable a été détruite avec la fonction unset(), la fonction isset() renverra FALSE.
isset() renverra FALSE lors du test d'une variable de valeur NULL.
Notez aussi que le caractère nul ("\0") n'est pas équivalent à la constante PHP NULL.



-----------------


Citation : DOC PHP

Empty : Détermine si une variable contient une valeur non nulle



Donc contrairement à isset, empty "regarde" la valeur de la variable, elle renvoi FALSE pour les valeurs suivantes :

Citation : DOC PHP


"" (une chaîne vide)
0 (0 en tant qu'entier)
"0" (0 en tant que chaîne de caractères)
NULL
FALSE
array() (un tableau vide)
var $var; (une variable déclarée, mais sans valeur dans une classe)



Exemple


valeur isset($a) empty($a)
$a = '' True True
$a = 1 True False
$a = 0 True True
unset($a) False True
$a = ' ' True False
$a = 'a' True False
$a = Null False True
$a = False True True
$a = True True False


Note un input[text] vide aura pour valeur ''

Voila, c'est quelque chose que les codeurs qui débutent ont du mal à comprendre, regardez bien tout les exemples et les passages de la doc + Remarque.
</citation>
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 21:07:01

Auteur: Dentuk

Que signifie le ? et les : dans $var = ctype_digit($_GET['var']) ? abs($_GET['var']) : 1; ?


Réponse :

C'est une condition sous la forme ternaire.
La forme ternaire s'utilise ainsi : condition ? si_vrai : si_faux;
Un équivalent du code ci-dessus serait :

  1. if( ctype_digit($_GET['var']) )
  2.    $var = abs($_GET['var']);
  3. else
  4.    $var = 1;


On peut assigner une valeur à une variable selon certaines conditions, mais aussi dans les paramètres des fonctions.
On peut donc faire ceci :

  1. <?php
  2. echo 'Vous '.($niveau == NIVEAU_ADMIN ? 'avez' : "n'avez pas")." le niveau d'admin.";

(Où NIVEAU_ADMIN serait défini via la fonction define())
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 21:07:50

Auteur: T@kniX

Comment connaître le nombre d'enregistrement affecté par une requête (SELECT) ?


Réponse :

Réponse : Il faut utiliser la fonction mysql_num_rows()
Les exemples d'utilisation sont dans la doc
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 21:10:43

Auteur: Dentuk

Comment faire pour appliquer une fonction sur toutes les valeurs d'un array ?


Réponse :

La fonction array_map() est justement faite pour ça.
Vous pouvez donc, par exemple, faire ceci :

  1. <?php
  2. $monArray = array_map('htmlspecialchars', $monArray);
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 21:12:07

Auteur: Arnaud

Comment utiliser preg_replace_callback() avec une méthode d'une classe ?


Réponse :

Et bien, il suffit d'utiliser un array() en argument à la place de la fonction :

  1. <?php
  2. class blabla{
  3.     function parser($matches){
  4.         return '<div class="code">'.$matches[1].'</div>';
  5.     }
  6.     function plop($content){
  7.         preg_replace_callback('#<code>(.+)</code>#', array($this,'parser'), $content);
  8.     }
  9. }
  10. ?>
  • Partager sur Facebook
  • Partager sur Twitter
14 mars 2008 à 21:19:51

Auteur: T@kniX

Comment connaître le nombre d'enregistrements affectés par une requête (INSERT, UPDATE, DELETE) ?


Réponse :

Il faut utiliser la fonction mysql_affected_rows()
Les exemples d'utilisation sont dans la doc.
  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2008 à 19:25:15

Auteur: Cam

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ...


M@teo21 a pourtant dédié une partie aux Annexes, il évoque certains erreurs courantes, telle qu'une erreur dans une requête. En effet, pour afficher les erreurs de vos requêtes SQL (si rien n'est affiché, c'est que vous n'avez d'erreur ;) ), il suffit de rajouter or exit(mysql_error()) après votre requête, ce qui donne :

mysql_query( $votre_requete ) or exit(mysql_error());

Voici quelques erreurs type :
  • You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
    La syntaxe de votre requête n'est pas correcte (vous pouvez, par exemple, avoir oublié "FROM")
  • Table 'mysql.ma_table' doesn't exist
    La table ma_table n'existe pas (la base de donnée choisie est mysql)
  • ... Et bien d'autres, mon but n'est pas toutes les lister mais de vous en montrer un bref aperçu ;)
  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2008 à 19:28:39

Auteur: Cam

Cannot modify header information - headers already sent by ...


Encore une fois, M@teo21 évoque cette erreur dans son cours mais je vais approfondir cette erreur, et vous proposer des solutions efficaces. Si vous avez cette erreur : cannot modify header information - headers already sent by ..., pas de panique ! :p

En fait, les headers doivent être envoyés au navigateur en premier, et si vous avez mis du texte avant ces fameux headers, vous aurez cette erreur.

Mais que sont ces headers ? Vous pouvez les envoyer notamment avec session_start(), qui permet de démarrer les sessions, si le serveur utilise les cookies pour stocker l'identifiant de session. Dans ce cas, c'est l'enregistrement du cookie qui pose problème.

Même si le serveur n'utilise pas les cookies pour stocker l'identifiant de session on peut avoir cette erreur en appelant header(), setcookie() ou toute autre fonction nécessitant un envoi d'en-tête.

Cette erreur peut aussi survenir sur si votre page est encodée en UTF8 avec <acronym title="Byte Order Mark">BOM</acronym>. Ce caractère force l'envoi des headers ce qui empêche PHP de fonctionner correctement. Pour corriger ce problème, suffit de mettre votre page en UTF8 sans BOM. ;)


Et finalement, comment éviter cette erreur ? Vous pouvez utiliser une fonction de bufferisation (ce principe n'envoie aucune donnée, sauf les headers (appelés aussi en-têtes), mais ces données sont mises en buffer) : ob_start() en début de page et ob_end_flush() en fin de page, vous verrez, ça marche. ^^

Merci à anonymousguest et à Dentuk pour avoir signalé un petit détail (qui a son importance).
  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2008 à 19:31:35

Auteur: Cam

Parse error: syntax error, unexpected ...


Les "Parse error" sont des erreurs d'inattentions, vous pouvez normalement les corriger facilement. Ces erreurs sont notamment la cause d'un point-virgule oublié, ou même d'un point de concaténation oublié (ce sont souvent des oublis..). Premièrement, si vous obtenez une erreur de ce genre :

Parse error: syntax error, unexpected T_VARIABLE

En général, cela signifie que vous avez oublié un point virgule ou quelques choses du genre. Voici un exemple simple :
  1. <?php
  2. $une_variable = 'ma var' // L'erreur vient de là, un point-virgule a été oublié !
  3. $var_test = '';


Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

Quand vous avez cette erreur, vous pouvez avoir oublié un point servant à la concaténation. Voici un exemple :
  1. <?php
  2. $une_variable = 'ma var';
  3. $var_test = $une_variable ' texte'; // Un point de concaténation a été oublié après $une_variable !

Si vous obtenez cette erreur : Parse Error - Unexpected $end in [...], c'est que vous soit oublié une parenthèse fermante ou un point-virgule.

Avec le temps, vous rencontrerez sans doute d'autres erreurs de ce genre mais elles devraient normalement être corrigées rapidement, juste le temps de les trouver. ^^
  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2008 à 19:34:08

Auteur: Cam

Invalid argument supplied foreach


Si vous n'avez jamais utilisé la fonction foreach, elle permet d'exploiter les arrays (cf. cours de M@teo). Si vous obtenez une erreur de ce genre : Invalid argument supplied for foreach()

Voici un code très simple, je vais vous expliquer au fur et à mesure :
  1. <?php
  2. $var_test = 'mon texte';
  3. // On exploite le array (qui ici, n'est pas un array!)
  4. foreach( $var_test AS $test_foreach )
  5. {
  6.       echo $test_foreach . '<br />';
  7.       // Cela retournera : Warning: Invalid argument supplied for foreach()
  8. }

Le code ci-dessus n'est pas correct ! En fait, comme la fonction foreach() sert à exploiter les tableaux (ou arrays) et qu'ici, ce n'est pas un tableau, une erreur s'est produite. Il faut absolument que $var_test soit un tableau, sinon ça ne marchera jamais. ;)
  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2008 à 19:37:35

Auteur: Cam

Undefined index in ...


Ici je vais m'adresser aux personnes qui ont déjà aperçues ce genre d'erreur : Notice: Undefined index: test. Une chose est sûre, c'est une petite erreur, une notice. Ces erreurs notices ne sont que des erreurs mineures et sont facilement corrigeables. Voici un exemple :

  1. <?php
  2. // Toutes les erreurs sont désormais visibles (y compris les notices)
  3. error_reporting( E_ALL );
  4. echo $_GET['test'];
  5. // Si $_GET['test'] n'existe pas, le script va renvoyer une notice : Notice: Undefined index: test

La solution est simple, il suffit de vérifier si $_GET['test'] existe avant de l'afficher. Vous pouvez faire comme ceci : echo ( isset( $_GET['test'] ) ) ? $_GET['test'] : '' au lieu de cela : echo $_GET['test']
  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2008 à 19:40:53

Auteur: Cam

Warning: Division by zero in ...


Division by zero ? Ca vous dit quelque chose ? La traduction en français est similaire : division par zéro. En fait, je vais vous expliquer la raison pour laquelle vous avez, peut-être, obtenu une telle erreur : Warning: Division by zero. Voici un bout de code commenté :

  1. <?php
  2. $nbr_topics = 20;
  3. $topic_page = 1;
  4. echo ceil( $nbr_topics / $topic_page ); // Tout se passe bien ici
  5. echo ceil( $nbr_topics / 0 ); // Il est évident qu'ici, vous aurez une jolie erreur ! :o
  6. echo ceil( $nbr_topics / $var_nbr_page ); // Comme la variable $var_nbr_page n'existe pas, vous aurez la même erreur qu'avec le code ci-dessus
  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2008 à 19:43:59

Auteur: strucky

Notice: Use of undefined constant ...


Cette erreur peut se produire lorsque vous avez oublié le $ au début d'une variable.

  1. <?php
  2. $maVariable = 12;
  3. echo maVariable;
  4. ?>

Avertissement retourné :
Notice: Use of undefined constant maVariable - assumed 'maVariable' in /var/www/blog/index.php on line 9

Egalement lorsque l'on omet les cotes sur l'index (string) d'un tableau (erreurs très fréquentes chez les débutants).
  1. <?php
  2. $monArray = array('toto'=>10, 'titi'=>12, 'tutu'=>8, 'tata'=>15);
  3. echo $monArray[titi];
  4. ?>

Avertissement retourné :
Notice: Use of undefined constant titi - assumed 'titi' in /var/www/blog/index.php on line 7
  • Partager sur Facebook
  • Partager sur Twitter
15 mars 2008 à 19:47:02

Auteur: strucky

Resource id #5


Cette erreur survient lorsque vous avez utilisé le résultat d'un mysql_query() directement avec une fonction d'affichage (echo, print, print_r(), ... )

  1. <?php $sql = 'SELECT colonne_machin FROM table_truc WHERE colonne_bidule=12';
  2. $result = mysql_query($sql) or exit(mysql_error());
  3. echo $result; ?>


Le résultat que mysql_query() renvoi lors d'une requête SELECT retourne une ressource qui ne peut-être exploitée qu'avec les fonctions réservées à cet effet et qui sont pour les principales et plus utilisées :

  • Partager sur Facebook
  • Partager sur Twitter
16 mars 2008 à 16:28:11

Auteur: Cam

Comment activer l'envoi de mail() en local sur Windows ?


Vous n'arrivez pas à envoyer des emails avec la fonction mail() en local ? Si ça peut vous rassurer, c'est tout à fait normal, il faut modifier php.ini. ;)

Tout d'abord, il faut trouver le fichier de configuration php.ini, se trouvant normalement dans : C:\Program Files\Wamp\Apache2\bin pour Wamp (le repertoire est normalement similaire pour EasyPHP, si vous ne trouvez pas le fichier, faites une recherche avec le mot "php.ini").

Une fois ce fameux fichier trouvé, on passe à l'édition ! :)

[mail function];
;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
;For Win32 only.
SMTP = smtp.fai.fr
;For Win32 only.
sendmail_from = votre_adresse@fai.fr


En premier, cherchez un texte similaire à celui-ci dans votre fichier (si vous ne trouvez pas, recherchez "mail function" dans le fichier). Ensuite, il suffit de modifier le serveur SMTP destiné à l'envoi des mails, c'est généralement celui de votre <acronym title="Fournisseur d'Accès à Internet">FAI</acronym>. Et sendmail_from, c'est l'adresse email pour l'envoi du mail, celle fournie par votre FAI par exemple.

Une fois que vous avez terminé, enregistrez le fichier et relancez le serveur votre serveur de développement (Wamp, EasyPHP..). Vous pourrez désormais envoyer des mails en local ! ;)
  • Partager sur Facebook
  • Partager sur Twitter
16 mars 2008 à 16:31:25

Auteur: Cam

Comment activer le mod_rewrite d'Apache sur Windows ?


mod_rewrite, kesako ? C'est un module d'Apache permettant de créer des liens type url rewriting. En fait, avec l'url rewriting, vous pourrez faire des urls similaires au Site du Zéro, par exemple forum.html reverra (de manière transparente) vers index.php?p=forum, par exemple.

Je vais vous expliquer comment activer ce module sous Wamp, serveur de développement similaire à EasyPHP, l'opération est la même pour ces 2 logiciels. ;)

Tout d'abord, ouvrez le fichier httpd.conf qui se trouve dans le repertoire C:\Program Files\Wamp\Apache2\conf. Ensuite, recherchez cette ligne (aux environs de la ligne 106) :
#LoadModule rewrite_module modules/mod_rewrite.so


Pour activer le mod_rewrite, il suffit de décommenter (donc enlever le # devant la ligne) cette ligne. Ce qu'il vous reste à faire, c'est de redémarrer Apache ! ;)
  • Partager sur Facebook
  • Partager sur Twitter
17 mars 2008 à 20:15:11

Auteur: Harry COVER

Comment obtenir l'adresse IP d'un visiteur ?


$_SERVER['REMOTE_ADDR']

Cette question est fréquemment posée et cette variable permet d'obtenir l'adresse IP. Elle peut par exemple être utilisée ainsi :
<?php
echo 'Votre adresse IP est :' . htmlspecialchars($_SERVER['REMOTE_ADDR']);
?>
  • Partager sur Facebook
  • Partager sur Twitter
17 mars 2008 à 20:17:33

Auteur: strucky

A quoi sert le @ dans un code php ?


Réponse:

L'arobase sert à masquer les erreurs que retourne php.

Il est conseillé de s'en servir uniquement que si l'on gère correctement ses erreurs, et surtout pas pour cacher les erreurs de programmation ou de conception que l'on fait.

Exemple basique :

  1. <?php
  2. if( $fo = @fopen('compteur.txt') )
  3. {
  4.   $nbConnecte = trim(fgets($fo));
  5. }
  6. else
  7. {
  8.    // action à entreprendre en cas d'échec d'ouverture du fichier
  9. }


Exemple à ne pas faire :

  1. <?php
  2. echo @htmlspecialchars($_GET['var']); // on cache une notice de variable indéfinie
  • Partager sur Facebook
  • Partager sur Twitter
21 mars 2008 à 17:12:29

Auteur: strucky

Comment vérifier que ma variable est un nombre entier, une chaîne alphabétique ou alphabétique et numérique ?


Réponse:

Il existe toute une panoplie de fonctions bien pratique pour vérifier cela : ctype

  1. <?php
  2. if( ctype_digit($var) )
  3.   echo '$var est une chaîne contenant des entiers';
  4. if( ctype_alpha($var) )
  5.   echo '$var est une chaîne contenant les lettres de a à z (minuscules et majuscules)';
  6. if( ctype_alnum($var) )
  7.   echo '$var est une chaîne contenant des chiffres et lettres';
  • Partager sur Facebook
  • Partager sur Twitter
21 mars 2008 à 17:15:14

Auteur: strucky

Comment incrémenter une colonne d'une table en une seule requête ?


Réponse:

C'est simple, il suffit de reprendre la colonne et de lui ajouter la valeur, comme on le ferait en php :

  1. <?php
  2. $i = 1;
  3. $i = $i + 1;


Dans une requête SQL, on obtiendra donc par exemple :

  1. UPDATE la_table SET la_colonne = la_colonne + 1 WHERE id=25;
  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2008 à 23:25:37

Auteur: zolectronic

Comment supprimer les espaces contenus au début et à la fin d'une chaine de caractères ?


Réponse:
Il existe une fonction pour cela : trim()

Exemple :
<?php
$chaine = '    J\'aime pas les espaces qui servent à rien !       ';
 
$chaine_propre = trim($chaine); /*J'aime pas les espaces qui servent à rien !*/
?>


Et si je veux enlever seulement ceux en début de chaine ?


Réponse :
Pas de panique il existe aussi une fonction : ltrim()
PS : Pour ceux qui ne l'auraient pas vu il y a un 'l' devant pour signifier 'left' c'est à dire gauche et donc par conséquent 'enlever les espace situé à gauche' de la chaine.

Exemple :
<?php
$chaine = '    J\'aime pas les espaces qui servent à rien !    ';
 
$chaine_propre = ltrim($chaine); /*J'aime pas les espaces qui servent à rien !    */
?>


Et si je veux enlever seulement ceux en fin de chaine ?


Réponse :
Par déduction (pour ceux qui ont lu le PS) il suffit donc de rajouter un 'r' pour 'right' et donc de faire la fonction : rtrim().
Bravo c'est aussi simple que ça.

Exemple :
<?php
$chaine = '    J\'aime pas les espaces qui servent à rien !    ';
 
$chaine_propre = rtrim($chaine); /*    J'aime pas les espaces qui servent à rien !*/
?>


trim(), ltrim(), rtrim() effacent par défaut aussi les caractères suivants :
  • " " (ASCII 32 (0x20)), un espace ordinaire.
  • "\t" (ASCII 9 (0x09)), une tabulation.
  • "\n" (ASCII 10 (0x0A)), une nouvelle ligne (line feed).
  • "\r" (ASCII 13 (0x0D)), un retour chariot (carriage return).
  • "\0" (ASCII 0 (0x00)), le caractère NUL.
  • "\x0B" (ASCII 11 (0x0B)), une tabulation verticale.

Et si je ne veux effacer QUE les tabulations par exemple ?


Réponse :
A partir de PHP 4.1.0, il est possible de choisir le type de caractère que l'on souhaite effacer.
Pour cela il suffit de renseigner le deuxième paramètre.

Exemple :
<?php
$chaine = "    J\'aime pas les tabulations !    \t";
 
$chaine_propre = trim($chaine, "\t"); /*    J\'aime pas les tabulations !    */
?>


Si vous souhaitez effacer plusieurs caractères, il suffit de les lister dans ce deuxième argument.

Si vous ne renseignez pas ce deuxième argument, il supprimera tous les caractères de la liste.

Et si je veux enlever n'importe quel autre caractère ?


Réponse :
Vous pouvez aussi enlever n'importe quels caractères, il suffit pour cela de mettre simplement le caractère que vous souhaitez enlever en deuxième argument.

Exemple :
<?php
$chaine = 'les sssss en moinsssss';
 
$chaine_propre = trim($chaine, 's'); /*les sssss en moin*/
?>
  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2008 à 23:35:39

Auteur: strucky

Mes variables de sessions disparaissent après rechargement d'une page, pourquoi ?


Si vous rencontrez ce problème, il est fort probable que la configuration de php sur votre hébergement soit établi avec le register_globals activé.

Pour le vérifier, faites un :

  1. <?php echo ini_get('register_globals');


Si vous obtenez 1, c'est que malheureusement celui-ci est activé sur votre hébergement.

Qu'est-ce que le register_globals ?

C'est une directive de php qui transforme les variables super-globales (SESSION, POST, GET, COOKIE, etc..) en variables simples, c'est à dire que si l'on définit une variable de session du nom de pseudo ($_SESSION['pseudo']) , une variable $pseudo sera automatiquement créée.

En quoi cela pose t-il problème ?

Si vous avez déclaré une variable $_SESSION['pseudo'] dans une page, et que sur une seconde page vous utilisez une variable $pseudo, $_SESSION['pseudo'] sera écrasée par la variable $pseudo.

Si vous avez malencontreusement omit d'initialiser une variable dans votre script, un problème de sécurité survient, car l'utilisateur pourra la créer en l'ajoutant dans l'url de votre page, il est vital de toujours initialiser ses variables, register_globals à on ou pas d'ailleurs.

Comment régler le problème ?

Si vous avez de la chance, votre hébergeur autorise sa modification via un .htaccess, ajoutez dans un .htaccess donc :

  1. php_flag register_globals off


Si vous obtenez une erreur 500 : Internal Server Error, c'est que pas de chance pour vous, vous ne pouvez pas modifier cette directive.

Dans ce cas, la meilleure des solutions est de nommer différemment les variables super-globales en les préfixant pour les distinguer des autres variables "simples" de votre script, ainsi $_SESSION['pseudo'] pourrait devenir par exemple $_SESSION['sess_pseudo'], ainsi il n'y aurait plus de risque d'écrasement.

Dans php6 le register_globals n'existera plus, fort heureusement !
  • Partager sur Facebook
  • Partager sur Twitter
31 mars 2008 à 9:24:23

Auteur: strucky

Des caractères étranges s'affichent sur mon site à la place de caractères accentués, quelle en est la cause ?


Ce problème peut provenir de multiples endroits.

Il faut déjà définir quel type d'encodage on se sert dans ses pages et de s'y tenir pour tout.

Les étapes à vérifier lorsque l'on a ce type de problème :

1- Vérifier le type d'encodage utilisé dans votre éditeur de texte (Voir les options de celui-ci)
Certains éditeurs ne proposent pas l'iso-8859-1 dans les options (notepad++ par exemple), on choisira alors pour eux le format ANSI.

2- Vérifier que le charset de la balise meta utilisée dans vos pages html est le bon.

  1. <!-- Encodage en utf-8 -->
  2. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  3. <!-- Encodage en iso-8859-1 -->
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />


3- Vérifier le type d'encodage utilisé par php par défaut s'il est établi (fichier php.ini).
  1. <?php echo ini_get('default_charset');

Modifier s'il ne correspond pas à votre encodage, le default_charset en éditant le php.ini, ou en spécifiant le nouvel encodage dans l'entête avec header().

  1. <?php
  2. // Encodage d'une page html en utf-8
  3. header('Content-Type: text/html; charset=utf-8');
  4. // Encodage d'une page html en iso-8859-1
  5. header('Content-Type: text/html; charset=iso-8859-1');


4- Vérifier que l'encodage de la base de données est le bon, pour un site en iso-8859-1, on utilisera généralement une collation en latin_swedish_ci, pour un site en utf-8 une collation en utf8_general_ci.
Plus d'infos concernant les collations.

Si vous respectez tous ces points, vous ne devriez plus avoir de problèmes d'affichages de caractères corrompus dans vos pages.

5- Si après tout ceci vous avez encore des problèmes, vérifiez les variables de connexion/client de MySQL :

  1. SHOW VARIABLES LIKE 'character_set_%';


Si la valeur des variables character_set_client, character_set_connection et
character_set_results sont différentes entre elles, ou différentes de l'encodage que vous avez choisit pour vos pages, redéfinissez les avec une requête dans vos pages :

  1. -- Encodage en utf-8
  2. SET NAMES 'utf8';
  3. -- Encodage en iso-8859-1
  4. SET NAMES 'latin1';


Si vous avez la main sur le serveur, il est bien entendu préférable de les modifier dans la configuration de MySQL.
  • Partager sur Facebook
  • Partager sur Twitter
2 avril 2008 à 0:05:49

Auteur: tarzoune

Comment obtenir l'URL du site d'où vient le visiteur ?


Réponse:

Pour obtenir l'URL du site d'où vient le visiteur, on utilise une variable superglobale : $_SERVER['HTTP_REFERER']

On peut donc faire comme ceci :

  1. <?php
  2. echo 'Vous venez du site : ' . htmlspecialchars($_SERVER['HTTP_REFERER']);
  3. ?>


Attention : ne vous fiez pas tellement à cette fonction, le visiteur peut refuser d'afficher cette information ou la modifier.
  • Partager sur Facebook
  • Partager sur Twitter
2 avril 2008 à 0:08:48

Auteur: strucky

Comment sélectionner une ligne au hasard dans une table ?


Réponse:

En se servant de la fonction RAND() de MySQL.

  1. SELECT les_colonnes FROM la_table ORDER BY RAND() LIMIT 1;


Modifiez le LIMIT en fonction du nombre de lignes à sélectionner.

Cette requête est à utiliser sur des tables peu fournies, plus vos tables seront conséquentes, et plus le temps de réponses de MySQL sera long
  • Partager sur Facebook
  • Partager sur Twitter