de l'aide pour un script un peu compliqué !

Eléphant du PHP | 254 Messages

02 mai 2006, 11:06

Bonjour, j'avais déjà posté une question similaire il y a quelques temps, n'ayant pas trouvé la solution, j'ai tout recommencé.
La problématique :
Dans un panier, je voudrais modifier le tarif si la personne a un chèque cadeau en sa possession.
J'ai une table chequecadeau qui est enrichie automatiquement lors de la création du chèque-cadeau en PDF.
Champs :
- ID (cle primaire)
- code (créé automatiquement)
- d'autres champs : nom, prénom, etc.....
- prix_cadeau (montant du chèque-cadeau)
- utilisé champ ENUM, 'Attente', 'Utilisé'
- date de création du chèque cadeau.
Dans le panier, j'ai ajouté un champ : code_chkdo et le bouton de soumission : Ajouter (ajoutcodechkdo).
Le formulaire est en méthode GEt, qui permet de faire des recalculs de quantité, etc...
Ce que je veux faire :
:arrow: Si j'ajoute un code
:arrow: Je le mets en session
:arrow: Je vérifie qu'il existe dans la base
:!: Si oui : - je fais le calcul du nouveau montant
- j'actualise la base avec nouveau statut : Utilisé au lieu de Attente

:!: Si non : - j'affiche le message ce code n'existe pas.

Voici le code que je suis entrain de travailler, mais rien ne se passe (pour le moment au niveau des instructions expliquées ci-dessus), je m'occuperais du calcul du nouveau montant après :lol:
Si qqu'un peut m'aider !! Merci bcp !
 if ($ajoutcodechkdo=="Ajouter") 
    { 
        $code = $_GET['code_chkdo'];//Mise du code en session
        $_SESSION['code_chkdo'] = $code;
		mysql_select_db($database, $connexion);//on vérifie qu'il existe bien dans la base
		$query_code = "SELECT code, utilise FROM chequecadeau WHERE code='$code'";
		$code = mysql_query($query_code, $connexion) or die(mysql_error());
		$row_code = mysql_fetch_assoc($code);
		$totalRows_code = mysql_num_rows($code); 
		if ($totalRows_code==1)//si le code existe je mets à jour la base
			{
			mysql_select_db($database, $connexion); //mise à jour de la base statut:  utilisé
			$updateChequeCadeau = "UPDATE chequecadeau SET utilise='".trim(htmlentities(addslashes($_POST['utilise'])))."'";
			$updateChequeCadeau .= "WHERE code='$code'";
			mysql_query($updateChequeCadeau, $connexion) or die(mysql_error());
			}	
			if ($totalRows_code=="Utilisé")
				{
				echo "Le code '".$code."' est déjà utilisé, veuillez recommencer";
				}
				else {
					echo "Ce code '".$code."' n'existe pas, veuillez recommencer";
					}
	} 

Eléphant du PHP | 493 Messages

02 mai 2006, 11:10

Je ne comprends pas clairement où est le problème si tu as déjà fait ce bout de code ! Ce que je peux dire c'est que tu oublies de te connecter à la base de données avec mysql_connect().

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mai 2006, 11:22

Pis y a des choses bizares dans ton code... :)

Tu as deux fois la selection de la base de données : ligne 5 et 12
Tu compares $totalRows_code à la chaine "Utilisé", alors qu'à priori il est égal à un nombre (mysql_num_rows)
Et cette indentation, j'en parle même pas... ;p

Eléphant du PHP | 254 Messages

02 mai 2006, 11:33

non puisque tout en haut de ma page j'ai un appel au fichier de connexion
require_once('Connections/connexion.php');
Et non ce script n'a pas l'air de fonctionner :?
Modifié en dernier par coxine le 02 mai 2006, 12:10, modifié 1 fois.

Eléphant du PHP | 254 Messages

02 mai 2006, 11:34

Pis y a des choses bizares dans ton code... :)

Tu as deux fois la selection de la base de données : ligne 5 et 12
Tu compares $totalRows_code à la chaine "Utilisé", alors qu'à priori il est égal à un nombre (mysql_num_rows)
Et cette indentation, j'en parle même pas... ;p
Oups j'ai vraiment du mal à m'y remettre, bouhouhou les copiés collé d'une ligne à l'autre !
Je corrige ça de suite :oops: :oops:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mai 2006, 11:57

La reprise est difficile apparement ;)

Une petite suggestion qui me parait un peu plus logique dans le traitement.. à adapter, corriger, bricoler, bidouiller, etc. pour en faire ce que tu veux, y a peut être des choses que j'aurais peut être pas du simplifier (genre le trim(html(())) mais moi ça m'arrangeait ;))
if ($ajoutcodechkdo=="Ajouter") { 
	$code = $_GET['code_chkdo'];

	//on vérifie qu'il existe bien dans la base 
	mysql_select_db($database, $connexion);
	$query_code = "SELECT code, utilise FROM chequecadeau WHERE code='$code'"; 
	$resultSet = mysql_query($query_code, $connexion) or die(mysql_error()); 
	
	if ($row_code = mysql_fetch_assoc($resultSet)) { // il existe un résultat en base
	
		if ($row_code['utilise']!="Utilisé") { // si le code existe et n'est pas utilisé je mets à jour la base 
			
			$updateChequeCadeau = "UPDATE chequecadeau SET utilise='Utilisé'"; //
			$updateChequeCadeau.= " WHERE code='$code'"; 
			mysql_query($updateChequeCadeau, $connexion) or die(mysql_error()); 
			
			$_SESSION['code_chkdo'] = $code; //Mise du code en session qu'une fois que tout à marché
		}     
		else { 
			// Rends toi voleur de code !!! Tu es en état d'arrestation ! 
			echo "Le code '".$code."' est déjà utilisé, veuillez recommencer"; 
		} 
	}
	else { 
		// Aaahh tu croyais m'avoir avec ton code bidon hein ?!
		echo "Ce code '".$code."' n'existe pas, veuillez recommencer"; 
	} 
} 

