PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 Re : Forum Général PHP » SQL => XML => XSLT & PHP => HTML » 19-09-2012 11:36:15

Salut,

Je m'auto-réponds histoire de dire que j'ai trouvé ma réponse à ma propre question : pour relier mon document XML à ma feuille de style XSLT, j'ai utilisé la fonction DOMDocument::createProcessingInstruction() dans laquelle j'ai spécifié les arguments : 'xml-stylesheet', 'type="text/xsl" href="fichier.xsl"'. Synthétisant ainsi dans l'arbre XML généré par DOM la ligne précisant qu'il était relié à un XSL.


<?php  
$dom=new DOMDocument('1.0','UTF-8');

//Déclaration de feuille de style XSLT ---------------------------

$xslt=$dom->createProcessingInstruction('xml-stylesheet', 'type="text/xsl", href="style fiches.xml"');
$dom->appendChild($xslt);
?>
 

A voir sur : http://php.net/manual/en/domdocument.cr … uction.php, merci PHP Manual !

#2 Re : Forum Général PHP » SQL => XML => XSLT & PHP => HTML » 19-09-2012 11:36:15

Bonjour,

Dans la même famille, intéressé par XML et RDF, j'utilise DOMXML dans du PHP pour générer un arbre en RDF-XML pour décrire... les données d'un timbre. Ca, j'ai réussi. Mon problème, c'est que je souhaite rajouter une ligne pour déclarer le lien entre ma XSL stylesheet et mon arbre XML ; pour ça aussi je passe par DOMXML mais ça ne marche pas. J'ignore pourquoi.

Ce dont je m'aperçois, c'est qu'ayant utilisé la fonction createElement(), j'ouvre mes cotes et entre le nom de l'élément : ?xml-stylesheet ... ? et PHP me retourne une erreur... un problème avec les points d'interrogation ? Placés dans des cotes, ne devraient-ils pas s'afficher sagement comme n'importe quel caractère entre cotes ?

La fonction DOMDocument() me permet d'y passer les paramètres : 'xml' et '1.0' et cela synthétise dans l'arbre le prologue XML, n'y a t-il pas une fonction qui permette de faire de même avec ma déclaration de feuille de style XSL ?

<?php  
$dom=new DOMDocument('1.0','UTF-8');

//Définition des espaces de noms ------------------

$ele1=$dom->createElement('rdf:RDF');
$att1=$dom->createAttribute('xmlns:dc');
$att1->value='http://purl.org/dc/elements/1.1/';
$ele1->appendChild($att1);
$att2=$dom->createAttribute('xmlns:foaf');
$att2->value='http://xmlns.com/foaf/0.1/';
$ele1->appendChild($att2);
$att3=$dom->createAttribute('xmlns:image');
$att3->value='http://purl.org/rss/1.0/modules/image/';
$ele1->appendChild($att3);
$att4=$dom->createAttribute('xmlns:rdf');
$att4->value='http://www.w3.org/1999/02/22-rdf-syntax-ns#';
$ele1->appendChild($att4);
$att5=$dom->createAttribute('xmlns:rdfs');
$att5->value='http://www.w3.org/2000/01/rdf-schema#';
$ele1->appendChild($att5);
$att6=$dom->createAttribute('xmlns:geo');
$att6->value='http://www.w3.org/2003/01/geo/wgs84_pos#';
$ele1->appendChild($att6);
$att7=$dom->createAttribute('xmlns:owl');
$att7->value='http://www.w3.org/2002/07/owl#';
$ele1->appendChild($att7);
$att8=$dom->createAttribute('xmlns:xsd');
$att8->value='http://www.w3.org/2001/XMLSchema#';
$ele1->appendChild($att8);
$att9=$dom->createAttribute('xmlns:skos');
$att9->value='http://www.w3.org/2004/02/skos/core#';
$ele1->appendChild($att9);
$dom->appendChild($ele1);

//Déclaration de feuille de style XSLT ---------------------------

$styleele1=$dom->createElement('xml-stylesheet');
$styleatt1=$dom->createAttribute('href');
$styleatt1->value='fichier.xsl';
$styleatt2=$dom->createAttribute('type');
$styleatt2->value='text/xsl';
$styleele1->appendChild($styleatt1);
$styleele1->appendChild($styleatt2);

 

En vous remerciant par avance d'une aide éventuelle !

