Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] problema al realizar consulta mysql

Estas en el tema de problema al realizar consulta mysql en el foro de PHP en Foros del Web. Buenas chicos. entre que soy novato y que llevo muchas horas con ello, no consigo solucionarlo y estoy algo bloqueado. No sabía si postear el ...
  #1 (permalink)  
Antiguo 14/02/2014, 16:08
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
problema al realizar consulta mysql

Buenas chicos. entre que soy novato y que llevo muchas horas con ello, no consigo solucionarlo y estoy algo bloqueado.

No sabía si postear el hilo en el foro de Mysql o en el de PHP, pero creo que el error es de la consulta y por ello lo publico aquí.

Tengo la siguiente tabla llamada extension
Cita:
id / ext / definicion / software / caracteristicas / historia
1 / mp3 / blabla... / blabla... / blabla..... / blabla..
Lo que intento realizar es que muestre el contenido del campo definición de la fila que la extensión = "$extension" ( Esta variable me viene desde un formulario, en este ejemplo...mp3)

Código PHP:
Ver original
  1. <html>
  2.     <head>
  3.         <meta charset="UTF-8">
  4.         <?php
  5.         $extension = $_GET["extension"];
  6.         $extensionMAY = strtoupper($extension);
  7.         echo "<title>.$extensionMAY Información sobre la extension .$extensionMAY</title>";
  8.         ?>
  9.     </head>
  10.     <body>
  11.     <?php
  12.       if (!empty($_GET["extension"])) {
  13.     echo "<h1>Información sobre la extensión .$extensionMAY</h1><br />";
  14.     echo "<h2>¿ Que es un archivo .$extensionMAY ?</h2><br />";
  15.     // realizamos consulta
  16.     $consulta = mysqli_query($conexion, "SELECT definicion FROM extension WHERE ext='$extension'");
  17.       if($consulta == FALSE) {
  18.                   echo "Error en la consulta SQL";
  19.                   exit(); }
  20.    
  21.    //mostramos los datos
  22.         while ($fila = mysqli_fetch_row($consulta)) {
  23.         foreach($fila as $datoFila) {
  24.             echo $datoFila; }
  25.         }
  26.  
  27.   // finalizamos
  28.         mysqli_free_result($consulta);
  29.         mysqli_close($conexion);
  30.              
  31.         } else {
  32.         ?>
  33.         <form action="busqueda.php" target="_top" method="GET"/>archivo.
  34.         <input type="text" name="extension" size="5" value=""/><input type="submit" value="Buscar" /><br/>
  35.         </form>
  36.         <?php
  37.         echo "No ha buscado nada, escriba la extension"; }
  38. ?>
  39.  
  40.     </body>
  41. </html>

Los errores al ejecutarlo son los siguientes:

Notice: Undefined variable: conexion in C:\wamp\www\infoextensiones\busqueda.php on line 21
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\wamp\www\infoextensiones\busqueda.php on line 21

Y recalco la línea 21:

Código MySQL:
Ver original
  1. $consulta = mysqli_query($conexion, "SELECT definicion FROM extension WHERE ext='$extension'");
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #2 (permalink)  
Antiguo 14/02/2014, 16:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema al realizar consulta mysql

Cita:
Notice: Undefined variable: conexion in C:\wamp\www\infoextensiones\busqueda.php on line 21
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\wamp\www\infoextensiones\busqueda.php on line 21
Eso es un error de PHP, no de MySQL. Está diciendo que la variable $conexion no existe en el punto de ejecución.
Por su lado, la query está perfectamente escrita, en consecuencia si hay un problema, no está allí.

OFF-TOPIC.

Movido a PHP.

Lo que yo no veo es dónde se crea esa variable $conexion, pero obviamente no se ha creado al momento de ejecutar la consulta...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 14/02/2014, 18:13
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: problema al realizar consulta mysql

Si.. es lo que tiene no meter include 'funciones.php';

Ahora el error es en funciones.php linea 8
Fatal error: Cannot redeclare conectar_a_bd() (previously declared in C:\wamp\www\infoextensiones\funciones.php:2) in C:\wamp\www\infoextensiones\funciones.php on line 8

