{Oracle} afficher une table en php

Résolu
Bonjour,
j'ai crée une base de donnée d'une bibliothèque
mais mon problème c'est que je n'arrive pas a crée une page php qui permet d'affiche la liste des livres de ma bibliothèque
une requete évidente serais par exemple :
select* from livre ;
mais comment afficher les données de la table sur une page php
es ce quelqu'un pourrais me donner de l'aide svp
merci
Configuration: Windows XP
Firefox 3.0.16

11 réponses

  1. alors il faut savoir qu'une requete avec oracle n'equivaux pas avec une requete avec mysql

    soit

    regarde ce site ;)

    http://www.asp-php.net/tutorial/asp-php/php_et_oracle.php

    Cordialement
    Dragondark de lonlindil
    0
    1. merci pour le site !!!!!
      mais il y a un point que je ne comprends pas la
      pour se connecter a la base de donnée
      j'utilisais la commande oci_connect()
      alors que la je trouves la commande ora_logon()
      c'est quoi la différence entre ces deux fonctions ? et la quel est compatible la version d'oracle que j utilise
      en fete j'utilise la version oracle 10g
      0
  2. d'apres ce que j'ai lut, ora_logon est pour oracle 7 et anterieur
    et oci_logon pour les version ulterieur

    oci_connect() je ne sais pas

    apres je ne peux pas te dire, je n'utilise pas oracle, que je ne trouve pas des plus accessible personnelement ^^'.
    je te conseil de tester et de voir laquel il accepte

    Cordialement
    Dragondark de lonlindil
    0
    1. voila ca marche
      mais il reste juste le problème de la variable results
      a chaque foi que je lances mon fichier on m'affiche un message d'alerte indiquant que cette variable n a pas été défini :

      Notice: Undefined variable: results in C:\wamp\www\essai.php on line 11
      0
  3. peux tu me montrer ton essai.php?

    Cordialement
    Dragondark de lonlindil
    0
    1. <?php
      include ("connexion.php");

      echo "Liste des livres";

      $query = "SELECT code_livre,titre,themes from livre";
      include("select.php");

      // Parcours du tableau $results pour afficher les résultats :
      if (count($results)) // Si y'a des résultat
      {
      reset($results); // se placer à la première ligne du tableau $results
      while($res = each($results)) // Parcourir le tableau $results
      {
      echo $res[1]["CODE_LIVRE"]; // code_livre
      echo $res[1]["TITRE"]; // titre
      echo $res[1]["THEMES"]; //themes
      // Attention, il faut bien mettre les noms de colonnes en MAJUSCULE
      // et entre " et "

      // Traitement...
      echo "<br />";
      }
      }

      include ("deconnexion.php");

      ?>

      et ça c'est le fichier select.php

      <? // Il suffit de mette en commentaire error_reporting pour faire du
      // débogage - voir quand il n'y a aucun résultat "NO DATA FOUND" par exemple.
      error_reporting(0);

      // Crée un tableau, un curseur, compte les colonnes,
      // fait le fetch en insérant dans le tableau.
      $results = array();
      $ora_cur = ora_do($ora_conn, $query);

      if ($ora_cur)
      {
      // Nombre de colonnes
      $numCols = ora_numcols($ora_cur);

      // Prends la première ligne et la met dans le tableau...
      $row = array();
      for($i=0; $i<$numCols; $i++)
      { // Parcours des colonnes
      $row[ora_columnname($ora_cur, $i)] = ora_getcolumn($ora_cur,$i);
      }
      array_push($results,$row);

      // "Fetch" des lignes, une par une, en créant un tableau pour chaque ligne.
      // Chaque tableau est inséré à la suite du tableau $results.
      while (ora_fetch($ora_cur))
      { // Pour chaque ligne
      $row = array();
      for($i=0; $i<$numCols; $i++)
      { // Chaque colonne
      $row[ora_columnname($ora_cur, $i)] = ora_getcolumn($ora_cur,$i);
      }
      array_push($results,$row);
      }
      }
      // Le fameux error_reporting. Mettre en commentaire pour voir les NO_DATA_FOUND.
      error_reporting(1);
      ?>

      et ça c'est les deux fichiers connexion.php et deconnexion.php

      <?php
      // connexion.php se connecte à la base.
      $ora_conn = oci_connect("biblio","admin");
      ?>

      <?php
      // Se déconnecter de la base
      oci_close($ora_conn);
      ?>
      1
      1. remplace i
        f (count($results)) // Si y'a des résultat 


        par

        if (isset($results)&&count($results)) // Si y'a des résultat 


        meme le count($results) deviens inutile dans ce cas la car si $result n'existe pas (donc rien dedans) isset($results) retournera false

        Cordialement
        Dragondark de lonlindil
        0
        1. j'ai fait la modification que tu as proposé dragondark
          la page php est lancée correctement!!
          sauf que je reçoit une page vide !!
          donc le contenue de la table n'est pas affiché !!!
          0
      2. le faite qu'il t'ai retourner

        Notice: Undefined variable: results in C:\wamp\www\essai.php on line 11

        signifie que ta requete n'a rien retourner donc oui ta table est vide pour cette requete, verifie la en la testant drirectement dans oracle.

        apres :

        rajoute cette ligne

        print_r($ora_cur); 
        et dis nous si ca t'affiche quelque chose

        ps : quand tu affiche du code n'oublie pas les balise code, ca permet de mieu le lire ;)

        <? 
        	// Il suffit de mette en commentaire error_reporting pour faire du 
        	// débogage - voir quand il n'y a aucun résultat "NO DATA FOUND" par exemple. 
        	error_reporting(0); 
        
        	// Crée un tableau, un curseur, compte les colonnes, 
        	// fait le fetch en insérant dans le tableau. 
        	$results = array(); 
        	$ora_cur = ora_do($ora_conn, $query); 
        
        	//affiche les entree dans $ora_cur
        	print_r($ora_cur); 
        
        	if ($ora_cur) 
        	{ 
        		// Nombre de colonnes 
        		$numCols = ora_numcols($ora_cur); 
        
        		// Prends la première ligne et la met dans le tableau... 
        		$row = array(); 
        		for($i=0; $i<$numCols; $i++) 
        		{ // Parcours des colonnes 
        			$row[ora_columnname($ora_cur, $i)] = ora_getcolumn($ora_cur,$i); 
        		} 
        		array_push($results,$row); 
        
        		// "Fetch" des lignes, une par une, en créant un tableau pour chaque ligne. 
        		// Chaque tableau est inséré à la suite du tableau $results. 
        		while (ora_fetch($ora_cur)) 
        		{ // Pour chaque ligne 
        			$row = array(); 
        			for($i=0; $i<$numCols; $i++) 
        			{ // Chaque colonne 
        			$row[ora_columnname($ora_cur, $i)] = ora_getcolumn($ora_cur,$i); 
        			} 
        		array_push($results,$row); 
        		}
        	} 
        // Le fameux error_reporting. Mettre en commentaire pour voir les NO_DATA_FOUND. 
        error_reporting(1); 
        ?>


        Cordialement
        dragondark de lonlindil
        1
        1. c'est fait
          j'ai ajouté la commande print_r
          mais ça donne toujours une page vide
          et j'ai testé la requête dans ma base de donnée et ça marche très bien !!!!
          c'est peut être parce que j utilise oci8 et non pas ora ?
          0
      3. le faite que cela ne te retourne rien signifie que ta requete ne fonctionne pas dans ton code,

        donc l'erreur se situe avant le print_r

        essaye de rajouter
        print $query
        en debut de fichier

        Cordialement
        Dragondark de lonlindil
        0
        1. c'est fait
          et ca donne le script de la requete :
          select code_livre,titre,themes from livre

          peut être que la connexion a la base de donnée n'a pas eux lieu ?!
          j'ai déjà exécuté cette requête dans sur oracle et elle fonctionne correctement !!!
          0
      4. donc ce qui pose probleme est la :

        $ora_cur = ora_do($ora_conn, $query); 


        test un

        print_r(ora_do($ora_conn, $query));//ca devrais rien retourner de plus


        je ne connais aps oracle mais cherche de ce coter la ;) si il y a pas une erreur sur la connection et la requete?

        peut etre que tu a inverser les parametre? :o

        ------------------------------------------------------------------------------------------------------------------------------

        $connect = ocilogon("login","mdp","chaine_hote");
        //Connexion à la base
        
        $stmt = ociparse($connect,$query);
        //On parse la requête à effectuer sans oublier de lui passer la chaine de connexion en paramêtre
        
        ociexecute($stmt,OCI_DEFAULT);
        //On execute la requête en lui passant l'option OCI_DEFAULT
        
        
        echo "Début----<br>\n\n";
         
        while (ocifetch($stmt)){ //On parcourt les résultats
          echo ociresult($stmt,1); //On récupère le premier champ de la ma_table
          echo ociresult($stmt,2); //On récupère le deuxième champ de la ma_table
        }
            
        echo "<br>----fin\n\n";
        
        ocilogoff($connect);
        //On se déconnecte du serveur


        essaye un truc comme ca

        Cordialement
        Dragondark de lonlindil
        --
        LE POUVOIR EST NOTRE GLOIRE
        LE CŒUR NOTRE HONNEUR
        0
        1. merci pour ton aide Dragondrak
          je suis parvenu ,grasse a toi,a faire les corrections nécessaires pour que le code fonctionne :
          voila un code valide :

          <?php
          /* oci_fetch_all exemple mbritton at verinet dot com (990624) */
          
          $conn = oci_connect("biblio", "codee");
          
          $stmt = oci_parse($conn, "select code_livre,titre,themes from livre");
          
          oci_execute($stmt);
          
          $nrows = oci_fetch_all($stmt, $results);
          if ($nrows > 0) {
             echo "<table border=\"1\">\n";
             echo "<tr>\n";
             foreach ($results as $key => $val) {
                echo "<th>$key</th>\n";
             }
             echo "</tr>\n";
             
             for ($i = 0; $i < $nrows; $i++) {
                echo "<tr>\n";
                foreach ($results as $data) {
                   echo "<td>$data[$i]</td>\n";
                }
                echo "</tr>\n";
             }
             echo "</table>\n";
          } else {
             echo "Pas de ligne<br />\n";
          }      
          echo "$nrows Lignes lues<br />\n";
           
          oci_free_statement($stmt);
          oci_close($conn);
          ?>


          mais peux tu me dire pourquoi le premier code ne fonctionne pas stp ?!
          tu m as dit que la fonction :
          $ora_cur = ora_do($ora_conn, $query);

          n a pas été lancer
          pourquoi ?
          et comment tu as su que c'est cette fonction qui cause problème dans le code php ?
          merci
          0
      5. je ne pourais pas te dire :s, la comme ca je sais pas, peut etre une incompatibilité?
        je ne connais pas assez oracle pour te dire

        Cordialement
        Dragondark de lonlindil
        0
        1. Bonjour , je voudrais aussi recuperer un base ORACLE en php , mais j'ai un probleme , c'est que quand je veut faire juste un test pour accedez a ma base ORACLE en utilisant la fonction "oci_connect" il me dit qu'elle n'est pas definit .
          Donc je sais pas s'il y avait des manip anterieur a effectuer :/
          un petit coup de main s'il vous plait ?
          0
          1. bonjour,j'aurais souhaite comprendre et maitriser le bon fonctionnement d'une base de donnees tout comme vous et en se basant beaucoup plus sur les requettes....merci
            0