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 :

Formulaire de recherche dans base ACCESS via PHP [ODBC]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut Formulaire de recherche dans base ACCESS via PHP
    Bonjour,

    Je crée actuellement une interface web en PHP avec ODBC pour exploiter les données d'une base de données ACCESS.

    Je bloque sur un script qui permet(tra) aux utilisateurs de rechercher les documents liés à une machine (recherche par nom de machine).

    J'ai deux tables :
    - table DOCUMENTS (id, nom de doc, date, format, thème, résumé, etc.)
    - table MACHINES (id, nom, type, catégorie)

    Je me suis basée sur un formulaire PHP-MySQL publié sur le site Comment ça marche.

    Voici mon code. D'après le message d'erreur que j'obtiens, l'erreur se trouve sur la ligne que j'ai mis en rouge mais je n'arrive pas à comprendre pourquoi.

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <?php
    
    //connexion à une base de données ACCESS
    $bd=""; // identifiant DSN
    $user=""; // login
    $password=""; // password
    $cnx=odbc_connect( $bd , $user, $password );
    
    echo "
    
    <html>
    
    <head>
    
    <title>Résultat de la recherche</title>
    
    </head>
    
    <body>";
    
    // Si aucun mot clé n'a été saisi, le script demande à l'utilisateur de bien vouloir préciser un mot clé
    if (($Mot == "")||($Mot == "%")) 
    	{
    	echo 
    	"Veuillez entrer le nom d'une machine s'il vous plaît!<p>";
    	}
    
    else 
    {
    
    // Sélection des documents contenant le nom de la machine
    	$query = "SELECT machines.nommachine, machines.typemachine, machines.categoriemachine, documents.nomdoc, documents.typedoc, documents.formatdoc, documents.datedoc, documents.languedoc, documents.liendoc, documents.themedoc, documents.resumedoc FROM machines INNER JOIN (documents INNER JOIN documents_machines ON documents.iddoc = documents_machines.iddoc) ON machines.idmachine = documents_machines.idmachine WHERE (((machines.nommachine) LIKE \"%$Mot%\")) ORDER BY documents.nomdoc";
    
    	$result = odbc_do($cnx, $query);
    
    	$row = odbc_fetch_row($result);
    
    	$Nombre = $row[0];
    
    // Si aucun enregistrement n'est retourné, affichage du message suivant
    	if ($Nombre == "0") 
    	{
    	echo 
    	"<h2>Aucun document ne correspond à votre recherche</h2><p>";
    	}
    // Si un seul enregistrement est trouvé, affichage d'un message au singulier
    	if ($Nombre == "1") 
    	{
    	echo 
    	"<a name=\"#resultat\"><h2>Résultat: Un document trouvé</h2></a><p>";
    	}
    	
    // Dans le cas contraire le message est au pluriel
    	else 
    	{
    	echo
    	"<a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a><p>";
    	}
    
    // Sinon, affichage des résultats
    	else
    	{
    	$query = "SELECT machines.nommachine, machines.typemachine, machines.categoriemachine, documents.nomdoc, documents.typedoc, documents.formatdoc, documents.datedoc, documents.languedoc, documents.liendoc, documents.themedoc, documents.resumedoc FROM machines INNER JOIN (documents INNER JOIN documents_machines ON documents.iddoc = documents_machines.iddoc) ON machines.idmachine = documents_machines.idmachine WHERE (((machines.nommachine) LIKE \"%$Mot%\")) ORDER BY documents.nomdoc";
    
    	$result=odbc_do($cnx, $query);
    
    	while($row = odbc_fetch_row($result))
    		{
    		echo 
    		"
    		<p>\n
    		<b>$row[2]</b>\n
    		<p>\n
    		";
    		}
    	}
    
    }
    
    // fermeture de la connexion à la base ACCESS
    odbc_close($cnx);
    
    ?>
    
    </body>
    
    </html>
    Je vous remercie de prendre le temps de vous pencher sur mon problème.

    Bib

  2. #2
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    il te manque 1 } juste avant ton else, ou alors tu as 2 else qui ce suive

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    Bonjour Benji07,

    Merci pour ta réponse. Tu as raison, mes accolades ne sont pas claires.

    J'ai ajouté une accolade avant mon else mais il m'indique la même erreur Parse error: syntax error, unexpected T_ELSE et toujours au niveau du même else.

    Par contre, je me retrouve toujours avec deux else à la suite (le premier du script et le dernier) et je ne vois pas comment faire pour arranger cela.

  4. #4
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    tu as 2 else a la suite

  5. #5
    Membre averti
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Par défaut
    C'est bon, j'ai corrigé mon code au niveau des else et des if qui ne se suivaient pas logiquement.

    Mais évidemment, un autre bug est apparu une fois celui-ci résolu.

    J'ai apparement un problème de syntaxe dans ma requête SQL. J'ai beau chercher sur le net, je ne trouve pas d'aide (guide, tuto ?) sur comment adapter la syntaxe SQL a ODBC/Access. Du coup je teste un peu tout mais rien ne fonctionne. J'ai essayé de coller le requête générée par Access mais ça ne marche pas non plus...

    Pourriez-vous me dire si ma requête SQL vous parait bonne ou pas s'il vous plait ?

    Voila le message d'erreur :
    Warning: odbc_do() [function.odbc-do]: SQL error: [Microsoft][Pilote ODBC Microsoft Access] Erreur de syntaxe dans la clause FROM., SQL state 37000 in SQLExecDirect in C:\Program Files\xampp\htdocs\xampp\Interface\Recherche_document.php on line 23

    Et voila mon code corrigé :

    Je précise que j'ai supprimé du script le bout de code qui permettait de vérifier si le champ était bien rempli car celui-ci ne marche pas non plus (pfff) mais je voulais justement savoir si le script fonctionnait sans cela (ce qui n'est pas le cas).

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <html>
     
    <head>
     
    <title>Résultat de la recherche</title>
     
    </head>
     
    <body>
     
    <?php
     
    //connexion à une base de données ACCESS
    $bd=""; // identifiant DSN
    $user=""; // login
    $password=""; // password
    $cnx=odbc_connect( $bd , $user, $password );
     
    $Mot=$_POST['Mot'];
     
    $query = "SELECT machines.nommachine, machines.typemachine, machines.categoriemachine, documents.nomdoc, documents.typedoc, documents.formatdoc, documents.datedoc, documents.languedoc, documents.liendoc, documents.themedoc, documents.resumedoc FROM machines INNER JOIN documents INNER JOIN documents_machines ON documents.iddoc = documents_machines.iddoc ON machines.idmachine = documents_machines.idmachine WHERE machines.nommachine='$Mot' ORDER BY documents.nomdoc";
     
    $result = odbc_do($cnx, $query);
     
    $row = odbc_fetch_row($result);
     
    $Nombre = $row[0];
     
    	// Si aucun enregistrement n'est retourné, affichage du message suivant
    	if ($Nombre == "0") 
    	{
    	echo 
    	"<h2>Aucun document ne correspond à votre recherche</h2><p>";
    	}
     
    	// Sinon, affichage des résultats
    	else
    	{
    	$query = "SELECT machines.nommachine, machines.typemachine, machines.categoriemachine, documents.nomdoc, documents.typedoc, documents.formatdoc, documents.datedoc, documents.languedoc, documents.liendoc, documents.themedoc, documents.resumedoc FROM machines INNER JOIN documents INNER JOIN documents_machines ON documents.iddoc = documents_machines.iddoc ON machines.idmachine = documents_machines.idmachine WHERE machines.nommachine='$Mot' ORDER BY documents.nomdoc";
     
    	$result=odbc_do($cnx, $query);	
     
    		// Si un seul enregistrement est trouvé, affichage d'un message au singulier
    		if ($Nombre == "1") 
    		{
    		echo 
    		"<a name=\"#resultat\"><h2>Résultat: Un document trouvé</h2></a><p>";
    		}
     
    		// Dans le cas contraire le message est au pluriel
    		else 
    		{
    		echo
    		"<a name=\"#resultat\"><h2>Résultat: $Nombre articles trouvés</h2></a><p>";
    		}
    	}
     
    	while($row = odbc_fetch_row($result))
    		{
    		echo 
    		"
    		<p>\n
    		<b>$row[2]</b>\n
    		<p>\n
    		";
    		}
     
     
    // fermeture de la connexion à la base ACCESS
    odbc_close($cnx);
     
    ?>
     
    </body>
     
    </html>

  6. #6
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Par défaut
    Maintenant le problème est dans ta requête SQL :

    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
    SELECT machines.nommachine, 
          machines.typemachine, 
          machines.categoriemachine, 
          documents.nomdoc, 
          documents.typedoc, 
          documents.formatdoc, 
          documents.datedoc, 
          documents.languedoc, 
          documents.liendoc, 
          documents.themedoc, 
          documents.resumedoc 
    FROM machines 
    INNER JOIN documents ON ...
    INNER JOIN documents_machines 
        ON (documents.iddoc = documents_machines.iddoc 
             AND machines.idmachine = documents_machines.idmachine) 
    WHERE machines.nommachine='$Mot' 
    ORDER BY documents.nomdoc
    Il fallait que tu remplace un ON par un AND, que tu ajoute des () et il manque toujours un ON dans ton premier INNER JOIN

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

Discussions similaires

  1. [SimpleXML] formulaire de recherche dans un fichier XML php
    Par oualid4ever dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 20/01/2013, 09h54
  2. Probleme boucle If recherche dans base access
    Par PITP2 dans le forum ASP
    Réponses: 5
    Dernier message: 10/02/2009, 20h55
  3. Recherche dans une table via un formulaire
    Par Z[ee]k dans le forum Access
    Réponses: 3
    Dernier message: 05/06/2006, 11h14
  4. recherche par mots-clés dans base access
    Par syber72 dans le forum Access
    Réponses: 2
    Dernier message: 07/03/2006, 13h53
  5. Recherche dans base access
    Par VARACH dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/01/2006, 08h17

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