Condition if

Fermé
isa.dama - Modifié le 7 janv. 2020 à 10:14
isa.dama Messages postés 30 Date d'inscription mardi 15 mai 2018 Statut Membre Dernière intervention 27 avril 2023 - 17 janv. 2020 à 15:12
Bonjour,

je souhaite charger un page web si le contenu d'une table n'est pas vide et afficher le message "Echec" si elle vide.
Dans ma requête je compte le nombre de ligne.
S'il est supérieur à 0 j'affiche ma page web.
Dans le cas contraire j'affiche "Echec"
Mon problème est au niveau de ma condition if.
Comment faire le lien de cette condition avec le résultat de ma requête?

merci d'avance



Voici la partie de mon code

  //calcul nombre de doublon
$req_NbDoubl="SELECT COUNT(CodeAnalytique) FROM Doublon";

$requete_NbDoubl= odbc_do($conn, $req_NbDoubl) ;



if($requete_NbDoubl>0)
{
 ?>
   <script type="text/javascript">
      document.location.href = 'ListeSOMISA.php?page=page_reset';
   </script>
 <?php
 }else{
  
  ?>
   <script type="text/javascript">
    alert('Echec Importation!!!');
    document.location.href = 'index.php?page=page_reset';
   </script>
       <?php
  }



EDIT : Ajout des balises de code

Configuration: Windows / Firefox 71.0

5 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
7 janv. 2020 à 10:16
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 :
$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
0
Bonjour,
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?
0
jordane45 Messages postés 38319 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 30 novembre 2024 4 706
7 janv. 2020 à 10:16
Bonjour,

N'as tu pas oublié de faire un FETCH de ton résultat de requête ?


0
Bonjour,
je pense que le problème est à ce niveau.
Je vais faire des recherche sur ce point.

Merci!!!!
0
isa.dama Messages postés 30 Date d'inscription mardi 15 mai 2018 Statut Membre Dernière intervention 27 avril 2023
13 janv. 2020 à 11:28
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;
}
0
samyb2313 Messages postés 52 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 15 janvier 2020 5
14 janv. 2020 à 09:41
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;


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
isa.dama Messages postés 30 Date d'inscription mardi 15 mai 2018 Statut Membre Dernière intervention 27 avril 2023
14 janv. 2020 à 18:07
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);
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
15 janv. 2020 à 08:29
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 :
//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
0
samyb2313 Messages postés 52 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 15 janvier 2020 5 > Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
15 janv. 2020 à 09:55
Excellent :)
0
isa.dama Messages postés 30 Date d'inscription mardi 15 mai 2018 Statut Membre Dernière intervention 27 avril 2023 > Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
17 janv. 2020 à 12:36
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
0
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > isa.dama Messages postés 30 Date d'inscription mardi 15 mai 2018 Statut Membre Dernière intervention 27 avril 2023
17 janv. 2020 à 13:50
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 :
if ($requete_doubl === FALSE)
    echo "Erreur SQL : " . odbc_errormsg($conn);


Xavier
0
isa.dama Messages postés 30 Date d'inscription mardi 15 mai 2018 Statut Membre Dernière intervention 27 avril 2023 > Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
17 janv. 2020 à 15:12
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!
0