Page 1 sur 3

recupération d'une heure dans base de données

Posté : 09 juin 2005, 17:10
par Pasti$
voici mon script :

$date_actuelle=date ("j/m/Y");
$heure_actuelle=date("H:i");
$ip = getenv("REMOTE_ADDR");


mysql_connect('XXXX', 'XXX', 'XXX');		
mysql_select_db("formulaire");
$var="$ip"; 	//on mets l'adresse IP dans une variable
$veri= "faux"; 	//on mets une variable a FAUX		
$rq = "SELECT DISTINCT ip_repondant FROM reponses "; 	//ensuite on parcourt le champs ip_repondant de la table REPONSES						
$result = mysql_query($rq); 		// exécution de la requête et l'affecter a la variable $result 										
while ($liste=mysql_fetch_array($result)) 		//on met les resultats dans un tableau et tant qu'il est pas vide, on extrait les valeur	
{						extract($liste);   		
	if ($ip_repondant==$var) 		//on compare tous les IP pour voir si un si l'utilisateur qui a rempli le tableau contient déjà son adresse IP						{
	$veri=vrai;			//si elle est deja présente tu met veri a vrai. 
	
                } 
	} 				

	if ($veri== "vrai") 	//aprés tu regardes si ton veri est a vrai 
		{
								$heure_fictive= "SELECT heure_actuelle FROM reponses WHERE ip_repondant=$ip";
		$heure_re = mysql_query ($heure_fictive);			echo "$heure_re";					
		echo " Désolé, <br><br> vous avez déjà répondu au questionnaire<br>le tant à $heure_re."; 		// on ecrit qu'il a déjà répondu 						
		exit();
							}	
						
										
	else 			//exécution de remplissage des champs SI l'adresse IP de l'utilisateur ne se trouve pas dans le champ Ip_repondant de la base reponses			
	{	
							$query="INSERT INTO reponses VALUES ('', '$ip', '$date_actuelle', '$heure_actuelle', '$total_questionnaire', '$champ1','$champ2', '$champ3', '$champ4', '$champ5', '$champ_libre')";	    // insertion valeur dans table "reponses"		
							$resultat=mysql_db_query('formulaire', $query);	//exécution de la requête				
		}					echo "<br>";			
							echo "<p><b>Questionnaire rempli le ";                     // date de réponse au formulaire sous forme J/M/aaaa à hh:mm
							echo "$date_actuelle à $heure_actuelle";
							echo "<br></b>";
	
							
				?>

Je n'arrive pas en fait quand le repondant a deja repondu (on le voit grace a l'IP) a affiché l'heure a lakel il a deja repondu

Posté : 09 juin 2005, 17:23
par ouckileou
c'est un peu vague tout ça

ça bloque ici ?
$heure_fictive= "SELECT heure_actuelle FROM reponses WHERE ip_repondant=$ip";
        $heure_re = mysql_query ($heure_fictive);            echo "$heure_re";                    
        echo " Désolé, <br><br> vous avez déjà répondu au questionnaire<br>le tant à $heure_re.";         // on ecrit qu'il a déjà répondu 
qu'est-ce qui se passe xactement ta variable est vide ?
si oui :
- affiche ta requête et exécutes la directement sur l base (via phpmyadmin par ex)
- affiche les erreurs MySQL

Posté : 09 juin 2005, 17:26
par Pasti$
je veux simplement créer un requete SQL qui puisse aller chercher dans la table 'reponses' l'heure a laquelle l'utilisateur a deja repondu puis l'afficher.. mais bien prendre en compte que l'ip-repondant se trouve bien dans ma base 'reponses'.

Dans mon cas, je remarque que la variable est vide

Posté : 09 juin 2005, 17:31
par ouckileou
tu peux regrouper la sélection de l'heure et de l'ip dans une même requête

SI tu trouves une heure pour l'ip correspondante ALORS
tu affiches l'heure et interdiction de répondre
SINON
tu enregistres l'heure
FSI

Code : Tout sélectionner

SELECT heure FROM reponses WHERE ip = '$ip';
en fait c'est ce que tu fais dans ta deuxième requête, don à mon avis la première est inutile

tu as la bonne méthode donc si ta variable est vide utilise les méthodes que je t'ai donné pour tester et voir où ça bloque

