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 :

probleme dans la requete [ODBC]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut probleme dans la requete
    Bonjour

    j'ai fait un programme qui lit à partir d'un fichier texte une chaine, puis la décomposes en mot, cont chacune est une adresse mail, pour chaque adresse, il exécute une requette permettant de selectionner le contact ayant cette adresse de la base de données, le copier dans une deuxiemme table, puis le supprimer de la premiere.
    mon probleme c'est qu'il n'effectu le traitement que sur le dernier mot de la chaine.
    il n'ya pas de probleme au niveau de la lecture à partir du fichier, car ça peu afficher tout les adresses. le probleme réside au niveau de la boucle WHILE aprés l'exécution de la requete, ça passe pas! j'ai pas pu trouver une explication pour ça, si vous en avez idée, merci de me guider!!

    ceci est le bout de code qui cose le probleme:
    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
     
    while ($tok) 
    {
    echo $tok; // pas de probleme pour la lecture à partir de fichier, ca ça affiche toutes les adresse!
    set_time_limit(50);
    //mise à jours de la base:
    $query="SELECT * FROM inscription WHERE Mail='".$tok."'";
    $res=odbc_do($cnx,$query);
    while($row=odbc_fetch_object($res))// ici est le probleme
        {
    	echo " $row->Mail \n";// ça n'affiche que le dernier mot
    	set_time_limit(50);
    // c'est just pour la convertion des caracteres pouvant causer un probleme lors de l'insertion
    	$from=array("'","&",",","/",".");
    	$to=array(" ","et"," ","ou","");
    	$activite=str_replace($from,$to,$row->Activite);
    	$fonction=str_replace($from,$to,$row->Fonction);
    	$soc=str_replace($from,$to,$row->Societe);
    	$remarque=str_replace($from,$to,$row->Remarque);
    	$adr=str_replace($from,$to,$row->Adresse);
    	$nom=str_replace($from,$to,$row->Nom);
    	$pre=str_replace($from,$to,$row->Prenom);
    	$pays=str_replace($from,$to,$row->Pays);
    	$ville=str_replace($from,$to,$row->Ville);
     
    	$q="INSERT INTO archive VALUES('".date("Y")."-".date("m")."-".date("d")."','".$row->DateInscription."','".$row->Sex."','".$nom."','".$pre."','".$fonction."','".$row->Tel."','".$row->Fax."','".$soc."','".$activite."','".$adr."','".$ville."','".$row->CP."','".$pays."','".$row->Mail."','".$row->WebSite."','".$remarque."','".$row->NumDossier."','".$row->ReceptionOffre."','".$row->TypeInscri."','".$row->Civilite."','".$row->Serveur."')";
    	   $r=odbc_do($cnx,$q);
    ma base est access, et je travaille avec php

  2. #2
    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 contient quoi $tok ?

    Parce qu'a moins qu'il y ait quelque part un bout de code qui fasse changer $tok, ta boucle n'est arreté que par le timeout.

    Si $tok est un tableau contenant les emails, tu voulais peut etre plutot ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach ($tok as $email)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    $tok c'est la variable contenant l'adresse mail extraite du fichier!
    bon le programme lit correctement à partir du fichier, extrait les adresses mail à partir de la chaine lue coorrectement, pas de time out car le programme marche, mais seulement sur la dernière adresse qu'il lit! pas d'erreurs et il affiche enfin le msg de succés de traitement d'une seule adresse! je trouve ça bizare!
    NB: le meme code a fonctionné correctement avant!
    j'ai mit un echo $res;
    et ça affiche #8 Resource id, puis #9 resource id..... tant des adresses

    j'ai aussi essaié ça while($row=odbc_fetch_row($res) or die ("erreur"))
    ça affiche #8 Resource iderreur et neglige le reste de programme!


    ci joint est le code complet:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    while(!feof($fp))
    {
    set_time_limit(50);
    $chaine=fgets($fp,100);
    $tok = strtok($chaine, " ,'()[]<>\n\t\"/*+{}="); 
    while ($tok) 
    {
    //echo $tok;
    set_time_limit(50);
    $query="SELECT * FROM inscription WHERE Mail='".$tok."'";
    $res=odbc_do($cnx,$query);
    	echo $res;
     
    while($row=odbc_fetch_row($res))
        {
     
        echo "$row[Mail]";
    	set_time_limit(50);
    	$from=array("'","&",",","/",".");
    	$to=array(" ","et"," ","ou","");
    	$activite=str_replace($from,$to,$row->Activite);
    	$fonction=str_replace($from,$to,$row->Fonction);
    	$soc=str_replace($from,$to,$row->Societe);
    	$remarque=str_replace($from,$to,$row->Remarque);
    	$adr=str_replace($from,$to,$row->Adresse);
    	$nom=str_replace($from,$to,$row->Nom);
    	$pre=str_replace($from,$to,$row->Prenom);
    	$pays=str_replace($from,$to,$row->Pays);
    	$ville=str_replace($from,$to,$row->Ville);
     
    	$q="INSERT INTO archive VALUES('".date("Y")."-".date("m")."-".date("d")."','".$row->DateInscription."','".$row->Sex."','".$nom."','".$pre."','".$fonction."','".$row->Tel."','".$row->Fax."','".$soc."','".$activite."','".$adr."','".$ville."','".$row->CP."','".$pays."','".$row->Mail."','".$row->WebSite."','".$remarque."','".$row->NumDossier."','".$row->ReceptionOffre."','".$row->TypeInscri."','".$row->Civilite."','".$row->Serveur."')";
    	   $r=odbc_do($cnx,$q);
    	   if(!$r)
    	   {
    	    echo odbc_errormsg($cnx);
    	   }
    		else
    		{
    		$qdel="DELETE FROM inscription WHERE Mail='".$tok."'";
    		$rdel=odbc_do($cnx,$qdel);
    		if(!$rdel)
    	    echo odbc_errormsg($cnx);
    		else
    		{
    		$i++;
    		}
    		}
    }
    $tok = strtok(" ,'()[]<>\n\t\"/*+{}="); 
    }
    }
    }
    fclose($fp);

  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
    Non je ne comprends pas ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while ($tok) 
    {
    //echo $tok;
    set_time_limit(50);
    $query="SELECT * FROM inscription WHERE Mail='".$tok."'";
    While($tok) ca veut dire "tant que $tok == TRUE" donc ca ne s'arrete jamais puisque $tok ne change pas dans cette boucle.
    Ton script s'arrete au bout des 50s que tu as définies.
    Pendant ces 50s il va repeter la meme requete.

    Si tu veux verifier que $tok n'est pas vide il faut faire
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    merci de m'avoir répondre!
    concernant la variable $tok, elle n'est pas vide car j'arrive à l'afficher! en tt cas j'ai essayé le (!empty), et toujour le meme résultat.

    j'ai aussi affiché la requete dans la boucle while, et c'est bon, à chaque foix la variable $tok change de valeur à la fin de la boucle. ceci est l'une des requete généré: SELECT * FROM inscription WHERE Mail='hyounsi@tuniship.net '

    par contre j'ai essayé le(empty) sur le résultat de la requete, et c'est vide!
    donc, c'est tout à fait normal qui va pas executer ce qui est dans la boucle while($row=odbc_fetch_row($res)). j'ai vérifié dans la base de donnée que les adresse existe!
    mon probleme c'est que le résultat de la requete (SELECT) est vide alors que les valeurs axistent dans la base.

  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
    En mettant "while ($tok)" tu veux faire quoi ?

    Sinon j'ai regardé des exemples, et ils utilisent la fonction odbc_result pour recuperer le resultat des requetes odbc sur access
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql="SELECT * FROM customers";
    $rs=odbc_exec($conn,$sql);
    while (odbc_fetch_row($rs))
    {
      $compname=odbc_result($rs,"CompanyName");
      $conname=odbc_result($rs,"ContactName");
      echo "<tr><td>$compname</td>";
      echo "<td>$conname</td></tr>";
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    merci pour m'avoir accorder tout ce temps!!

    au début la variable $tok contient le premier mot dans le texte, le traitement dans la boucle while($tok) s'arete des que $tok change de valeur, et c'est à la fin de la boucle, comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while($tok)
    {
     
    //traitement de $tok numero i
     
    $tok = strtok(" ,'()[]<>\n\t\"/*+{}=");
    }// sortie de la boucle pour le iémme $tok, et $tok prend la valeur de (i+1)émme mot

    j'ai fait comme tu m'as expliqué par odbc_result mais toujours le meme probleme au niveaux des variable qu'il récupère vide, ou q'il ne les trouve pas, alors qu'elles existent dans la BD!!

    Remarque: pour un fichier il fait le traitement sur le derniers mot de fichier seulement et neglige le reste!

  8. #8
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    bon j'ai juste mis 3 adresses dans mon fichier texte, et j'ai essayé de récupérer les variables et les afficher comme dans le code dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    while ($tok)
    {
    $req="SELECT * FROM inscription WHERE Mail='$tok'";
    $res=odbc_do($cnx,$req);
    if (!empty($res))
    echo "non vide<br />";
    $row=odbc_fetch_object($res);
    echo "$row->Mail|$row->Remarque|$row->Prenom|$row->Fonction <br />";
    $tok = strtok(" ,'()[]<>\n\t\"/*+{}="); 
    }
    regardez ce qu'il affiche:
    nonvide
    |||
    non vide
    |||
    non vide
    mouna.baccouche@argania.com.tn|ns|NR|NR

    il ne garde que la derniere valeurj'y trouve pas une explication!

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 64
    Par défaut
    voila une journée perdu pour une betise!!!
    le probleme c'était qu'il ya un espace de plus dans le mot récupéré du fichier, d'ou à chaque execution de la requete, aucun mot(+espace) ne sera trouvé!

    merci encore une foix sabotage

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme dans ma requete
    Par windowsxx2001 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/03/2007, 13h31
  2. [Requête] Problème dans une requête analyse croisée
    Par drthodt dans le forum Requêtes et SQL.
    Réponses: 20
    Dernier message: 29/09/2006, 10h27
  3. [XPath] Probleme dans une requete XPath
    Par kalmless21 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 03/07/2006, 22h22
  4. probleme dans une requete de suppression
    Par iam dans le forum Bases de données
    Réponses: 3
    Dernier message: 03/07/2006, 11h11
  5. Probleme dans ma requete
    Par Kuroro dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2003, 11h14

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