#3 Re : Forum Général PHP » Affichage de résultats de recherche » 13-03-2011 10:14:22

Salut xTG,

D'abord, merci pour cette aide. Ca ne semble pas fonctionner bien que je crois comprendre ce que tu as voulu me faire faire. Je me retrouve toujours avec un tableau complet de parcours touristiques sans avoir de tri fait avec ma requête SQL. La variable $cond_secteur doit-elle comporter un contenu entre ses guillemets ou celui-ci s'insère t-il en fonction du bouton sur lequel j'ai cliqué préalablement ? Enfin, que veulent dire les apostrophes que l'on retrouve dans ton code ?

Merci.

#4 Re : Forum Général PHP » Affichage de résultats de recherche » 13-03-2011 10:14:22

Salut à tous,

C'est toujours moi et mes problème d'affichages de listes de parcours touristiques. J'ai avancé dans ma réalisation et suis parvenu à faire ce que je voulais mais j'ai maintenant un autre problème :

A présent, je souhaiterais qu'en cliquant sur différents boutons de ma page d'accueil, je sois renvoyé aux parcours touristiques qui correspondent au bouton sur lequel j'ai cliqué. J'ai crée six requêtes SQL qui sont valides, une pour chaque grande catégorie de parcours. Cependant, je me retrouve malgré mes boucles while et mes conditions en if... elseif.. else, avec la liste de tous les parcours.

Voici l'état actuel de mon code :

<?php

//La section "Afrique Ouest équatoriale Australie" correspond à l'onglet "Afrique Noire".


$destination1 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Afrique Saharienne' ORDER BY pays ASC, parcours ASC");
$destination2 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Mediterranee Proche Orient Europe' ORDER BY pays ASC, parcours ASC");
$destination3 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Afrique Ouest Equatoriale Australe' ORDER BY pays ASC, parcours ASC");
$destination4 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Asie' ORDER BY pays ASC, parcours ASC");
$destination5 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Oceanie' ORDER BY pays ASC, parcours ASC");
$destination6 = mysql_query ("SELECT parcours, pays, nbrJours FROM parcours WHERE grandSecteurs = 'Ameriques' ORDER BY pays ASC, parcours ASC");


echo "<br/><b>Les parcours de la zone demandée.</b> <br/><br/><hr/>";

  while ($tableau1 = mysql_fetch_array($destination1)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination2)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination3)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination4)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination5)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 
  while ($tableau1 = mysql_fetch_array($destination6)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    }
 

?>

 

L'un(e) d'entre vous aurait une solution pour récupérer les bonnes données en cliquant sur le bon bouton ? J'ai même essayé les variables superglobales en GET et POST avec les id des boutons mais rien n'y a fait.

Quelqu'un a une idée ?

Merci par avance.

#5 Re : Forum Général PHP » Affichage de résultats de recherche » 13-03-2011 10:14:22

Salut,

Ce que j'entends par "ne marche pas", c'est que ça me retourne une parse error in line 60. Pour mémoire, le code que l'on m'avait suggéré était :

<?php

if(isset($_POST["parcours"])){ // isset — Détermine si une variable est définie et est différente de NULL

    $recherche=sprintf("SELECT parcours FROM parcours WHERE parcours LIKE '%$mot%' ORDER BY pays, parcours",

                        mysql_real_escape($_POST['parcours']));

     }

else{

    $resultat = mysql_query ("SELECT parcours, nbrJours FROM parcours ORDER BY parcours");

    }

$resultat = mysql_query ($recherche) or die($recherche.'<br />'."Echec de la requête." .mysql_error ());

while ($tableau = mysql_fetch_array($resultat)) {

    printf("%s %s<br/><hr/>",

            $tableau['parcours'],

            isset($tableau['nbrJours'])? $tableau['nbrJours'] :'');

    }
?>

 

Comme ça ne fonctionnait pas (peut-être est-ce moi qui en ait mal compris l'utilisation) j'ai repris mon ancien code et j'ai bidouillé, du coup, je suis à peu près arrivé à ce que je voulais. Voici l'état actuel du code :

<?php

$saut = "<br><br>";
 
$mot = $_POST["parcours"];
$recherche = mysql_query ("SELECT parcours, nbrJours FROM parcours WHERE parcours LIKE '%$mot%' ORDER BY pays, parcours");

if (!$mot) {
  echo "Commencez votre recherche de parcours !";
  }

elseif ($recherche) {
  echo "<br/><b>Résultat de la recherche pour le terme : $mot.</b><br/><br/><hr/>";
  while ($tableau1 = mysql_fetch_array($recherche)) {
    echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]}<br/><hr/>";
      }
    }

 

