página dinamica atraves de una consulta mysql

Iniciado por viher, 20 Agosto 2010, 21:46 PM

0 Miembros y 2 Visitantes están viendo este tema.

viher

hola,tengo el siguiente codigo para hacer una web modular

Código (php) [Seleccionar]
<?
include ("config.php");
$id = $_GET['id'];
$sql = "select * from categorias";
$squery = mysql_query($sql);
while($row = mysql_fetch_array($squery)){
$categoria = $row['id']; }

switch ($_GET["sección"]){
case '$categoria';
    $incluir = '$categoria.php';
$descripcion = '$categoria';
    $titulo = '$categoria';
    break;
default:

    $incluir = 'categorias.php';
    $titulo = 'titulo';
$descripcion = 'descripcion';
}
?>


al principio del codigo lo que intento es que en categorias.php que hace una consulta saque la id y la ponga en el include,pero no me funciona,algo estoy haciendo mal pero no se el que,aver si me podeis ayudar,gracias.

me da este error y me sale la misma pagina siempre

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\Archivos de Programa\appserv\www\2\index.php on line 10

gracias y un saludo!

~ Yoya ~

El error debe estar en:

  • La conexión hacia la Base De Datos
  • La selección de la base de datos
  • La consulta SQL

Trata de usar la función mysql_error(), para que sepas donde se encuentra el error.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

Shell Root

#2
jojojo se me adelanto Yoya
Código (php) [Seleccionar]
 include('config.php');
 #$sID = $_GET['id']; # Esto para qué?
 $sSql = 'SELECT * FROM categorias';
 $sQuery = mysql_query($sSql);
 if(!$sQuery){
   die('Invalid query: ' . mysql_error());
 }

 while($sRow = mysql_fetch_array($sQuery)){
   $sCategoria = $sRow['id'];
 }

 switch ($_GET['sección']){
   case 1: # Verificar tú caso, creo que es mejor usar un IF
     $incluir = $sCategoria.'.php';
     $descripcion = $sCategoria;
     $titulo = $sCategoria;
     break;
   default:
     $incluir = 'categorias.php';
     $titulo = 'titulo';
     $descripcion = 'descripcion';
 }
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.


Shell Root

jojojojo cambia la siguiente linea,
Código (php,5) [Seleccionar]
  include('config.php');
  #$sID = $_GET['id']; # Esto para qué?
  $sSql = 'SELECT * FROM categorias';
  $sQuery = mysql_query($sSql);
  if(!$sQuery){
    die('Invalid query: ' . mysql_error());
  }

  while($sRow = mysql_fetch_array($sQuery)){
    $sCategoria = $sRow['id'];
  }

  switch ($_GET['sección']){
    case 1: # Verificar tú caso, creo que es mejor usar un IF
      $incluir = $sCategoria.'.php';
      $descripcion = $sCategoria;
      $titulo = $sCategoria;
      break;
    default:
      $incluir = 'categorias.php';
      $titulo = 'titulo';
      $descripcion = 'descripcion';
  }
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

viher

#5
tengo un problema,resulta que esto solo me funciona con el ultimo registro de la tabla,es decir si tengo 3 registros en la tabla y pincho en el tercero me habre bien la url,pero si pincho en el 1 o en el 2 se me queda en la misma página aunque la url cambie por index.php?sección=ID

porque pasa esto?

Código (php) [Seleccionar]
<?
include('config.php');
 $sSql = 'SELECT * FROM categorias';
 $sQuery = mysql_query($sSql);
if(!$sQuery){
   die('Invalid query: ' . mysql_error());
 }

 while($sRow = mysql_fetch_array($sQuery)){
   $sCategoria = $sRow['id'];
 }

 switch ($_GET['sección']){
   case $sCategoria; # Verificar tú caso, creo que es mejor usar un IF
     $incluir = $sCategoria.'.php';
     $descripcion = $sCategoria;
     $titulo = $sCategoria;
     break;
 
   default:
     $incluir = 'categorias.php';
     $titulo = 'titulo';
     $descripcion = 'descripcion';
 }
?>


gracias

Shell Root