Código PHP:
Ver original
  1. <?php
  2. function conectar_a_bd() {
  3. $conexion = mysqli_connect('localhost','root','','extensiones');
  4. if ($conexion == FALSE) {
  5.     echo "Error en la conexion a la BD: " . mysqli_error($conexion);
  6.     exit();
  7.     } else { return $conexion; }
  8. }
  9. ?>
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #4 (permalink)  
Antiguo 14/02/2014, 19:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: problema al realizar consulta mysql

Básicamente eso sucede en situaciones como:

- Tienes la misma función declarada en dos scripts distintos.
- Tienes la misma función definida en dos partes del mismo script.
- El script en el que está la definición está siendo incluido dos veces en diferentes momentos de la ejecución, y por tanto se toma como redefinición.

Yo me inclino por esta última posibilidad. Es bastante habitual que accidentalmente se invoque en forma transitiva un mismo script sin verlo a simple vista.

Es un poco más complicado de encontrar porque deberás seguir la lógica de ejecución paso a paso para encontrar donde se produce el doble include.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 14/02/2014, 19:35
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

pega funciones.php aquí
  #6 (permalink)  
Antiguo 14/02/2014, 19:42
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: problema al realizar consulta mysql

Tenía 2 includes 'funciones'; y ha desaparecido el error, pero me aparecen otros:

Notice: Undefined variable: conexion in C:\wamp\www\infoextensiones\busqueda.php on line 23
Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\wamp\www\infoextensiones\busqueda.php on line 23

Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <!--
  3. Página de búsqueda, donde una vez pongan la extensión aparecerá toda
  4. la información.
  5. -->
  6. <html>
  7.     <head>
  8.         <meta charset="UTF-8">
  9.         <?php
  10.         include 'funciones.php';
  11.         $extension = $_GET["extension"];
  12.         $extensionMAY = strtoupper($extension);
  13.         echo "<title>.$extensionMAY Información sobre la extension .$extensionMAY</title>";
  14.         ?>
  15.     </head>
  16.     <body>
  17.     <?php
  18.     conectar_a_bd();
  19.       if (!empty($_GET["extension"])) {
  20.     echo "<h1>Información sobre la extensión .$extensionMAY</h1><br />";
  21.     echo "<h2>¿ Que es un archivo .$extensionMAY ?</h2><br />";
  22.     // realizamos consulta
  23.     $consulta = mysqli_query($conexion, "SELECT definicion FROM extension WHERE ext='$extension'");
  24.       if($consulta == FALSE) {
  25.                   echo "Error en la consulta SQL";
  26.                   exit(); }
  27.    
  28.    //mostramos los datos
  29.         while ($fila = mysqli_fetch_row($consulta)) {
  30.         foreach($fila as $datoFila) {
  31.             echo $datoFila; }
  32.         }
  33.  
  34.   // finalizamos
  35.         mysqli_free_result($consulta);
  36.         mysqli_close($conexion);
  37.              
  38.         } else {
  39.         ?>
  40.         <form action="busqueda.php" target="_top" method="GET"/>archivo.
  41.         <input type="text" name="extension" size="5" value=""/><input type="submit" value="Buscar" /><br/>
  42.         </form>
  43.         <?php
  44.         echo "No ha buscado nada, escriba la extension"; }
  45. ?>
  46.  
  47.     </body>
  48. </html>

No entiendo si supuestamente la consulta mysql esta bien construida :S
__________________
No te olvides de dar +1 a quien te echa un cable ;)

Última edición por rodrypaladin; 14/02/2014 a las 19:56
  #7 (permalink)  
Antiguo 14/02/2014, 19:50
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

pega el contenido de funciones.php aquí, que lo depuramos
  #8 (permalink)  
Antiguo 14/02/2014, 19:57
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: problema al realizar consulta mysql

Funciones.php