?>

<?php
echo $saut;

$resultat = mysql_query ("SELECT parcours, nbrJours FROM parcours ORDER BY parcours");


echo "<br/><b>Voici la totalité des parcours proposés.</b><br/><br/><hr/>";
while ($tableau1 = mysql_fetch_array($resultat)) {
  echo "{$tableau1["parcours"]}, {$tableau1["nbrJours"]} jours<br/><hr/>";
    if (!$resultat) {
      die ("Echec de la requête." .mysql_error ());
      }
  }
   
?>

 

Mais c'est pas grave, comme je l'ai dit, je reste preneur diées qui m'aideraient à améliorer les choses !

A plus !

#6 Re : Forum Général PHP » Affichage de résultats de recherche » 13-03-2011 10:14:22

Salut,

Malheureusement ça ne marche pas, mais merci du coup de main. Si toi ou d'autres ont encore des idées sur mon problème, je suis preneur.

Ceci étant, il y a dans le code que tu m'as suggéré des fonctions que je ne connaissais pas :

- printf
- sprintf
- mysql_real_escape

Que veulent-elles dire ?

C'est quoi le %s ? Et dans le LIKE pourquoi y a t-il '%%%s%% ?

Je vais essayer de voir pour la suite avec le code que j'avais mais je conserve les autres codes.

Merci !

#7 Re : Forum Général PHP » Affichage de résultats de recherche » 13-03-2011 10:14:22

Salut,

Je vais donc essayer d'être plus clair :

J'ai une page web avec du php dans laquelle je dois faire figurer des parcours touristiques tirés d'une base de données. Cela fonctionne, quand je clique sur l'onglet "parcours" de mon site, ça marche, la liste de parcours apparaît. Voir la variable $resultat et son code ci-dessus. L'autre variable $recherche renvoie à une requête qui s'exécutera dans un formulaire selon le mot défini dans la variable $mot qui renvoie au champ de recherche, là aussi, ça marche.

Le hic, c'est que lorsque j'effectue un recherche sur un mot comme "trekking", j'obtoens la liste de tous les parcours et ensuite celle concenant le mot que j'ai tapé dans le champ de recherche lié au formulaire.

Ce que je voudrais, c'est que quelqu'un me dise quoi écrire pour n'avoir qu'un seul des deux tableaux à la fois.

Voilà, merci.

#8 Forum Général PHP » Affichage de résultats de recherche » 13-03-2011 10:14:22

péachepé
Réponses : 10

Bonjour à tous,

Je suis nouveau sur le forum et débutant en php. Je dois remettre en place la base de données d'un site "brouillon" pour un boulot à la fac.

Je parviens à faire s'afficher l'ensemble des parcours touristiques proposés dans la base de données et je suis aussi parvenu à faire s'afficher les résultats pour une requête formulée via le champ de recherche.

Cependant, une fois ma requête validée sur le champ de recherche, les résultats voulus apparaissent, mais l'ensemble des parcours touristiques au dessus reste apparent.

Je voudrais savoir comment faire pour que ce soit l'un ou l'autre qui apparaisse, pas les deux en même temps ! Voici l'état actuel de mon code :

<?php

$resultat = mysql_query ("SELECT parcours, nbrJours FROM parcours ORDER BY parcours");
 
$mot = $_POST["parcours"];
$recherche = mysql_query ("SELECT parcours FROM parcours WHERE parcours LIKE '%$mot%' ORDER BY pays, parcours");


while ($tableau1 = mysql_fetch_array($resultat)) {
  echo "{$tableau1["parcours"]}<br/><hr/>";
    if (!$resultat) {
      die ("Echec de la requête." .mysql_error ());
      }
  }
 
 
  echo "<br/><hr/>";
   
if ($recherche) {
  while ($tableau2 = mysql_fetch_array($recherche)) {
    echo "{$tableau2["parcours"]}<br/><hr/>";
      if (!$recherche) {
        die ("Echec de la requête." .mysql_error ());
        }
    }
  }
 
 
 
?>

 

Je vous remercie tous par avance.
A bientôt

Pied de page des forums

Propulsé par FluxBB