IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Aide sur ma requete


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut Aide sur ma requete
    Bonsoir,

    Je code un calendrier de l'avent sur mon site qui offre chaque jour un cadeau.. Mais j'ai un blocage.

    Lorsqu'un utilisateur ouvre la case "1 Décembre" par exemple, j'aimerais que la deuxième fois ou il re-clique qu'un message lui dise qu'il a déjà ouvert cette case.

    J'ai donc essayer moi même et le problème est que l'utilisateur peut ouvrir la case 1 Décembre autant de fois qu'il le veut.

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    $j = date('d');
    $query = $db->prepare("SELECT * FROM calendrier_avent WHERE d=:d AND uid=:id");
    	$query->execute(array(
    		'd' => $j,
    		'uid' => $user['id']
    	));
    $nb = $query->rowCount();
    if($nb==0):
    	if($j>date('j')):
    		$t = "Tu devras attendre encore un peu avant d'avoir les cadeaux pour ce jour !";
    	elseif($j<date('j')):
    		$t = "Trop tard :) cette date est passée";
    	else:
    		$queryAvent = $db->prepare("INSERT INTO calendrier_avent VALUES ('',:d,:uid)");
    			$queryAvent->execute(array(
    			'd' => $j,
    			'uid' => $user['id']
    		));
     
    		if($j==1):
    			$text = "1 badge + 5 Duckets !";
    			$query2 = $db->prepare("UPDATE users SET points = points + 5 WHERE id = :uid");
    				$query2->execute(array(
    				'uid' => $user['id'],
    			));
    	endif;
    else:
    	$t = "Tu as déjà eu tes cadeaux pour le ".$j." Décembre 2014 :) si tu ne les vois pas il te suffit de te reconnecter!";
    endif;
     
    if(isset($_GET['j']))
    	exit();

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Est-ce que l'utilisateur doit s'identifier sur ton site?

    [EDIT] oops, ah oui apparemment!


    Peux-tu décrire la structure de tes tables?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut
    Oui bien sûr.

    Voici la table calendrier_avent

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `calendrier_avent` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `d` varchar(255) NOT NULL,
      `uid` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1;

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca serait plutôt
    sinon ça n'a pas de sens.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut
    J'ai pas trop compris, pourquoi sa n'a pas de sens? $j affiche la date du jour

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    si $j est la date du jour, ou est la date sur laquelle l'utilisateur a cliqué ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ben, tu initialise $j avec : $j = date('d'); et plus loin tu fais une comparaison avec date('j').
    Autrement dit, tu compares la date du jour à la date du jour

    Donc, soit une des 2 dates devrait être un paramètre (comme le $_GET['j'] proposé par sab'), soit ta page ne fonctionne qu'avec la date du jour (si par exemple, tu ne veux qu'il soit possible d'accéder au 2 décembre le 5 décembre) et dans ce cas il n'est pas nécessaire de faire de comparaison.


    Pour revenir au problème d'origine, rowCount n'est pas très fiable pour une requête SELECT. Essaye plutôt avec SELECT COUNT() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query = $db->prepare("SELECT count(*) FROM calendrier_avent WHERE d=:d AND uid=:id");
    	$query->execute(array(
    		'd' => $j,
    		'uid' => $user['id']
    	));
    $nb = $query->fetchColumn();
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  8. #8
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Il semble aussi qu'il y ai un problème avec les noms des paramètres de la requête préparée.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

Discussions similaires

  1. [Debutant] Aide sur une requete normée
    Par Wisefool dans le forum Oracle
    Réponses: 2
    Dernier message: 14/04/2006, 18h41
  2. Besoin d'aide sur une requete ds un trigger
    Par ideal dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/02/2006, 10h05
  3. [MySQL] aide sur une requete
    Par dj-julio dans le forum Langage SQL
    Réponses: 5
    Dernier message: 12/01/2006, 14h25
  4. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  5. Aide sur une requete de sélection
    Par stephdiplo150 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/01/2004, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo