Error en php

infokab Mensajes publicados 23 Estado Miembro -  
infokab Mensajes publicados 23 Estado Miembro -
Hola
estoy intentando crear un pequeño sitio pero tengo este error:

Fatal error: Call to a member function query() on null in C:\xampp\htdocs\tp3\etudiant\SiteWebShop\index.php on línea 26

no sé si me podrías ayudar
gracias

2 respuestas

  1. infokab Mensajes publicados 23 Estado Miembro
     
    Aquí está la línea que presenta el problema

    $sql=$conexion->query($consulta); // envío de la consulta
    0
    1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
       
      Hola,

      el mensaje de error significa que $conexion es "null".
      ¿Dónde lo has inicializado?

      Sabiendo que para ayudarte... tener todo el código es lo ideal !!

      NB: Si usas PDO: https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

      NB²: Para publicar tu código en el foro: https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code


      NB3: A leer antes... ¡para que nos muestres un código "limpio"!
      https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
      0
      1. infokab Mensajes publicados 23 Estado Miembro > jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención  
         
        hola

        gracias por tu respuesta

        aquí está mi archivo de conexión :

         <?php define("SERVIDOR","localhost"); define("USUARIO","root"); define("CONTRASEÑA",""); define("BD","sitewebshop"); function conexionBd($host=SERVIDOR,$username=USUARIO,$password=CONTRASEÑA,$bd=BD) { try { $conexion= new PDO('mysql:host='.$host.';dbname='.$bd, $username, $password); $conexion->exec("SET CHARACTER SET utf8"); //Gestión de acentos return $conexion; } catch(Exception $e) { echo 'Error : '.$e->getMessage().'<br />'; echo 'N° : '.$e->getCode(); return null; } } ?> 

        EDITAR : ¡Añadido las etiquetas de código!

        0
      2. infokab Mensajes publicados 23 Estado Miembro > jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención  
         
        et las líneas que me plantean problema

        $requete = "SELECT * FROM article ORDER BY RAND() LIMIT 3" ;
        $sql=$connexion->query($requete); // envío de la consulta
        $res=$sql->fetchALL(PDO::FETCH_ASSOC); // devuelve todos los resultados


        gracias
        0
  2. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 833
     
    Re,

    Bueno... aparentemente no has leído ninguno de mis enlaces ANTES de publicar tu código.

    Así que:
    1 - Lee (y aplica...) el contenido de los enlaces que te he dado.
    2 - Muéstranos tu código COMPLETO.
    En el pequeño trozo de código de tus líneas que "causan" problemas... falta la llamada a la función de conexión a la base de datos...

    --
    Atentamente,
    Jordane
    0
    1. infokab Mensajes publicados 23 Estado Miembro
       
      gracias por tu respuesta

      a decir verdad no he entendido mucho (¿hay que añadir la línea " setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); "
      para manejar mis errores?

      ¿el problema se encuentra en mi archivo de conexión o en mis consultas?

      gracias
      0
    2. infokab Mensajes publicados 23 Estado Miembro
       
      ```html

      <!DOCTYPE html>
      <html>
      <head>
      <meta charset="utf-8" />
      <link href="css/style.css" rel="stylesheet" type="text/css" />
      <title>SiteWebShop</title>

      </head>
      <body>

      <?php include 'header.php' ; ?>
      <!-- INICIO de la página -->

      <?php

      include 'utile.php';

      include_once 'connexion.php';
      $connexion =connexionBd();

      $requete = "SELECT * FROM article ORDER BY RAND() LIMIT 3" ;
      $sql=$connexion->query($requete); // envío de la solicitud
      $res=$sql->fetchALL(PDO::FETCH_ASSOC); // devuelve todos los resultados

      ?>

      <!--<header>
      <div class="wrap">
      <h1><a href="#" rel="nofollow noopener noreferrer" target="_blank"><img src="images/openshop_logo.png" alt="logo open shop"></a></h1>


      <nav>
      <ul>
      <li><a href="index.php" rel="nofollow noopener noreferrer" target="_blank">inicio</a></li>
      <li><a href="login.php" rel="nofollow noopener noreferrer" target="_blank">iniciar sesión</a></li>
      <li><a href="creer_compte.php" rel="nofollow noopener noreferrer" target="_blank">crear cuenta</a></li>
      <li><a href="panier.php" rel="nofollow noopener noreferrer" target="_blank">carrito</a></li>
      </ul>
      </nav>

      <form id="search" action="recherche.php" method="post" enctype="multipart/form-data">
      <p>
      <label for="searchText">Buscar :</label>
      <input id="searchText" name="query" type="text" value="" />
      <input id ="searchBtn" type="submit" class="bouton" value="OK" />
      </p>
      </form>


      <nav id="menu-categorie">
      <ul>
      <li class="smenu"><a href="#" rel="nofollow noopener noreferrer" target="_blank">todos los productos</a></li>
      <li class="smenu"><a href="#" rel="nofollow noopener noreferrer" target="_blank">ropa</a></li>
      <li class="smenu"><a href="#" rel="nofollow noopener noreferrer" target="_blank">accesorios</a></li>
      <li class="smenu"><a href="#" rel="nofollow noopener noreferrer" target="_blank">posters</a></li>
      <li class="smenu"><a href="#" rel="nofollow noopener noreferrer" target="_blank">dvd</a></li>
      </ul>
      </nav>
      </div>
      </header> -->

      <section>


      <header>Bienvenido <span class="ss-titre">Somos el ?????? </span></header>
      <p>La tienda en línea <strong>openSHOP</strong> es un trabajo realizado por <em>Thomas Jouannic</em> y <em>Jérome Saunier</em>
      luego modificado y adaptado <strong>durante el curso de Sitios Web Avanzados</strong>.</p>
      <p>En la parte superior, encontrará un medio para identificarse o crear una cuenta si no tiene ninguna. El campo de búsqueda
      le permite mostrar fácilmente los productos correspondientes a lo que desea. También puede navegar entre las diferentes
      categorías de productos haciendo clic en la que desea ver.</p>
      <p>¡Buena navegación!</p>
      </section>
      <section>
      <header>
      <h2>Al azar...</h2>
      </header>
      <!--Mostrar 3 artículos al azar -->
      <ul id= "product-list" >
      <?php

      foreach ( $res as $key => $val2)

      echo "<li class ='product'>";

      echo "<h3>".$value["Designación"]."</h3>";
      echo "<p><img alt='' src='".$value['img_article']."'></p></img>";
      echo "<p id='precio'>".$value['Precio']."€</p>";
      echo "<p>".tronquer_texte($value['description'])."</p>";

      echo '<p><a href="vue_produit.php?article='.$value[" rel="nofollow noopener noreferrer" target="_blank"id_article"].'">Ver los detalles</a></p>';

      echo '</li>';

      ?>

      </ul>

      </section>

      <?php include('footer.php') ; ?>

      <!--<footer>
      <p> <a id="goto-admin" href="admin.php" rel="nofollow noopener noreferrer" target="_blank">Admin</a></p>
      <p id="extra">
      Sitio Web Avanzados - Año 2016 - versión HTML 5
      </p>

      </footer> -->



      </body>
      </html> ```
      0
    3. infokab Mensajes publicados 23 Estado Miembro
       


      include_once 'conexion.php';
      $conexion =conexionBd();

      $consulta = "SELECT * FROM articulo ORDER BY RAND() LIMIT 3" ;
      $sql=$conexion->query($consulta);
      $res=$sql->fetchALL(PDO::FETCH_ASSOC);




      lo siento, es la primera vez que posteo, no sabía ( esto es mi índice )
      0
    4. infokab Mensajes publicados 23 Estado Miembro
       


      <?php

      define("SERVIDOR","localhost");
      define("USUARIO","root");
      define("CONTRASENA","");
      define("BD","sitewebshop");


      function conexionBd($host=SERVIDOR,$username=USUARIO,$password=CONTRASENA,$bd=BD)
      {
      try
      {
      $conexion= new PDO('mysql:host='.$host.';dbname='.$bd, $username, $password);
      $conexion->exec("SET CHARACTER SET utf8"); //Gestión de acentos
      setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


      return $conexion;
      }
      catch(Exception $e)
      {
      echo 'Error : '.$e->getMessage().'<br />';
      echo 'N° : '.$e->getCode();
      return null;
      }
      }

      ?>





      esto es mi archivo de conexión

      gracias
      0