Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > PHP > FOIRE AUX QUESTIONS PHP/MySQL > Lecture du sujet

FOIRE AUX QUESTIONS PHP/MySQL

A CONSULTER AVANT DE POSTER

Vous devez être inscrit pour pouvoir poster des messages

Page : 1  2  Suivante
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1  2  Suivante
Hors ligne strucky # Posté le 14/03/2008 à 20:51:08
Jamais content !
Avatar
Modérateurs

LA DOCUMENTATION





RESSOURCES DU SITE




ERREURS LES PLUS COURAMMENT RENCONTRÉES





FOIRE AUX QUESTIONS



PHP





MySQL





Pour compléter cette FAQ, vous pouvez apporter votre contribution dans ce sujet
Hors ligne strucky # Posté le 14/03/2008 à 20:53:02
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. if(!ctype_digit($nombre))
  3.    echo "Nombre n'est pas un nombre entier.";


On aurait pu mettre :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. if(ctype_digit($nombre) == false)
Hors ligne strucky # Posté le 14/03/2008 à 20:56:35
Jamais content !
Avatar
Modérateurs
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.
Hors ligne strucky # Posté le 14/03/2008 à 21:02:29
Jamais content !
Avatar
Modérateurs
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()

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. mysql_query("INSERT INTO ma_table(colonne1, colonne2) VALUES('$var_1', '$var_2')");
  3. ?>
Hors ligne strucky # Posté le 14/03/2008 à 21:03:40
Jamais content !
Avatar
Modérateurs
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.
Hors ligne strucky # Posté le 14/03/2008 à 21:04:48
Jamais content !
Avatar
Modérateurs
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


valeurisset($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>
Hors ligne strucky # Posté le 14/03/2008 à 21:07:00
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  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 :

Code : PHP - Afficher / masquer les numéros de ligne
  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())
Hors ligne strucky # Posté le 14/03/2008 à 21:07:49
Jamais content !
Avatar
Modérateurs
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
Hors ligne strucky # Posté le 14/03/2008 à 21:10:43
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $monArray = array_map('htmlspecialchars', $monArray);
Hors ligne strucky # Posté le 14/03/2008 à 21:12:06
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. class blabla{
  3.     function parser($matches){
  4.         return '<div class="code">'.$matches[1].'</div>';
  5.     }
  6.  
  7.     function plop($content){
  8.         preg_replace_callback('#<code>(.+)</code>#', array($this,'parser'), $content);
  9.     }
  10. }
  11. ?>
Hors ligne strucky # Posté le 14/03/2008 à 21:19:50
Jamais content !
Avatar
Modérateurs
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.
Hors ligne strucky # Posté le 15/03/2008 à 19:25:14
Jamais content !
Avatar
Modérateurs
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 ;)
Hors ligne strucky # Posté le 15/03/2008 à 19:28:38
Jamais content !
Avatar
Modérateurs
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 BOM. 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).
Hors ligne strucky # Posté le 15/03/2008 à 19:31:34
Jamais content !
Avatar
Modérateurs
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 :
Code : PHP - Afficher / masquer les numéros de ligne
  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 :
Code : PHP - Afficher / masquer les numéros de ligne
  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. ^^
Hors ligne strucky # Posté le 15/03/2008 à 19:34:07
Jamais content !
Avatar
Modérateurs
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 :
Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $var_test = 'mon texte';
  3.  
  4. // On exploite le array (qui ici, n'est pas un array!)
  5. foreach( $var_test AS $test_foreach )
  6. {
  7.       echo $test_foreach . '<br />';
  8.       // Cela retournera : Warning: Invalid argument supplied for foreach()
  9.  
  10. }

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. ;)
Hors ligne strucky # Posté le 15/03/2008 à 19:37:34
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. // Toutes les erreurs sont désormais visibles (y compris les notices)
  3. error_reporting( E_ALL );
  4.  
  5. echo $_GET['test'];
  6. // 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']
Hors ligne strucky # Posté le 15/03/2008 à 19:40:52
Jamais content !
Avatar
Modérateurs
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é :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $nbr_topics = 20;
  3. $topic_page = 1;
  4.  
  5. echo ceil( $nbr_topics / $topic_page ); // Tout se passe bien ici
  6. echo ceil( $nbr_topics / 0 ); // Il est évident qu'ici, vous aurez une jolie erreur ! :o
  7. 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