#6
Obvio, tenes que realizar un WHERE (Condición) en la query, es decir,
Código (sql) [Seleccionar]
SELECT * FROM categorias WHERE (ID = "$_GET['id']");

En php, sería algo así,
Código (php,3) [Seleccionar]
 include('config.php');
 $sID = $_GET['id'];
 $sSql = 'SELECT * FROM categorias WHERE (ID ='.$sID.');';
 $sQuery = mysql_query($sSql);
if(!$sQuery){
   die('Invalid query: ' . mysql_error());
 }

 while($sRow = mysql_fetch_array($sQuery)){
   $sCategoria = $sRow['id'];
 }

 switch ($_GET['sección']){
   case $sCategoria: # Verificar tú caso, creo que es mejor usar un IF
     $incluir = $sCategoria.'.php';
     $descripcion = $sCategoria;
     $titulo = $sCategoria;
     break;
   default:
     $incluir = 'categorias.php';
     $titulo = 'titulo';
     $descripcion = 'descripcion';
 }


Sigo pensando en que, no deberías de emplear el SWITCH, sino un simple IF-ELSE

Código (php) [Seleccionar]
 $sSeccion = $_GET['sección'];
  if(!empty($sSeccion)){
   # Acciones a realizar
  }else{
   # Acciones neutras
  }
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

viher

#7
me da este error:

Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

y puse el codigo que me diste

Código (php) [Seleccionar]
 include('config.php');
 $sID = $_GET['id'];
$sSql = 'SELECT * FROM categorias WHERE (ID ='.$sID.');';
 $sQuery = mysql_query($sSql);
if(!$sQuery){
   die('Invalid query: ' . mysql_error());
 }

 while($sRow = mysql_fetch_array($sQuery)){
   $sCategoria = $sRow['id'];
 }

 switch ($_GET['sección']){
   case $sCategoria: # Verificar tú caso, creo que es mejor usar un IF
     $incluir = $sCategoria.'.php';
     $descripcion = $sCategoria;
     $titulo = $sCategoria;
     break;
   default:
     $incluir = 'categorias.php';
     $titulo = 'titulo';
     $descripcion = 'descripcion';
 }


y si uso un If como sería

Código (php) [Seleccionar]
$sSeccion = $_GET['sección'];
 if(!empty($sSeccion)){
     case $sCategoria: # Verificar tú caso, creo que es mejor usar un IF
     $incluir = $sCategoria.'.php';
     $descripcion = $sCategoria;
     $titulo = $sCategoria;
 }else{
   echo "nada";
 }


asi? gracias

~ Yoya ~

Bueno, ando en mi macbook y es un poco incomodo responder esto tipos de temas, prefiero hacerlo en Linux, ya que testeo directamente....


Citartengo un problema,resulta que esto solo me funciona con el ultimo registro de la tabla
Código (php) [Seleccionar]
  while($sRow = mysql_fetch_array($sQuery)){
    $sCategoria = $sRow['id'];
  }


Ese es tu problema, se ejecuta el primer ciclo del bucle while(), y a la variable $sCategoria se le da el valor del primer registro de la columna id de la tabla Categorias, luego entra el segundo ciclo y se le da el valor a la variable $sCategoria el valor del segundo registro del campo id, osea el valor anterior se cambia por este nuevo y al final la variable $sCategoria contendra un solo valor, que seria el ultimo registro.

Lo que puedes hacer es almacenar todos los valores en un Array, asi que cada registro sera parte del array.

Ejemplo de lo que haces, aver si entiendes:
Código (php) [Seleccionar]
<?php
for($i=0;$i<=10;$i++){
$valor $i;
}
echo 
$valor;
?>

Salida:
10

Código (php) [Seleccionar]

      $incluir = $sCategoria.'.php';

Esto me acordó a Null Byte Injection, es vulnerable a LFI, pero seria necesario ingresar el PATH del archivo a la columna ID xD.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

viher

y como podria solucionarlo Yoya? porque con los arrays no me entero muy bien,si puedes enseñarme un ejemplo o algo parecido que pueda adaptar a mi codigo... gracias por la ayuda