hola,tengo el siguiente codigo para hacer una web modular
<?
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!
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() (http://www.php-es.com/function.mysql-error.html), para que sepas donde se encuentra el error.
jojojo se me adelanto Yoya
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';
}
Invalid query:
eso es lo que pasa si uso tu codigo Shell Root
jojojojo cambia la siguiente linea,
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';
}
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?
<?
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
Obvio, tenes que realizar un WHERE (Condición) en la query, es decir,
SELECT * FROM categorias WHERE (ID = "$_GET['id']");
En php, sería algo así,
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
$sSeccion = $_GET['sección'];
if(!empty($sSeccion)){
# Acciones a realizar
}else{
# Acciones neutras
}
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
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
$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
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
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:
<?php
for($i=0;$i<=10;$i++){
$valor = $i;
}
echo $valor;
?>
Salida:
10
$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.
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
Ejemplo:
<?php
for($i=0;$i<=10;$i++){
$valor[] = $i;
}
foreach($valor as $result){
echo $result;
}
?>
Salida:
012345678910
Lee sobre Arrays en PHP, es mejor saber lo que haces para no liarte mas....