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 : Précédente  1  2 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : Précédente  1  2 
Hors ligne strucky # Posté le 02/04/2008 à 00:08:48
Jamais content !
Avatar
Modérateurs
Reprise du dernier message de la page précédente :
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
Hors ligne strucky # Posté le 02/04/2008 à 00:14:58
Jamais content !
Avatar
Modérateurs
Auteur: strucky

Comment récupérer la ligne d'une table dont une colonne possède la plus grande valeur ?


2 méthodes :

Avec un LIMIT

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT les_colonnes FROM la_table ORDER BY colonneX DESC LIMIT 1;


Avec une sous-requête et un MAX(), méthode sans doute plus légère sur des tables conséquentes.

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT les_colonnes FROM la_table WHERE colonneX = (SELECT MAX(colonneX) FROM la_table);
Hors ligne strucky # Posté le 02/04/2008 à 00:17:29
Jamais content !
Avatar
Modérateurs
Auteur: strucky

Comment récupérer la plus grande valeur de chaque groupes dans une table ?


Réponse:

Avec une sous-requête :

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT colA, colZ FROM la_table T1
  2. WHERE colZ = (
  3.    SELECT MAX(colZ) FROM la_table T2 WHERE T1.colA = T2.colA
  4. );


On récupérera donc toutes les entrées de la table par groupe sur colA avec la valeur la plus grande de colZ.

Autre méthode donnant le même résultat avec une auto-jointure :

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT T1.colA, T1.colZ FROM la_table T1
  2. INNER JOIN la_table T2
  3.   ON T1.colA = T2.colA
  4.   AND T1.colZ <= T2.colZ
  5. GROUP BY T1.colZ HAVING COUNT(*) = 1;
Hors ligne strucky # Posté le 02/04/2008 à 00:21:24
Jamais content !
Avatar
Modérateurs
Auteur: strucky

Comment sélectionner les lignes d'une table dont le 1er caractère d'une colonne doit-être une lettre ou un chiffre ?


En se servant de la fonction LEFT() et de l'expression BETWEEN de MySQL.

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT les_colonnes FROM la_table WHERE LEFT(colX, 1) BETWEEN 'a' AND 'z';


Cette requête ne fera pas de différences entre minuscules et majucules pour colX si vous avez une collation insensible à la casse.

Récupérer seulement les lignes ou le 1er caractère de colX est une lettre en minuscule ?

En se servant de l'expression BINARY

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT les_colonnes FROM la_table WHERE LEFT(BINARY colX, 1) BETWEEN 'a' AND 'z';


Une lettre en majuscule uniquement :

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT les_colonnes FROM la_table WHERE LEFT(BINARY colX, 1) BETWEEN 'A' AND 'Z';


Récupérer les lignes dont le 1er caractère de colX est un chiffre de 1 à 9

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT les_colonnes FROM la_table WHERE LEFT(colX, 1) BETWEEN 1 AND 9;


Si vous désirez obtenir celles ou le 1er caractère vaut également 0, il faudra quoter les chiffres dans le BETWEEN


Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT les_colonnes FROM la_table WHERE LEFT(colX, 1) BETWEEN '0' AND '9';


Les lignes où le 1er caractère de colX est une lettre ou chiffre ?

Code : SQL - Afficher / masquer les numéros de ligne
  1. SELECT les_colonnes FROM la_table WHERE colX REGEXP '^[[:alnum:]]';
Hors ligne strucky # Posté le 12/04/2008 à 15:20:12
Jamais content !
Avatar
Modérateurs
Auteur: strucky

Comment récupérer l'url de ma page en cours ?


Réponse:

Pour récupérer toute l'url, c'est à dire avec les paramètres GET, il faut se servir de :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php $_SERVER['REQUEST_URI']


Si l'on désire récupérer uniquement l'url sans les arguments GET :

Code : PHP - Afficher / masquer les numéros de ligne
  1. <?php $_SERVER['PHP_SELF']