Eléphant du PHP | 254 Messages

02 mai 2006, 12:06

Voici ma copie revue et corrigée !
Les messages d'erreurs s'affichent bien
Mais pas de mise à jour de la base pour changer le champ "utilise" de Attente à Utilisé
//----------------------------------------------------CHEQUE CADEAU
 if ($ajoutcodechkdo=="Ajouter") {//si on clique sur Ajouter le code
     	$code = $_GET['code_chkdo'];//Mise du code en session
        $_SESSION['code_chkdo'] = $code;
		//on vérifie qu'il existe bien dans la base
		mysql_select_db($database, $connexion);
		$query_code = "SELECT code, utilise FROM chequecadeau WHERE code='$code'";
		$code = mysql_query($query_code, $connexion) or die(mysql_error());
		$row_code = mysql_fetch_assoc($code);
		$totalRows_code = mysql_num_rows($code); 
		if ($totalRows_code!=0) {//si le code existe
			if ($totalRows_code!="Utilisé") { // si le code n'est pas utilisé
			//mise à jour de la base statut:  utilisé
			$updateChequeCadeau = "UPDATE chequecadeau SET utilise='".trim(htmlentities(addslashes($_GET['utilise'])))."'";
			$updateChequeCadeau .= "WHERE code = '$code' ";
			mysql_query($updateChequeCadeau, $connexion) or die(mysql_error());
			$success = true ;
			$message = "Le chèque-cadeau n° $code a bien été pris en compte";
			}
			else { // si le code est déjà utilisé
			$success=false;
			$message="Ce chèque-cadeau n° $code a déjà été utilisé";
			}
		}else{ //si le code n'existe pas
		$success=false;
		$message="Ce chèque-cadeau n° $code n'est pas valable, veuillez recommencer SVP.";
		}
	}else{
	$success=false;
	$message="";
	}

Eléphant du PHP | 254 Messages

02 mai 2006, 12:07

La reprise est difficile apparement ;)

Une petite suggestion qui me parait un peu plus logique dans le traitement.. à adapter, corriger, bricoler, bidouiller, etc. pour en faire ce que tu veux, y a peut être des choses que j'aurais peut être pas du simplifier (genre le trim(html(())) mais moi ça m'arrangeait ;))
Ah zut tum'as répondu...enfin, pas zut pour la répons,e mais je viens de poster qqch :lol:
Je regarde !
Thank's :wink:

Eléphant du PHP | 254 Messages

02 mai 2006, 12:18

rhaaa t'es trop fort, pourquoi tout est si simple avec toi ???? :roll:
if ($row_code['utilise']!="Utilisé") { // si le code existe et n'est pas utilisé je mets à jour la base
Sur ma copie revue, c'est là que çà coinçait !
Bon, ben ça fonctionne nickel, et maintenant, je ne peux plus utiliser mon code ](*,) je me fais traiter de voleuse :-* :lol:
Je repasse plus tard pour la modif du prix !!!!
:-$

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mai 2006, 12:27

lol, je t'ai déjà dit que tu n'étais pas obligée de garder mes commentaires et mes messages d'avertissement idi.. enfin.. inhabituels :)
(encore que je suis sur que ça serait des plus original sur un site ! ;))

Eléphant du PHP | 254 Messages

02 mai 2006, 12:35

C'était pour la joke, j'adooore tes message d'alerte !
Non, là je suis plus soft :wink:

tiens une question toujours à propos du $code
On le met en session après l'update, mais en fait, ça ne m'atrrange pas trop...je ne voudrais pas qu'il y ait plusieurs "réservations" avec ce meme code, car même si on traite la personne de voleur :lol: ça n'empeche pas ma soustraction pour le prix qui passe alors à zéro.
Donc, je peux faire un unset() ? mais où ?
A la fin de mon script ?
//----------------------------------------------------CHEQUE CADEAU
 if ($ajoutcodechkdo=="Ajouter") {//si on clique sur Ajouter le code
     	$code = $_GET['code_chkdo'];//Mise du code en session
        
		//on vérifie qu'il existe bien dans la base
		mysql_select_db($database, $connexion);
		$query_code = "SELECT code, utilise FROM chequecadeau WHERE code='$code'";
		$resultSet = mysql_query($query_code, $connexion) or die(mysql_error());

		if ($row_code = mysql_fetch_assoc($resultSet)) {//s'il y a un résultat en base
			if ($row_code['utilise']!="Utilisé") { // si le code existe et n'est pas utilisé je mets à jour la base
			$updateChequeCadeau = "UPDATE chequecadeau SET utilise='Utilisé'";
			$updateChequeCadeau .= "WHERE code = '$code' ";
			mysql_query($updateChequeCadeau, $connexion) or die(mysql_error());
			$_SESSION['code_chkdo'] = $code;//Mise du code en session qu'une fois que tout a marché
			$success = true ;
			$message = "Le chèque-cadeau n° $code a bien été pris en compte";
			}
			else { // si le code est déjà utilisé
			$success=false;
			$message="Ce chèque-cadeau n° '".$code."' a déjà été utilisé";
			}
		}else{ //si le code n'existe pas
		$success=false;
		$message="Ce chèque-cadeau n° '".$code."' n'est pas valable, veuillez recommencer SVP.";
		}
	}else{
	$success=false;
	$message="";
	
	}
unset($_SESSION['code_chkdo']);