Condition if [Fermé]
Signaler
isa.dama
-
isa.dama
isa.dama
- Messages postés
- 27
- Date d'inscription
- mardi 15 mai 2018
- Statut
- Membre
- Dernière intervention
- 16 novembre 2020
A voir également:
- Condition if
- Sql condition if - Forum - Programmation
- Condition if excel - Conseils pratiques - Excel
- Condition if html ✓ - Forum - HTML
- SQL + condition IF ? ✓ - Forum - Programmation
- Condition if java - Articles
5 réponses
Reivax962
- Messages postés
- 3669
- Date d'inscription
- jeudi 16 juin 2005
- Statut
- Membre
- Dernière intervention
- 25 janvier 2021
Bonjour,
Le problème ne vient pas de ton if, mais de la fonction odbc_do qui ne renvoie pas le résultat de la requête, mais un pointeur vers ce résultat.
cf https://www.php.net/odbc_exec
D'après ce que j'en lis, il faut ensuite utiliser odbc_fetch_row pour récupérer la première ligne de résultat, puis odbc_result pour récupérer le champ qui t'intéresse dans cette ligne.
Ce qui donne :
Xavier
Le problème ne vient pas de ton if, mais de la fonction odbc_do qui ne renvoie pas le résultat de la requête, mais un pointeur vers ce résultat.
cf https://www.php.net/odbc_exec
D'après ce que j'en lis, il faut ensuite utiliser odbc_fetch_row pour récupérer la première ligne de résultat, puis odbc_result pour récupérer le champ qui t'intéresse dans cette ligne.
Ce qui donne :
$req_NbDoubl="SELECT COUNT(CodeAnalytique) FROM Doublon"; $requete_NbDoubl= odbc_do($conn, $req_NbDoubl) ; $nombre = odbc_fetch_row($requete_NbDoubl) ? odbc_result($requete_NbDoubl, 1) : 0; if($nombre > 0) ...
Xavier
jordane45
- Messages postés
- 31198
- Date d'inscription
- mercredi 22 octobre 2003
- Statut
- Modérateur
- Dernière intervention
- 25 janvier 2021
Bonjour,
N'as tu pas oublié de faire un FETCH de ton résultat de requête ?
N'as tu pas oublié de faire un FETCH de ton résultat de requête ?
isa.dama
- Messages postés
- 27
- Date d'inscription
- mardi 15 mai 2018
- Statut
- Membre
- Dernière intervention
- 16 novembre 2020
Bonjour,
cela fait 3 jours que trouve pas la solution.
J'ai modifié le code en utilisant un fetch_objet mais le resultat me renvoi 0.
Pourtant, quand j'exécute la requete sur access je trouve 24 comme resultat.
Voici mon code
//calcul nombre de doublon
$reqNbDoublon= "SELECT COUNT (*) AS nb FROM Doublon";
$requete= odbc_exec($conn, $reqNbDoublon) ;
if($resultat= odbc_fetch_object($requete))
{
$nbDoublon =$resultat->nb;
echo $nbDoublon;
}
cela fait 3 jours que trouve pas la solution.
J'ai modifié le code en utilisant un fetch_objet mais le resultat me renvoi 0.
Pourtant, quand j'exécute la requete sur access je trouve 24 comme resultat.
Voici mon code
//calcul nombre de doublon
$reqNbDoublon= "SELECT COUNT (*) AS nb FROM Doublon";
$requete= odbc_exec($conn, $reqNbDoublon) ;
if($resultat= odbc_fetch_object($requete))
{
$nbDoublon =$resultat->nb;
echo $nbDoublon;
}
samyb2313
- Messages postés
- 52
- Date d'inscription
- mercredi 23 février 2011
- Statut
- Membre
- Dernière intervention
- 15 janvier 2020
Essaie peut être comme cela :
$reqNbDoublon= "SELECT COUNT (*) AS nb FROM Doublon"; $requete= odbc_exec($conn, $reqNbDoublon) ; $nb = 0; //j'initialise à 0 - Si la requete echoue, le nb sera a 0 while(odbc_fetch_row($requete)){ //Je parcours les lignes de résultat de la requète $nb=odbc_result($requete,1); //Je recupere mon resultat et l'affiche dans nb. } echo $nb; if ($nb > 0) $existDoublon = true; else $existDoublon = false;
isa.dama
- Messages postés
- 27
- Date d'inscription
- mardi 15 mai 2018
- Statut
- Membre
- Dernière intervention
- 16 novembre 2020
Bonsoir,
je vous remercie pour votre réponse.
J'ai compris d’où vient le problème mais maintenant.
Dans mon code je vide la table doublon à chaque fois avant de la remplir avec une requête select count(*).
Malgré la présence de données dans la table Doublon (24 enregistrements) , le fecth_object affiche 0 au lieu de 24 comme si la partie delete venait après le remplissage de la table.
Le soucis maintenant c'est comment éviter ca?
Voici le code
//vider table doublon
$req_supDoubl="DELETE FROM Doublon ";
$requete_supDoubl = odbc_do($conn, $req_supDoubl) ;
//Recherche de doublons dans PointTemp et remplissage table Doublon
$req_doubl=("INSERT INTO Doublon
SELECT COUNT(*) AS nbr_doublon, CodeAnalytique, DatePointage, Matricule, TypePointage
FROM PointTemp
GROUP BY CodeAnalytique, DatePointage, Matricule, TypePointage
HAVING COUNT(*) > 1");
$requete_doubl = odbc_do($conn, $req_doubl) ;
//calcul nombre de doublon
$reqNbDoublon= "SELECT COUNT (*) AS nb FROM Doublon";
$requete= odbc_do($conn, $reqNbDoublon) ;
if($resultat= odbc_fetch_object($requete))
{
$nbDoublon =$resultat->nb;
}
echo ($nbDoublon);
je vous remercie pour votre réponse.
J'ai compris d’où vient le problème mais maintenant.
Dans mon code je vide la table doublon à chaque fois avant de la remplir avec une requête select count(*).
Malgré la présence de données dans la table Doublon (24 enregistrements) , le fecth_object affiche 0 au lieu de 24 comme si la partie delete venait après le remplissage de la table.
Le soucis maintenant c'est comment éviter ca?
Voici le code
//vider table doublon
$req_supDoubl="DELETE FROM Doublon ";
$requete_supDoubl = odbc_do($conn, $req_supDoubl) ;
//Recherche de doublons dans PointTemp et remplissage table Doublon
$req_doubl=("INSERT INTO Doublon
SELECT COUNT(*) AS nbr_doublon, CodeAnalytique, DatePointage, Matricule, TypePointage
FROM PointTemp
GROUP BY CodeAnalytique, DatePointage, Matricule, TypePointage
HAVING COUNT(*) > 1");
$requete_doubl = odbc_do($conn, $req_doubl) ;
//calcul nombre de doublon
$reqNbDoublon= "SELECT COUNT (*) AS nb FROM Doublon";
$requete= odbc_do($conn, $reqNbDoublon) ;
if($resultat= odbc_fetch_object($requete))
{
$nbDoublon =$resultat->nb;
}
echo ($nbDoublon);
Reivax962
- Messages postés
- 3669
- Date d'inscription
- jeudi 16 juin 2005
- Statut
- Membre
- Dernière intervention
- 25 janvier 2021
Bonjour,
Je ne sais pas pourquoi les requêtes ne s'exécuteraient pas dans l'ordre.
Par contre, si tu fais l'INSERT juste avant, tu as une autre solution : récupérer le odbc_num_rows de l'INSERT, sans passer par une seconde requête :)
Ça deviendrait donc :
Xavier
Je ne sais pas pourquoi les requêtes ne s'exécuteraient pas dans l'ordre.
Par contre, si tu fais l'INSERT juste avant, tu as une autre solution : récupérer le odbc_num_rows de l'INSERT, sans passer par une seconde requête :)
Ça deviendrait donc :
//Recherche de doublons dans PointTemp et remplissage table Doublon $req_doubl=("INSERT INTO Doublon SELECT COUNT(*) AS nbr_doublon, CodeAnalytique, DatePointage, Matricule, TypePointage FROM PointTemp GROUP BY CodeAnalytique, DatePointage, Matricule, TypePointage HAVING COUNT(*) > 1"); $requete_doubl = odbc_do($conn, $req_doubl) ; //calcul nombre de doublon $nbDoublon = odbc_num_rows($requete_doubl); echo ($nbDoublon);
Xavier
isa.dama
- Messages postés
- 27
- Date d'inscription
- mardi 15 mai 2018
- Statut
- Membre
- Dernière intervention
- 16 novembre 2020
- Messages postés
- 3669
- Date d'inscription
- jeudi 16 juin 2005
- Statut
- Membre
- Dernière intervention
- 25 janvier 2021
Bonjour,
je vous remercie pour votre réponse.
En appliquant ce que vous avez demandé toujours le même soucis.
Le résultat affiche 0 malgré la présence des données dans la table Doublon.
C'est comme si effectivement mes requêtes ne mésentente pas dans l'ordre.
Je galère depuis des jours maintenant avec ça.
toujours pas de solution
je vous remercie pour votre réponse.
En appliquant ce que vous avez demandé toujours le même soucis.
Le résultat affiche 0 malgré la présence des données dans la table Doublon.
C'est comme si effectivement mes requêtes ne mésentente pas dans l'ordre.
Je galère depuis des jours maintenant avec ça.
toujours pas de solution
Reivax962
- Messages postés
- 3669
- Date d'inscription
- jeudi 16 juin 2005
- Statut
- Membre
- Dernière intervention
- 25 janvier 2021
- Messages postés
- 27
- Date d'inscription
- mardi 15 mai 2018
- Statut
- Membre
- Dernière intervention
- 16 novembre 2020
Et tu n'as aucun message d'erreur ?
Tu es sûr que ta requête a bien été exécutée : la base est remplie comme tu l'attends ?
Sinon, rajoute ça après le odbc_do :
Xavier
Tu es sûr que ta requête a bien été exécutée : la base est remplie comme tu l'attends ?
Sinon, rajoute ça après le odbc_do :
if ($requete_doubl === FALSE) echo "Erreur SQL : " . odbc_errormsg($conn);
Xavier
isa.dama
- Messages postés
- 27
- Date d'inscription
- mardi 15 mai 2018
- Statut
- Membre
- Dernière intervention
- 16 novembre 2020
- Messages postés
- 3669
- Date d'inscription
- jeudi 16 juin 2005
- Statut
- Membre
- Dernière intervention
- 25 janvier 2021
Bonsoir,
la base est bien renseignée puisque je vois son contenu quand je l'ouvre.
La requête fonctionne bien quand je l'exécute directement dans access et ça affiche bien le nombre d'enregistrement.
En ajoutant le code que vous m'avez envoyer je ne recois aucun message d'erreur.
Je suppose que c'est pour s’assurer que la requête s'exécute bien.
La requête s'exécute sauf qu'elle ne me renvoie pas le résultat attendu.
Merci d'avance!
la base est bien renseignée puisque je vois son contenu quand je l'ouvre.
La requête fonctionne bien quand je l'exécute directement dans access et ça affiche bien le nombre d'enregistrement.
En ajoutant le code que vous m'avez envoyer je ne recois aucun message d'erreur.
Je suppose que c'est pour s’assurer que la requête s'exécute bien.
La requête s'exécute sauf qu'elle ne me renvoie pas le résultat attendu.
Merci d'avance!
je vous remercie pour votre disponibilité.
J'ai essayé d'appliquer vos indications mais le soucis que j'ai actuellement est que ma condition if n'est plus fonctionnelle.
Seule la condition else s'exécute à tous les coups.
Pourtant, le résultat de ma requête retourne le chiffre 28 quand je l'exécute hors de mon code
Que faire?