Fonctions aléatoire php avec une variable!

Résolu/Fermé
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011 - 24 avril 2011 à 17:15
sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 - 24 avril 2011 à 18:59
Bonjour, je cherche une fonctions php qui trouve un nombre aux hasard(type rand()), voici mon exemple

$maVariable=10
$nombreAuxHasard=rand($maVariable)
je ne peux pas rentrer 2valeurs($min,$max) car je ne les connai pas!
merci de votre aide si vous avez une solution :)



15 réponses

sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 11
Modifié par sheik54 le 24/04/2011 à 17:24
Si tu compte faire avec ta base de données je t'ai répondus sur l'autre topic (https://forums.commentcamarche.net/forum/affich-21917596-probleme-de-trie-avec-mysql#4)

Sinon rand te retourne une valeur entre un intervalle. Si tu ne peux pas spécifier 2 bornes comment veux-tu que rand sache quoi te rendre ?

Si c'est juste pour avoir un nombre aléatoire tu peux utiliser rand de cette sorte :
echo rand();
1
sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 11
24 avril 2011 à 18:45
L'erreur là viens d'un problème avec la création de l'objet $res.

Si je reprend le dernier code donné. L'erreur viens de :

$res = $bdd->query('SELECT anglais, francais FROM voc_anglais_essentiel WHERE categories="'. $_GET['categories'] . '\'''; 

Il manque des morceaux à la fin. Ca donnerai :
$res = $bdd->query('SELECT anglais, francais FROM voc_anglais_essentiel WHERE categories="'.$_REQUEST["categories"].'";');


Si ca ne fonctionne pas, marque en dessous du code précédent le code suivant et recolle le ici :
echo 'SELECT anglais, francais FROM voc_anglais_essentiel WHERE categories="'.$_REQUEST["categories"].'";';
1
Dynamix Messages postés 202 Date d'inscription dimanche 22 mars 2009 Statut Membre Dernière intervention 30 avril 2011 76
24 avril 2011 à 17:25
Je n'ai pas trop compris ton problème, tu veux générer un nombre aléatoire allant de combien à combien?
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 17:33
voila mon problème en plus détaillé, je possède un base de donné avec des mots rangé par catégories, voici un exemple:
Anglais Français Catégories
bold courageux adjectif

les mot sont rentré dans le désorde dans la table mysql par l'internote mais du coup si je veux selectionner tt une catégorie et sortir un mot aléatoirement de celle si je ne sait pas comment faire ^^j'espère que s t'éclaire
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 11
Modifié par sheik54 le 24/04/2011 à 17:37
(Solution donnée ici : https://forums.commentcamarche.net/forum/affich-21917596-probleme-de-trie-avec-mysql#4)

Pour tout les mots de la catégorie "Anglais" (en PHP avec PDO) :

$res = $db->query('SELECT mot FROM voc_anglais_essentiel WHERE categorie="Anglais";');
$result=$res->fetchAll(PDO::FETCH_COLUMN, 0);
echo $result[array_rand($result)];
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 17:45
je l'adapte a ma situation et j'ai donc :

$res = $db->query('SELECT id FROM voc_anglais_essentiel WHERE categories=\'' . $_GET['categories'] . '\'');
$result=$res->fetchAll(PDO::FETCH_COLUMN, 0);
$nombreAuHasard = $result[array_rand($result)];
et il me met:

Notice: Undefined variable: db in C:\wamp\www\qcm_pour_moi\anglais_voc_essentiel_an.php on line 18
Fatal error: Call to a member function query() on a non-object in C:\wamp\www\qcm_pour_moi\anglais_voc_essentiel_an.php on line 18

^^
0
sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 11
Modifié par sheik54 le 24/04/2011 à 17:50
Notice: Undefined variable: db

Ca veut dire que tu stock le connexion à la base dans une autre variable que db. Si je m'en réfère à l'autre sujet (dont la réponse est toujours valable), il faut que tu remplace $db par $bdd

Soit :
$res = $bdd->query('SELECT id FROM voc_anglais_essentiel WHERE categories="'. $_GET['categories'].'";); 
$result=$res->fetchAll(PDO::FETCH_COLUMN, 0); 
$nombreAuHasard = $result[array_rand($result)];


EDIT : tant que j'y suis je corrige le code faux ^^
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 17:49
si sa peut t'aider voici mon script:
<?php include('connexion.inc');
// cherche le nombre aux hasard
$res = $db->query('SELECT mot FROM voc_anglais_essentiel WHERE categories=\'' . $_GET['categories'] . '\'');
$result=$res->fetchAll(PDO::FETCH_COLUMN, 0);
$nombreAuHasard = $result[array_rand($result)];

$res->closeCursor();

//selectionne le mot anglais aléatoirement
$bdd->exec('SET NAMES utf8');
$reponseFrancais= $bdd->query('SELECT francais FROM voc_anglais_essentiel WHERE id='.$nombreAuHasard);
$donnees = $reponseFrancais->fetch();
$motFrancaisPropose=$donnees['francais'];
$_SESSION['motFrancais']= $motFrancaisPropose;

?>


<!--Formulaire pour rentrer la traduction -->
<p>La traduction du mot "<strong><?php echo $motFrancaisPropose; ?></strong>" est:
<form method="post" action="anglais_voc_essentiel_an_traitement.php?categories=<?php echo $_GET['categories']; ?>" autocomplete="off">
<input type="text" name="reponse_qcm" />
<input type="submit" value="valider"/>
</form><br /></p>
<?php
$reponseFrancais->closeCursor();
?>

</div>
0
sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 11
24 avril 2011 à 17:56
Voir message précédent pour l'erreur spécifié au dessus.
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 17:57
on a envoyé le message en meme temp c'est pour sa ^^
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 17:56
on y est presque, il me met une dernière erreure
Fatal error: Call to a member function fetchAll() on a non-object in C:\wamp\www\qcm_pour_moi\anglais_voc_essentiel_an.php
je te remet le script complet:

<?php session_start();

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>QCM</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" media="screen" type="text/css" title="designqcm" href="designqcm.css" />
<link rel="shortcut icon" type="image/x-icon" href="php.ico" />
</head>
<body>
<div class="header"><img src="header.png" alt="qcm" class="header"/></div>
<?php include 'menu.php' //menu?>
<div id="corp">
<?php include('connexion.inc');
// cherche le nombre aux hasard
$res = $bdd->query('SELECT id FROM voc_anglais_essentiel WHERE categories="'. $_GET['categories'] . '\'');
$result=$res->fetchAll(PDO::FETCH_COLUMN, 0);
$nombreAuHasard = $result[array_rand($result)];


$res->closeCursor();

//selectionne le mot anglais aléatoirement
$bdd->exec('SET NAMES utf8');
$reponseFrancais= $bdd->query('SELECT francais FROM voc_anglais_essentiel WHERE id='.$nombreAuHasard);
$donnees = $reponseFrancais->fetch();
$motFrancaisPropose=$donnees['francais'];
$_SESSION['motFrancais']= $motFrancaisPropose;

?>


<!--Formulaire pour rentrer la traduction -->
<p>La traduction du mot "<strong><?php echo $motFrancaisPropose; ?></strong>" est:
<form method="post" action="anglais_voc_essentiel_an_traitement.php?categories=<?php echo $_GET['categories']; ?>" autocomplete="off">
<input type="text" name="reponse_qcm" />
<input type="submit" value="valider"/>
</form><br /></p>
<?php
$reponseFrancais->closeCursor();
?>

</div>
<div class="nombreReponses">
<p>
nombre de bonnes réponses: <strong><?php echo $_SESSION['nombreDeBonnesReponses']?></strong><br />
nombre de mauvaises réponses: <strong><?php echo $_SESSION['nombreDeMauvaisesReponses']?></strong><br />
</p>
</div>
<?php include ('heure.php');?>

</body>
</html>
je sais je suis un peut mauvais je viens de commencer j'ai 15ans^^
0
sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 11
Modifié par sheik54 le 24/04/2011 à 18:09
Je crois comprendre ce que tu veux. Voici un exemple de code (pour remplacer toute ta page)

 $res = $bdd->query('SELECT anglais, francais FROM voc_anglais_essentiel'); 
 $result=$res->fetchAll(); 
 $alea = array_rand($result); 
 echo  $result[$alea]['anglais']; 
 echo  $result[$alea]['francais']; 
 $bdd = null; 


EDIT : oups, oublié de changer la requête ^^
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 18:10
désolé mais je ne suis plus ^^je n'ai pas vraiment compris tu dépasse mes connaisances! :p
0
sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 11
24 avril 2011 à 18:17
Le code total de ta page sera :

<?php session_start();?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>QCM</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" media="screen" type="text/css" title="designqcm" href="designqcm.css" />
<link rel="shortcut icon" type="image/x-icon" href="php.ico" />
</head>
<body>
<div class="header"><img src="header.png" alt="qcm" class="header"/></div>
<?php
include 'menu.php';

echo '<div id="corp">';

include('connexion.inc');

 $res = $bdd->query('SELECT anglais, francais FROM voc_anglais_essentiel;'); 
 $result=$res->fetchAll(); 
 $alea = array_rand($result); 

echo 'Le mot anglais : '.$result[$alea]["anglais"].' veut dire en français '.$result[$alea]["francais"];

?>
</div>
</body>
</html> 


Cette page va t'afficher la valeur anglais et la valeur française de la même ligne présente dans la table 'voc_anglais_essentiel'. Tu peux ajouter des critères de recherche dans la table mais test cette page et dis moi si ça bug.
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 18:32
en je vais t'expliquer le but de ce que je fait: c'est un qcm ou on choisi la catégorie il nous met un mot francais et on doit ecrire dans un formulaire la traduction anglais ^^
voici ma page:
<?php session_start();?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>QCM</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" media="screen" type="text/css" title="designqcm" href="designqcm.css" />
<link rel="shortcut icon" type="image/x-icon" href="php.ico" />
</head>
<body>
<div class="header"><img src="header.png" alt="qcm" class="header"/></div>
<?php
include 'menu.php';

echo '<div id="corp">';

include('connexion.inc');

$res = $bdd->query('SELECT anglais, francais FROM voc_anglais_essentiel WHERE categories="'. $_GET['categories'] . '\''';
$result=$res->fetchAll();
$alea = array_rand($result);

echo 'La traduction du mot : '.$result[$alea]["anglais"].' est<br /><form method="post" action="anglais_voc_essentiel_an_traitement.php?categories='. $_GET['categories'].'" autocomplete="off">
<input type="text" name="reponse_qcm" />
<input type="submit" value="valider"/>
</form><br /></p>

?>
</div>
</body>
</html>
et sa ne marche pas ^^
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 18:39
en fait mon problème vient de cette ligne:
$result=$res->fetchAll(PDO::FETCH_COLUMN, 0);
puisqu il me met :
Fatal error: Call to a member function fetchAll() on a non-object in
0
francois59510 Messages postés 18 Date d'inscription mercredi 16 mars 2011 Statut Membre Dernière intervention 11 juin 2011
24 avril 2011 à 18:49
j'ai pas compris comment ta fait mais sa marche!!!!! ;) tu gère!
0
sheik54 Messages postés 76 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 29 avril 2011 11
24 avril 2011 à 18:59
Si la réponse est satisfaisante à ton problème, merci de mettre le sujet comme "Résolu"
0