Hors ligne strucky # Posté le 12/04/2008 à 15:23:53
Jamais content !
Avatar
Modérateurs
Auteur: strucky

Fatal error: Cannot redeclare ma_fonction() (previously declared in /var/www/monfichier.php:8) in /var/www/monfichier.php on line 11


Si vous avez ce genre d'erreur, c'est que vous tentez de redéclarer une fonction de votre script qui l'a déjà été.

- Vérifiez donc que dans le script de votre page, vous ne l'avez pas déclarée explicitement plus d'une fois.
- Vérifiez que la déclaration de votre fonction ne se situe pas dans une boucle, si c'est le cas, sortez-là de cette boucle.
- Vérifiez que vous ne faîtes pas plusieurs includes de votre fichier contenant cette fonction.
Si vous ne savez pas comment faire pour savoir si votre fichier contenant cette fonction a déjà appelé quelque part dans votre application, include_once et require_once sont vos alliés.
Hors ligne strucky # Posté le 26/04/2008 à 12:50:51
Jamais content !
Avatar
Modérateurs
Auteur: strucky

Mes cookies ne fonctionnent pas, quelles peuvent-en être les raisons ?


Réponse:

A savoir, un cookie n'est disponible (après l'avoir créé bien entendu) seulement qu'après rechargement de la page en cours, ou chargement d'une autre page.


Par étape :

- Vérifiez les options de votre navigateur, est-il configuré de façon à accepter les cookies ?
- Toujours sur votre navigateur, vérifiez si oui ou non vos cookies y sont présents (voir options de celui-ci).
- Vérifiez que vous avez bien spécifié une durée de vie du cookie correcte (supérieure au timestamp actuel).
- Si vous créez vos cookies dans une page étant dans un sous-répertoire de votre site, et que vous en avez besoin dans une page située à sa racine, vous devez renseigner le 4ème argument de la fonction, dans le cas exposé, un / donc (racine du site).

Comme toujours la documentation est votre meilleure alliée.
Hors ligne strucky # Posté le 26/04/2008 à 12:53:21
Jamais content !
Avatar
Modérateurs
Auteur: strucky

Comment faire des actions différentes sur mon formulaire en fonction du bouton submit utilisé ?


Réponse:

La solution est simple, il suffit de donner des name à chaque input submit de votre form, et de tester dans votre script lequel a été utilisé.

Code : PHP
1
2
3
4
5
6
7
8
9
<form action="" method="post">
<!--
Champs de mon formulaire
-->
<p>
   <input type="submit" name="envoi" value="Envoyer" />
   <input type="submit" name="prevu" value="Visualiser" />
</p>
</form>


Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
if( !empty($_POST) )
{
   if( isset($_POST['prevu']) )
   {
      // Code faisant la prévisualisation
   }
   else
   {
      // Code de l'enregistrement
   }
}
Hors ligne strucky # Posté le 04/11/2008 à 11:39:45
Jamais content !
Avatar
Modérateurs
Auteur : strucky

Comment transférer des données d'une table à une autre simplement ?


Réponse:

Il suffit simplement d'utiliser la syntaxe INSERT ... SELECT

Exemple :

Code : MySQL
1
2
INSERT INTO laTableDeDestination(colonneX, colonneY)
SELECT colonneX, colonneY FROM laTableSource;


Comme toujours, consultez la doc pour de plus amples informations.
Hors ligne strucky # Posté le 13/11/2008 à 11:02:42
Jamais content !
Avatar
Modérateurs
Auteur: Makkhdyn

Comment afficher le code source d'une page php ?


Vous pouvez le faire directement en spécifiant une extension .phps à votre fichier dans l'url si votre hébergeur l'autorise.

Sinon tenter d'ajouter
Code : Apache
1
AddType application/x-httpd-php-source .phps


Dans un .htaccess, ou mieux éditez votre httpd.conf si vous êtes maitre du serveur.

Autre solution pour le faire avec un petit bout de code php.

Code : PHP
1
2
3
4
5
6
<?php
if(isset($_GET['source']))
{
    exit(show_source(__FILE__));
}
?>


Explication : Il suffit d'ajouter ?source à l'url qui mène à cette page pour pouvoir voir la source.
Hors ligne strucky # Posté le 18/11/2008 à 20:34:03
Jamais content !
Avatar
Modérateurs
Auteur: thelittlegui

Comment inverser les effets du nl2br ?


Réponse :

Avec une petite fonction se servant d'un str_replace().

Code : PHP
1
2
3
4
5
6
<?php
function br2nl($string)
{
    return str_replace(nl2br("\n"), "\n", $string); // Vous pouvez remplacer directement nl2br("\n") par <br> ou <br /> selon votre version de php
}
?>


Exemple:
Code : PHP
1
2
3
4
5
<?php
$chaine = "test<br />\ntest"; //Sous PHP >= 4.0.5
$chaine = "test<br>\ntest"; //Sous PHP < 4.0.5
echo br2nl($chaine);
?>


Citation : Rendu
test
test
Hors ligne strucky # Posté le 23/11/2008 à 20:47:46
Jamais content !
Avatar
Modérateurs
Auteur : Bison

Comment savoir si une année est bissextile ?


Réponse :

Citation : Wikipedia
Depuis l'instauration du calendrier grégorien, sont bissextiles les années :
divisibles par 4 mais non divisibles par 100 ou divisibles par 400.


Code : PHP
1
2
3
4
5
6
<?php
function bissextile($annee)
{
    return checkdate(2,29,$annee);
}
?>

checkdate() retournera donc false pour les années ne comportant pas de 29 février.

Exemple:

Code : PHP
1
2
3
4
5
6
7
8
<?php
$i = 1999;
while(++$i < 2006)
{
    echo $i.' : ';
    var_dump(bissextile($i));
}
?>


Citation : Résultat
2000 : bool(true)
2001 : bool(false)
2002 : bool(false)
2003 : bool(false)
2004 : bool(true)
2005 : bool(false)
Hors ligne strucky # Posté le 23/11/2008 à 20:56:21
Jamais content !
Avatar
Modérateurs
Auteur: Flolfou

Comment vérifier la validité du domaine d'une adresse email ?


Réponse :

Code : PHP
1
2
3
4
5
6
<?php
function verif_email($email)
{
    list($user, $domaine) = split("@", $email,2);
    return(checkdnsrr($domaine, "MX"));
}?>


Exemple:
Code : PHP
1
2
3
4
5
6
<?php
if(verif_email('siteduzero@hotmail.com'))
    echo 'hotmail.com existe bien';
else
    echo 'hotmail.com n\'existe pas';
?>


Citation : résultat
hotmail.com existe bien


La fonction checkdnsrr() n'est pas disponible sur système windows.

Dans le cas où vous développeriez sur système windows et que votre site serait en production sur système linux, vous pouvez créer cette fonction en ne retournant qu'un simple booléen dans le but d'éviter la génération d'une erreur fatale.

Code : PHP
1
2
3
4
5
6
7
8
<?php
if( !function_exists('checkdnsrr') )
{
    function checkdnsrr()
    {
        return true;
    }
}
Hors ligne strucky # Posté le 25/11/2008 à 15:52:23
Jamais content !
Avatar
Modérateurs
Auteur : strucky

Comment passer plusieurs informations dans des champs de formulaire portant le même name lors d'une soumission ?


Simplement en indiquant que l'on passe un array, les champs de formulaires les gérant nativement.
On indique que des champs de formulaires font partie d'un tableau en ajoutant une paire de crochets dans l'attribut name.

Seuls les éléments cochés seront transmis par le formulaire.


