Problème PHP/SQL
Fermé
Charly
-
Modifié par jordane45 le 18/07/2015 à 00:07
jordane45 Messages postés 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 - 18 juil. 2015 à 03:48
jordane45 Messages postés 38173 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 10 mai 2024 - 18 juil. 2015 à 03:48
A voir également:
- Problème PHP/SQL
- Easy php - Télécharger - Divers Web & Internet
- Récupération serveur sql - Télécharger - Gestion de données
- Sql lister les tables ✓ - Forum Programmation
- Php?id=1 - Forum PHP
- Get_magic_quotes_gpc php 8 ✓ - Forum PHP
2 réponses
jordane45
Messages postés
38173
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mai 2024
4 665
18 juil. 2015 à 00:14
18 juil. 2015 à 00:14
Bonjour,
1 - Tu as une variable $sql = .. sans rien derrière !
2 - Ton MysqlNumRows se trouve dans ton ELSE ... alors que l'exécution de ta requête est dans le bloc if juste avant..... Normal que ça n'aille pas...
PS : La norme PSR-2 préconnise l'écriture des IF / ELSE de la forme suivante ( l'accolade ouvrante sur la même ligne...)
Comme ceci :
Essaye de la respecter...ça rend le code plus lisible.
Ce qui.. une fois ton code remis en forme donne :
NB : Tu constateras que j'ai mis le code entre "balises de code" (autrement dit.. avec la coloration syntaxique ! )
NB2 : Ce code n'est pas "corrigé" ... l'explication de ton souci ayant été donné plus haut.
1 - Tu as une variable $sql = .. sans rien derrière !
2 - Ton MysqlNumRows se trouve dans ton ELSE ... alors que l'exécution de ta requête est dans le bloc if juste avant..... Normal que ça n'aille pas...
PS : La norme PSR-2 préconnise l'écriture des IF / ELSE de la forme suivante ( l'accolade ouvrante sur la même ligne...)
Comme ceci :
if(condition) { //.... }elseif( condition...){ //... }else{ // .... }
Essaye de la respecter...ça rend le code plus lisible.
Ce qui.. une fois ton code remis en forme donne :
$achat = Securise($_GET['achat']); if($achat == "fanperso"){ if($user['point'] >= 0){ $sql = $stock2 = mysql_query("SELECT * FROM stock WHERE utilise = '0' LIMIT 1"); $stock = mysql_fetch_array($stock2); $row = mysql_fetch_assoc($test); $test = mysql_query("SELECT * FROM service_fansite WHERE username=".$user['username']." LIMIT 1"); mysql_query("INSERT INTO transaction (username,quoi,quand) VALUES ('".$user['username']."','commande service FanSite Grauit ','".FullDate('full')."')"); mysql_query("INSERT INTO service_fansite (username,service,valable,fin,domaine,acces_utilisateur,acces_mdp,hote,statut) VALUES ('".$user['username']."','FanSite Gratuit','1 mois','".FullDate('default')."','En cours','Pro seulement','Pro seulement','Pro seulement','1')") or die (mysql_error()); mysql_query("DELETE FROM stock WHERE id = '".$stock['id']."' LIMIT 1"); header('Location: sitefan?achat=ok'); } else { if(mysql_num_rows($test) > 0) { header('Location: sitefan?achat=non'); } } } if(isset($_GET['achat'])){ $achat = Securise($_GET['achat']); if($achat == "ok") { $message = ' <div class="alert alert-dismissible alert-success"> <button type="button" class="close" data-dismiss="alert">×</button> <strong><center>Bravo! votre service viens d\'être commandé.</center></strong> </div>'; }elseif($achat == "non") { $message = ' <div class="alert alert-dismissible alert-danger"> <button type="button" class="close" data-dismiss="alert">×</button> <strong><center>Vous n\'avez pas assez de points. <a href="recharge">clic ici</a> pour en acheter</center></strong> </div>'; }elseif(empty($achat)) { header('Location:./sitefan'); } }
NB : Tu constateras que j'ai mis le code entre "balises de code" (autrement dit.. avec la coloration syntaxique ! )
NB2 : Ce code n'est pas "corrigé" ... l'explication de ton souci ayant été donné plus haut.
jordane45
Messages postés
38173
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mai 2024
4 665
Modifié par jordane45 le 18/07/2015 à 03:49
Modifié par jordane45 le 18/07/2015 à 03:49
Voici ton code en parti remis en forme....
- J'ai viré les ELSEIF en pagaille.. pour les remplacer par un SWITCH (plus lisible! )
- J'ai commencé à remettre tes requêtes en formes... je te laisse finir
- Je récupère les variables AVANT de les utiliser ... et je ne le fais qu'une seule fois.....
VOilou :
Cordialement,
Jordane
- J'ai viré les ELSEIF en pagaille.. pour les remplacer par un SWITCH (plus lisible! )
- J'ai commencé à remettre tes requêtes en formes... je te laisse finir
- Je récupère les variables AVANT de les utiliser ... et je ne le fais qu'une seule fois.....
VOilou :
//récuperation des variables $username = isset($user['username'])?$user['username']:''; $achat = isset($_GET['achat']) ? Securise($_GET['achat']) : ''; switch($achat){ case "fanperso": if($user['point'] >= 0){ //Vérification achat non. $sql = "SELECT * FROM service_fansite WHERE username = '$username' LIMIT 1"; $test = mysql_query($sql) or die( "ERROR ! ".mysql_error() . "<br>Erreur dans la requete :<br>".$sql); if(mysql_num_rows($test) > 0) { header('Location: sitefan?achat=non'); } $sql = "SELECT * FROM stock WHERE utilise = '0' LIMIT 1"; $stock2 = mysql_query($sql) or die( "ERROR ! ".mysql_error() . "<br>Erreur dans la requete :<br>".$sql); $stock = mysql_fetch_array($stock2); mysql_query("INSERT INTO transaction (username,quoi,quand) VALUES ('$username','commande service FanSite Grauit ','".FullDate('full')."')"); mysql_query("INSERT INTO service_fansite (username,service,valable,fin,domaine,acces_utilisateur,acces_mdp,hote,statut) VALUES ('$username','FanSite Gratuit','1 mois','".FullDate('default')."','En cours','Pro seulement','Pro seulement','Pro seulement','1')") or die (mysql_error()); mysql_query("DELETE FROM stock WHERE id = '".$stock['id']."' LIMIT 1"); header('Location: sitefan?achat=ok'); } break; case "ok": $message = ' <div class="alert alert-dismissible alert-success"> <button type="button" class="close" data-dismiss="alert">×</button> <strong><center>Bravo! votre service viens d\'être commandé.</center></strong> </div>'; break; case "non": $message = ' <div class="alert alert-dismissible alert-danger"> <button type="button" class="close" data-dismiss="alert">×</button> <strong><center>Vous n\'avez pas assez de points. <a href="recharge">clic ici</a> pour en acheter</center></strong> </div>'; break; case "": header('Location:./sitefan'); break; default: // aucune valeur correspondante ! header('Location:./sitefan'); break; }
Cordialement,
Jordane
jordane45
Messages postés
38173
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 mai 2024
4 665
18 juil. 2015 à 03:48
18 juil. 2015 à 03:48
Je confirme... c'est mieux.
Modifié par jordane45 le 18/07/2015 à 02:53
Merci de votre réponse !
J'ai suivi votre conseil,
Après avoir essayer comme vous m'avez dit j'ai eu ceci : (En bas)
Le seul problème c'est que quand je met if(mysql_num_rows($test) >= 1)
Je peux rien acheté, if(mysql_num_rows($test) == 1) Pareil je peux rien acheté,
if(mysql_num_rows($test) <= 1) Alors que la je peux acheté dans tout les cas que je possède déjà le produit ou non, hors se que je voudrais c'est une fois qu'un utilisateur à acheté ce produit 1 fois, qu'il puisse pu en racheté un.
Je suis désoler mais je début en php, puis le script qui est la je l'ai pris sur un forum puis modifier avec se que j'avais besoin.
Merci, Cordialement.
18 juil. 2015 à 02:53
Tu fais appelle à la fonction mysql_num_rows... sur la variable $test....
Variable que tu initialise via ta requête à l'interieur de ton bloc IF ...
et donc.... $test ne vaut rien !
En plus..; tu as toujours cette ligne qui se balade toute seule.....
Modifié par jordane45 le 18/07/2015 à 02:55
sera toujours fausse... car tu as oublié les quotes autour de ton username.
PS: Tu utilises l'extension mysql_* ... qui est considérée comme obsolète !
je t'invite vivement à passer à la PDO.
Voici un peu de lecture :
https://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top
https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
.
18 juil. 2015 à 02:56
Tu veux dire que tu n'as qu' UN SEUL produit à chaque fois ?
Tu ne gères pas des quantités ??
Modifié par jordane45 le 18/07/2015 à 03:00
par exemple :
En cas d'erreur... (avec l'extension Mysql_* ).. tu peux utiliser un OR DIE ... et y afficher la requête !