Hors ligne strucky # Posté le 15/03/2008 à 19:43:58
Jamais content !
Avatar
Modérateurs
Auteur: strucky

Notice: Use of undefined constant ...


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

Code : PHP - Afficher / masquer les numéros de ligne
  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).
Code : PHP - Afficher / masquer les numéros de ligne
  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
Hors ligne strucky # Posté le 15/03/2008 à 19:47:02
Jamais content !
Avatar
Modérateurs
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(), ... )

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php $sql = 'SELECT colonne_machin FROM table_truc WHERE colonne_bidule=12';
  2. $result = mysql_query($sql) or exit(mysql_error());
  3.  
  4. 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 :

Hors ligne strucky # Posté le 16/03/2008 à 16:28:10
Jamais content !
Avatar
Modérateurs
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 ! :)

Code : Console - Afficher / masquer les numéros de ligne
[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 FAI. 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 ! ;)
Hors ligne strucky # Posté le 16/03/2008 à 16:31:24
Jamais content !
Avatar
Modérateurs
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) :
Code : Console - Afficher / masquer les numéros de ligne
#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 ! ;)
Hors ligne strucky # Posté le 17/03/2008 à 20:15:10
Jamais content !
Avatar
Modérateurs
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 :
Code : PHP
1
2
3
<?php
echo 'Votre adresse IP est :' . htmlspecialchars($_SERVER['REMOTE_ADDR']);
?>
Hors ligne strucky # Posté le 17/03/2008 à 20:17:33
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  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 :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. echo @htmlspecialchars($_GET['var']); // on cache une notice de variable indéfinie
Hors ligne strucky # Posté le 21/03/2008 à 17:12:29
Jamais content !
Avatar
Modérateurs
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

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2.  
  3. if( ctype_digit($var) )
  4.   echo '$var est une chaîne contenant des entiers';
  5.  
  6. if( ctype_alpha($var) )
  7.   echo '$var est une chaîne contenant les lettres de a à z (minuscules et majuscules)';
  8.  
  9. if( ctype_alnum($var) )
  10.   echo '$var est une chaîne contenant des chiffres et lettres';
Hors ligne strucky # Posté le 21/03/2008 à 17:15:13
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php
  2. $i = 1;
  3. $i = $i + 1;


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

Code : SQL - Afficher / masquer les numéros de ligne
  1. UPDATE la_table SET la_colonne = la_colonne + 1 WHERE id=25;
Hors ligne strucky # Posté le 27/03/2008 à 23:25:36
Jamais content !
Avatar
Modérateurs
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 :
Code : PHP
1
2
3
4
5
<?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 :
Code : PHP
1
2
3
4
5
<?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 :
Code : PHP
1
2
3
4
5
<?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 :
Code : PHP
1
2
3
4
5
<?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 :
Code : PHP
1
2
3
4
5
<?php
$chaine = 'les sssss en moinsssss';
 
$chaine_propre = trim($chaine, 's'); /*les sssss en moin*/
?>
Hors ligne strucky # Posté le 27/03/2008 à 23:35:38
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  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 :

Code : Apache - Afficher / masquer les numéros de ligne
  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 !
Hors ligne strucky # Posté le 31/03/2008 à 09:24:22
Jamais content !
Avatar
Modérateurs
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.

Code : HTML - Afficher / masquer les numéros de ligne
  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).
Code : PHP - Afficher / masquer les numéros de ligne
  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().

Code : PHP - Afficher / masquer les numéros de ligne
  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 :

Code : SQL - Afficher / masquer les numéros de ligne
  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 :

Code : SQL - Afficher / masquer les numéros de ligne
  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.
Hors ligne strucky # Posté le 02/04/2008 à 00:05:48
Jamais content !
Avatar
Modérateurs
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 :

Code : PHP - Afficher / masquer les numéros de ligne
  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.
Hors ligne strucky # Posté le 02/04/2008 à 00:08:48
Jamais content !
Avatar
Modérateurs
Auteur: strucky

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


Réponse:

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

Code : SQL - Afficher / masquer les numéros de ligne
  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

Retour au forum "PHP" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 291 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.7051s (0.6866s)