Code : HTML
1
2
3
4
5
6
7
8
9
<form action="" method="post">
  <p>
    <input type="text" name="plop[]" value="10" />
    <input type="text" name="plop[]" value="20" />
  </p>
  <p>
    <input type="submit" value="Test" />
  </p>
</form>


Le résultat de $_POST['plop'] sera donc un tableau et vaudra (si l'on a coché les 2 cases bien entendu) :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php

print_r($_POST['plop'];

/*
Array
(
    [0] => 10
    [1] => 20
)
*/


Il est évidemment possible de le faire avec des champs de type autres que text.

Exemple avec des ids d'une table passées dans des cases à cocher, pour modification de l'état d'une colonne des lignes de la table :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$sql = 'SELECT id, etat FROM uneTable ORDER BY id DESC';
$result = mysql_query($sql) or exit(mysql_error());

 echo '
<form action="" method="post">
  <p>
';

while( $l = mysql_fetch_assoc($result) )
{
    echo '<label for="' . $l['id'] . '">' . $l['id'] . '</label>';
    $checked = $l['etat'] == 1 ? ' checked="checked"' : '';
    echo '<input id="' . $l['id'] . '" type="checkbox" name="listeId[]"' . $checked . ' />';
}

echo '</p>
  <p>
   <input type="submit" value="Modifier les états" />
  </p>
</form>';


Que l'on pourrait traiter simplement par :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
if( !empty($_POST['listeId']) && is_array($_POST['listeId']) )
{
    $_POST['listeId'] = array_unique(array_map('intval', $_POST['listeId']));
    // Mise à l'état actif des ids reçus
    $sql = 'UPDATE uneTable SET etat=1 WHERE id IN(' . implode(',', $_POST['listeId']) . ')';
    $result = mysql_query($sql) or exit(mysql_error());
    // Mise à l'état inactif des ids non reçus
    $sql = 'UPDATE uneTable SET etat=0 WHERE id NOT IN(' . implode(',', $_POST['listeId']) . ')';
    $result = mysql_query($sql) or exit(mysql_error());
}


Autre exemple avec un upload multiple :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
$nbChamp = 5;
echo '<form action="" method="post" enctype="multipart/form-data">'; // Ne pas omettre l'attribut enctype
for( $i=0; $i<$nbChamp; $i++ )
{
    echo '<p><input type="file" name="image[]" /></p>';
}
echo '<p>
   <input type="submit" value="Téléverser les images" />
  </p>
</form>';


Que l'on pourrait vérifier avec :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?php
if( !empty($_FILES['image']) && array_filter($_FILES['image']['tmp_name']) )
{
    for( $nbImg=count($_FILES['image']['tmp_name']), $i=0; $i<$nbImg; $i++ )
    {
        // On fait nos vérifications et actions pour chaque images
        // Soit : 
	// $_FILES['image']['name'][$i]
        // $_FILES['image']['tmp_name'][$i]
        // etc...
        // Faites un print_r($_FILES) pour visualiser comment se présente le tableau 
    }
}


Il est possible de spécifier des index directement dans les champs du formulaire, en les mettant entre les crochets bien entendu.
Hors ligne strucky # Posté le 30/11/2008 à 22:34:06
Jamais content !
Avatar
Modérateurs
Auteur : strucky

Pourquoi lorsque j'enregistre un nombre dans ma table, MySQL me met à chaque fois 127 ou un autre nombre inférieur à ma valeur ?


Réponse :

Tout simplement parce que vous avez spécifié lors de la création de votre table un TINYINT ou autre type entier trop petit vis à vis des valeurs que vous voulez y enregistrer.

Un type TINYINT non signés ne peut contenir que des valeurs situées entre -128 et 127, d'où le 127 qui est le maximum.

Consultez la doc MySQL pour choisir le type adéquat aux nombres à enregistrer.

Si votre colonne ne doit contenir que des nombres entiers positifs, spécifiez le UNSIGNED.

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 171 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.097s (0.0697s)