Código PHP:
Ver original
  1. function conectar_a_bd() {
  2. $conexion = mysqli_connect('localhost','root','','extensiones');
  3. if ($conexion == FALSE) {
  4.     echo "Error en la conexion a la BD: " . mysqli_error($conexion);
  5.     exit();
  6.     } else { return $conexion; }
  7. }
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #9 (permalink)  
Antiguo 14/02/2014, 20:05
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <!--
  3. Página de búsqueda, donde una vez pongan la extensión aparecerá toda
  4. la información.
  5. -->
  6. <html>
  7.     <head>
  8.         <meta charset="UTF-8">
  9.         <?php
  10.         include 'funciones.php';
  11.         $extension = $_GET["extension"];
  12.         $extensionMAY = strtoupper($extension);
  13.         echo "<title>.$extensionMAY Información sobre la extension .$extensionMAY</title>";
  14.         ?>
  15.     </head>
  16.     <body>
  17.     <?php
  18.     conectar_a_bd();
  19.       if (!empty($_GET["extension"])) {
  20.     echo "<h1>Información sobre la extensión .$extensionMAY</h1><br />";
  21.     echo "<h2>¿ Que es un archivo .$extensionMAY ?</h2><br />";
  22.     // realizamos consulta
  23.     $consulta = mysqli_query($conexion, "SELECT definicion FROM extension WHERE ext='$extension'");

Código PHP:
Ver original
  1. $conexion = conectar_a_bd();
  #10 (permalink)  
Antiguo 14/02/2014, 20:18
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: problema al realizar consulta mysql

Mil gracias lolainas
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #11 (permalink)  
Antiguo 14/02/2014, 21:54
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

Comprueba esta solución y dime si no es más difícil cometer errores.

extension.php (encapsulamiento de la extensión, __get proporciona acceso a los campos)
Código PHP:
class Extension {
    private 
$db;
    private 
$nombre;

    function 
__construct(mysqli $db$nombre) {
        
$this->db $db;
        
$this->nombre $nombre;
    }

    function 
__get($field) {
        return 
$this->db->query("SELECT $field FROM extension WHERE nombre = '$this->nombre';")->fetch_assoc()[$field];
    }

index.php (controlador, el que manda)
Código PHP:
// config
$host 'localhost';
$user 'root';
$pwd null;
$db 'extensiones';

// comienzo
$extension filter_input(INPUT_GET'extension');

if (
$extension) {
    include 
'extension.php';
    
$ext = new Extension(new mysqli($host$user$pwd$db), $extension);
    include 
'plantilla.php';
}
else
    echo 
'Extensi&oacute;n no recibida.<pre>Ejemplo: index.php?extension=nombre</pre>'
plantilla.php (lo que viene siendo una plantilla)
Código PHP:
<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="latin1">
        <title>Extensi&oacute;n:&nbsp;<?= $ext->nombre ?></title>
    </head>
    <body>
        <h1>Extensi&oacute;n:&nbsp;<?= $ext->nombre ?>&nbsp;|&nbsp;Software:&nbsp;<?= $ext->software ?></h1>
        <ul>
            <li>
                <h2>Definici&oacute;n</h2>
                <p><?= $ext->definicion ?></p>
            </li>
            <li>
                <h2>Caracter&iacute;sticas</h2>
                <p><?= $ext->caracteristicas ?></p>
            </li>
            <li>
                <h2>Historia</h2>
                <p><?= $ext->historia ?></p>
            </li>
        </ul>
    </body>
</html>
Espero te sirva. Saludos.
  #12 (permalink)  
Antiguo 15/02/2014, 07:43
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: problema al realizar consulta mysql

Hola @lolainas, estoy completamente seguro que tu código está mejor y es más correcto, pero llevo poco tiempo con php y si me cuesta programar en una forma referencial imaginate ahora orientado a objetos, creo que es mejor ir usando códigos que pueda entender, ¿no?
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #13 (permalink)  
Antiguo 15/02/2014, 15:31
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

Lógicamente, debes entender lo que haces sino mal vamos.
En un post que acabo de intentar ayudar a un chico se me han tirado al cuello por escribir POO y no adaptarme a PHP4 en la construcción de arrays, cuando la última versión estable es la 5.4, creo que es la filosofía del foro, que no permite ir mas allá de la programación simple y lineal y todo lo que no sea así está mal o son malas prácticas. Son muchos los usuarios que siguen la estela de otros con más mensajes que se dedican a echar broncas como si de un aula de colegio se tratara.
Sólo te puedo aconsejar que no tengas miedo a la POO, tu satisfacción será más grande y tus códigos más legibles y más entendibles incluso para terceros. Adéntrate, te gustará te lo aseguro, claro que siempre poco a poco y paso a paso, sin prisa, pero sin pausa.

Última edición por lolainas; 15/02/2014 a las 15:39
  #14 (permalink)  
Antiguo 15/02/2014, 16:20
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: problema al realizar consulta mysql

Por supuesto que cuando cuando me sienta capaz, me metere en POO, pero prefiero controlar bien las cosas...

Ya tengo las consultas realizadas y mostradas correctamente pero mi código queda muy repetitivo y seguro que no es una buena práctica.

este es el código:
Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="UTF-8">
  5.         <?php
  6.         header("Content-Type: text/html;charset=utf-8");
  7.         include 'funciones.php';
  8.         $extension = $_GET["extension"];
  9.         $extensionMAY = strtoupper($extension);
  10.         echo "<title>.$extensionMAY Información sobre la extension .$extensionMAY</title>";
  11.         ?>
  12.     </head>
  13.     <body>
  14.     <?php
  15.     $conexion = conectar_a_bd();
  16.       if (!empty($_GET["extension"])) {
  17.     echo "<h1>Información sobre la extensión .$extensionMAY</h1><br />";
  18.     echo "<ul>";
  19.     echo    "<li>";
  20.     echo "<h2>¿ Que es un archivo .$extensionMAY ?</h2><br />";
  21.     // realizamos consulta
  22.     $consulta = mysqli_query($conexion, "SELECT definicion FROM extension WHERE ext='$extension'");
  23.       if($consulta == FALSE) {
  24.                   echo "Error en la consulta SQL";
  25.                   exit(); }
  26.    
  27.    //mostramos los datos
  28.         while ($fila = mysqli_fetch_row($consulta)) {
  29.         foreach($fila as $datoFila) {
  30.             echo $datoFila; }
  31.         }
  32.     echo    "<li>";
  33.     echo "<h2>Con que abrir los archivos .$extensionMAY ?</h2><br />";
  34.     // realizamos consulta
  35.     $consulta = mysqli_query($conexion, "SELECT definicion FROM extension WHERE ext='$extension'");
  36.       if($consulta == FALSE) {
  37.                   echo "Error en la consulta SQL";
  38.                   exit(); }
  39.    
  40.    //mostramos los datos
  41.         while ($fila = mysqli_fetch_row($consulta)) {
  42.         foreach($fila as $datoFila) {
  43.             echo $datoFila; }
  44.         }
  45.     echo    "<li>";
  46.     echo "<h2>Propiedades de .$extensionMAY ?</h2><br />";
  47.     // realizamos consulta
  48.     $consulta = mysqli_query($conexion, "SELECT definicion FROM extension WHERE ext='$extension'");
  49.       if($consulta == FALSE) {
  50.                   echo "Error en la consulta SQL";
  51.                   exit(); }
  52.    
  53.    //mostramos los datos
  54.         while ($fila = mysqli_fetch_row($consulta)) {
  55.         foreach($fila as $datoFila) {
  56.             echo $datoFila; }
  57.         }
  58.  
  59.     echo    "<li>";
  60.     echo "<h2>Historia de  .$extensionMAY ?</h2><br />";
  61.     // realizamos consulta
  62.     $consulta = mysqli_query($conexion, "SELECT historia FROM extension WHERE ext='$extension'");
  63.       if($consulta == FALSE) {
  64.                   echo "Error en la consulta SQL";
  65.                   exit(); }
  66.    
  67.    //mostramos los datos
  68.         while ($fila = mysqli_fetch_row($consulta)) {
  69.         foreach($fila as $datoFila) {
  70.             echo $datoFila; }
  71.         }
  72.    echo "</li>";
  73.    echo "</ul>";
  74.    
  75.        
  76.   // finalizamos
  77.         mysqli_free_result($consulta);
  78.         mysqli_close($conexion);
  79.              
  80.         } else {
  81.         ?>
  82.         <form action="busqueda.php" target="_top" method="GET"/>archivo.
  83.         <input type="text" name="extension" size="5" value=""/><input type="submit" value="Buscar" /><br/>
  84.         </form>
  85.         <?php
  86.         echo "No ha buscado nada, escriba la extension"; }
  87. ?>
  88.  
  89.     </body>
  90. </html>

Ahora lo que intengo es hacer las consultas llamando a la función, y he creado la siguiente función:

Código PHP:
Ver original
  1. function consulta_a_bd($campo) {
  2.         $conexion = connectar_a_bd();
  3.         $consulta = mysqli_query($conexion, "SELECT $camnpo FROM extension WHERE ext='$extension'");
  4.       if($consulta == FALSE) {
  5.                   echo "Error en la consulta SQL";
  6.                   exit(); }
  7.    
  8.    //mostramos los datos
  9.         while ($fila = mysqli_fetch_row($consulta)) {
  10.         foreach($fila as $datoFila) {
  11.             echo $datoFila; } }
  12.             return $consulta;
  13. }

Pero como sorpresa...NO funcionaa jajaja, mostrando los siguientes errores:
  • Notice: Undefined variable: camnpo in C:\wamp\www\infoextensiones\funciones.php on line 11
  • Notice: Undefined variable: extension in C:\wamp\www\infoextensiones\funciones.php on line 11
  • Warning: mysqli_query() expects parameter 1 to be mysqli, null given in C:\wamp\www\infoextensiones\funciones.php on line 11
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #15 (permalink)  
Antiguo 15/02/2014, 16:37
Avatar de arcanisgk122  
Fecha de Ingreso: junio-2010
Mensajes: 755
Antigüedad: 13 años, 10 meses
Puntos: 28
Respuesta: problema al realizar consulta mysql

esta es una muy mala practica:

Código PHP:
Ver original
  1. <meta charset="UTF-8">
  2.         <?php
  3.         header("Content-Type: text/html;charset=utf-8");
  4.         include 'funciones.php';
  5.         $extension = $_GET["extension"];
  6.         $extensionMAY = strtoupper($extension);
  7.         echo "<title>.$extensionMAY Información sobre la extension .$extensionMAY</title>";
  8.         ?>
  9.     </head>

te imagina que pasa si esto se lo pones a todos los archivos??? y que pasara con el consumo de tu ancho de banda???
__________________
Cooler Master Gladiator 600 - AMD PHENOM II X4 955 @ 3.5GHZ
GA-MA78GM-US2H - Super Talent 800 2GB x 2 Dual, (Unganged)
PSU Cooler Master eXtreme Power Plus 500W - Saphire R7-260OC-2GB
  #16 (permalink)  
Antiguo 15/02/2014, 16:57
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

Te adjunto un ejemplo procedural de tu problema (depuralo un poco porque al no tener tu misma base de datos creada y estar en otro ordenador no puedo comprobar resultados exactos)

funciones.php
Código PHP:
Ver original
  1. // obtiene conexion a bd
  2. function conexion() {
  3.     return mysqli_connect('localhost', 'root', null, 'base_de_datos');
  4. }
  5.  
  6. // seleccionar campo de la bd
  7. function seleccionar_campo(mysqli $db, $ext, $campo) {
  8.     return mysqli_query($db, "SELECT $campo FROM extension WHERE ext='$ext'")->fetch_assoc()[$campo];
  9. }
  10.  
  11. // obtiene un valor del array $_GET
  12. function get($var) {
  13.     return filter_input(INPUT_GET, $var);
  14. }

index.php
Código PHP:
Ver original
  1. include 'funciones.php';
  2.  
  3. $conexion = conexion();
  4. $extension = get('extension');
  5. ?>
  6. <html>
  7.     <head>
  8.         <meta charset="UTF-8">
  9.         <?php echo "<title>.$extension Información sobre la extension .$extension</title>"; ?>
  10.     </head>
  11.     <body>
  12.         <?php
  13.         if ($ext = strtoupper($extension)) {
  14.             $descripcion = seleccionar_campo($conexion, $ext, 'descripcion');
  15.             echo "<h1>Información sobre la extensión .$ext</h1><br />";
  16.             echo "<h2>¿ Que es un archivo .$ext ?</h2><br />";
  17.             echo $descripcion;
  18.         }
  19.         else {
  20.             ?>
  21.             <form action = "busqueda.php" target = "_top" method = "GET">archivo.
  22.                 <input type = "text" name = "extension" size = "5" value = "" />
  23.                 <input type = "submit" value = "Buscar" /><br/>
  24.             </form>
  25.             <?php
  26.             echo "No ha buscado nada, escriba la extension";
  27.         }
  28.         ?>
  29.     </body>
  30. </html>

Respeto bastante tu diseño inicial pero trabajando con funciones para reducir código repetitivo.
  #17 (permalink)  
Antiguo 15/02/2014, 17:04
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

He respetado tu diseño inicial para que notes la diferencia, así que ahora que todo se ve un poco más claro y más limpio, puedes implementar algo para comprobar antes de mostrar nada, que realmente la extensión existe en la base de datos, para en tal caso, informar al usuario que está consultando una extensión aún no definida.
Código PHP:
Ver original
  1. <?php echo "<title>.$extension Información sobre la extension .$extension</title>"; ?>
Ten cuenta que ese código se ejecutará siempre, haya buscado o no el usuario. Lo sabes desde el momento que ese código no está dentro de la condición del IF.
  #18 (permalink)  
Antiguo 15/02/2014, 17:25
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: problema al realizar consulta mysql

Entiendo que has metido la consulta en el archivo funciones.php y que la ejecutas con $descripcion = seleccionar_campo($conexion, $ext, 'descripcion'); , pero por que no la imprime si los parametros que habias puesto son los correctos ?. Da el eror: Notice: Undefined variable: extension in C:\wamp\www\infoextensiones\busqueda.php on line 6 y muestra el formulario de nuevo como si no se hubiera buscado nada
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #19 (permalink)  
Antiguo 15/02/2014, 17:37
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

Pues no se qué hay en búsqueda.php
  #20 (permalink)  
Antiguo 15/02/2014, 18:01
Avatar de rodrypaladin
Moderador
 
Fecha de Ingreso: abril-2010
Ubicación: Madrid
Mensajes: 2.127
Antigüedad: 14 años
Puntos: 468
Respuesta: problema al realizar consulta mysql

busqueda es lo que en tu ejemplo es el index.php, pero mi index.php es solo el formulario que tiene el action="busqueda.php" y ahí el código que me has puesto
__________________
No te olvides de dar +1 a quien te echa un cable ;)
  #21 (permalink)  
Antiguo 16/02/2014, 05:21
lolainas
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: problema al realizar consulta mysql

Vamos paso a paso:

funciones.php
Código PHP:
Ver original
  1. // obtiene un valor del array $_GET
  2. function get($var) {
  3.     return filter_input(INPUT_GET, $var);
  4. }
  5.  
  6. // obtiene conexion a bd
  7. function conexion() {
  8.     return mysqli_connect('localhost', 'root', null, 'extensiones');
  9. }
  10.  
  11. // obtiene campo de la bd
  12. function obtener_campo(mysqli $db, $ext, $campo) {
  13.     return mysqli_query($db, "SELECT $campo FROM extension WHERE ext='$ext'")->fetch_assoc()[$campo];
  14. }
Todo correcto, seguimos con extension.php, que hará de plantilla para mostrar única y exclusivamente información de una sola extensión
Código PHP:
Ver original
  1. <html>
  2.     <head>
  3.         <meta charset="utf-8">
  4.         <title>Extensi&oacute;n '.<?= $extension ?>'</title>
  5.     </head>
  6.     <body>
  7.         <h1>Informaci&oacute;n sobre la extensi&oacute;n '.<?= $extension ?>'</h1>
  8.         <h2>&iquest;Qu&eacute; es un archivo '.<?= $extension ?>?'</h2>
  9.         <p><?= $descripcion ?></p>
  10.     </body>
  11. </html>
busqueda.php (sólo formulario)
Código PHP:
Ver original
  1. <p>No ha buscado nada</p>
  2. <form method="get" action="index.php">
  3.     <input type="text" name="extension" />
  4.     <button type="submit">Buscar</button>
  5. </form>
Y por último, el index.php de forma más expresiva
Código PHP:
Ver original
  1. include 'funciones.php';
  2.  
  3. // conexión a la base de datos
  4. $conexion = conexion();
  5.  
  6. // extensión desde $_GET
  7. $extension = get('extension');
  8.  
  9. // si existe la extensión se muestra la extensión
  10. if ($extension !== null) {
  11.  
  12.     // podrías obtener más campos, por ejemplo:
  13.     // $nombre_campo = obtener_campo($conexion, $extension, 'nombre_campo');
  14.     $descripcion = obtener_campo($conexion, $extension, 'definicion');
  15.  
  16.     // al incluír el fichero 'extension.php' usará todas las variables
  17.     // previamente definidas, en este caso sólo $descripcion,
  18.     // ya que es la única que se ha definido
  19.     include 'extension.php';
  20.  
  21. }
  22. // si no existe la extension se muestra el formulario de búsqueda
  23. else {
  24.  
  25.     include 'busqueda.php';
  26.  
  27. }
Espero así lo entiendas mejor :).

Etiquetas: campo, mysql, null, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:06.