edit3 :
je vois que tu récupères le résultat de ta requête dans $heure_re et que tu l'affiches directement, il te faut passer par qqchose d'intermédiaire comme
mysql_fetch_row ou mysql_fetch_array

Posté : 09 juin 2005, 17:37
par pjl
Je ne comprends pas du tout ta logique.

Tu récupère toutes les IP de ta table.
Tu parcours toutes les IP et quand tu as trouvé la bonne, tu refais une requete pour avoir l'heure qui correspond à l'IP.

Pourquoi ne pas faire cette requete de suite ?

Posté : 09 juin 2005, 17:44
par Pasti$
pour moi c'etait celle là la meilleure methode je pense comment faire autrement sinon ?

Posté : 09 juin 2005, 17:47
par ouckileou
ben pjl l'a dit et moi aussi juste avant

récupérer directement l'heure pour une certaine IP (ta deuxième requête)
si tu récupères une heure c'est que la personne a répondu sinon non

Posté : 09 juin 2005, 17:53
par pjl
Tu veux téléphoner à un copain pour lui demander l'heure par ex.

Tu prends son numéro dans ton carnet d'adresse puis :
1. tu fais tous les numéros de l'annuaire jusqu'à ce que tu tombes sur ton copain, tu coches le tel puis tu le rapelles ensuite pour lui demander l'heure ?
2. tu lui tel directement pour lui demander l'heure ?

Là, ton code tel qu'il est fait correspond à l'option 1.

Posté : 09 juin 2005, 17:54
par ouckileou
pjl le roi de l'exemple... j'adore ! :lol:

Posté : 10 juin 2005, 09:10
par Pasti$
j'aarive pa a faire ma requete pour faite l'option 2 ca fait trop de chose d'un cou

Posté : 10 juin 2005, 09:17
par Cyrano
On va essayer de partir du bon pied et une étape à la fois : commence par nous montrer la structure de la table où tu veux récupérer l'heure.

Posté : 10 juin 2005, 09:48
par Pasti$
alors ma base MySQL ressemble a ca :
 Id - Ip_repondant - date_reponse - heure_reponse - total_questionnaire - champ1 - champ2 - champ3 - champ4 - champ5 - champ_libre 

Posté : 10 juin 2005, 10:02
par Cyrano
Ok, on va remonter d'un étape alors parce là, on est mal barrés. Quand je parle de structure de table, j'entends par là quels champs et également le type de chaque champ.

Pour avoir quelque chose de visuel, ouvre phpMyAdmin, va dans ta base et sélectionne la table: ensuite, cliques sur "Exproter" en décochant dans le formulaire qui va apparaître la case "données" et tu coches la case transmettre pour avoir une version SQL au format texte de la création de la table, tous les détails vont se trouver là.

Posté : 10 juin 2005, 10:02
par ouckileou
mais tu as déjà la requête pou aire l'option 2, c'est celle-ci :
$heure_fictive= "SELECT heure_actuelle FROM reponses WHERE ip_repondant=$ip"; 
tu as juste à ne plus faire ta première requête et tester le résultat de celle-ci : rien ou heure
et agir en conséquence

Posté : 10 juin 2005, 10:09
par Pasti$
# Version du serveur: 4.0.18
# Version de PHP: 4.3.4
# 
# Base de données: `formulaire`
# 

# --------------------------------------------------------

#
# Structure de la table `reponses`
#


CREATE TABLE `reponses` (
  `Id` int(11) NOT NULL auto_increment,
  `Ip_repondant` text NOT NULL,
  `date_reponse` text NOT NULL,
  `heure_reponse` text NOT NULL,
  `total_questionnaire` int(11) NOT NULL default '0',
  `champ1` int(11) NOT NULL default '0',
  `champ2` int(11) NOT NULL default '0',
  `champ3` int(11) NOT NULL default '0',
  `champ4` int(11) NOT NULL default '0',
  `champ5` int(11) NOT NULL default '0',
  `champ_libre` text NOT NULL,
  PRIMARY KEY  (`Id`)
) TYPE=MyISAM COMMENT='reponses au formulaire' AUTO_INCREMENT=107 ;
ca va mieux kom ca ?