Ayuda impresion de datos por id php mysql

Iniciado por antonioska, 11 Marzo 2013, 11:19 AM

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

s7evin

#10
Buenas tardes

<?php  
include('conexion.php'); //suponiendo que la conexión este correctamente
$sql "SELECT * FROM grupos WHERE id=".((int)$id)." LIMIT 1"//suponiendo que $id es un valor entero
$query mysql_query($sql$link) or exit(mysql_error()); //el exit(mysql_error()) lo pongo para ver si es un error de la consulta, pero una vez estés seguro de que funciona correctamente, borralo, no es una buena práctica poner este tipo de código

if( !$query || mysql_num_rows($query) <= )
  exit(
'No se encontraron resultados');//también puedes redireccionar o lo que sea

$row mysql_fetch_assoc($query);

echo 
'<p align="center">'$row['imagen'].'</p> 
<table width="641" border="1" align="center" cellpadding="0" cellspacing="0"> 
  <tr> 
    <td width="179" bgcolor="#0066CC">Nombre del grupo</td> 
    <td width="456">'
$row['grupo'].'&nbsp;</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Genero</td> 
    <td>'
.$row['genero'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Influencias</td> 
    <td>'
$row['influencia'].'</td> 
  </tr> 
  <tr> 
    <td valign="top" bgcolor="#0066CC"><div align="left">Historia</div> 
    <div align="center"></div></td> 
    <td height="200" valign="top">'
$row['historia'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Integrantes</td> 
    <td>'
.$row['integrantes'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Facebook</td> 
    <td>'
$row['facebook'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Twitter</td> 
    <td>'
.$row['twitter'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">URL</td> 
    <td>'
$row['url'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Contacto</td> 
    <td>'
$row['representante'] .' ('$row["email"].')</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Video</td> 
    <td height="300">'
$row['video1'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Sound Cloud</td> 
    <td height="300">'
$row['soundcloud1'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Descarga disco</td> 
    <td>'
$row['disco'].'</td> 
  </tr> 
</table> 
<p align="center">Visto '
$row['hits'].' veces</p>';

exit; 
// o no, si deseas incluir más información

?>


Debes escapar o validar los datos de entrada a tu aplicación SIEMPRE, comprobar que se trata del tipo de datos que estas esperando que vas a recibir, sino podrías encontrarte con "problemas".
Por otro lado como ya te han comentado, te recomiendo utilizar MySQLi, es igual o más sencillo de utilizar y muchísimo más intuitivo.

También es recomendable que en las consultas a la base de datos, selecciones aquellos campos que necesitas y no selecciones toda la tabla (*), así aligeras la consulta. Además si le asignas 'alias' a cada columna, podrías minimizar el código a 'picar' con un foreach, pero eso ya son elecciones de cada cual.

En cuanto al estilo, estaría bien que usaras 'clases' de CSS, así si debes modificar el estilo, tan solo tendrás que modificar la clase y no ir linea por linea modificando el estilo 'inline'. Imagino que es algo que ya tienes en cuenta y harás cuando el código este funcional.

No he probado el código ya que no dispongo de tu base de datos jeje espero que te sirva.
Cualquier otra duda ya sabes, aquí estamos.

Un saludo!

antonioska

Cita de: s7evin en 12 Marzo 2013, 15:58 PM
Buenas tardes

<?php  
include('conexion.php'); //suponiendo que la conexión este correctamente
$sql "SELECT * FROM grupos WHERE id=".((int)$id)." LIMIT 1"//suponiendo que $id es un valor entero
$query mysql_query($sql$link) or exit(mysql_error()); //el exit(mysql_error()) lo pongo para ver si es un error de la consulta, pero una vez estés seguro de que funciona correctamente, borralo, no es una buena práctica poner este tipo de código

if( !$query || mysql_num_rows($query) <= )
  exit(
'No se encontraron resultados');//también puedes redireccionar o lo que sea

$row mysql_fetch_assoc($query);

echo 
'<p align="center">'$row['imagen'].'</p> 
<table width="641" border="1" align="center" cellpadding="0" cellspacing="0"> 
  <tr> 
    <td width="179" bgcolor="#0066CC">Nombre del grupo</td> 
    <td width="456">'
$row['grupo'].'&nbsp;</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Genero</td> 
    <td>'
.$row['genero'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Influencias</td> 
    <td>'
$row['influencia'].'</td> 
  </tr> 
  <tr> 
    <td valign="top" bgcolor="#0066CC"><div align="left">Historia</div> 
    <div align="center"></div></td> 
    <td height="200" valign="top">'
$row['historia'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Integrantes</td> 
    <td>'
.$row['integrantes'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Facebook</td> 
    <td>'
$row['facebook'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Twitter</td> 
    <td>'
.$row['twitter'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">URL</td> 
    <td>'
$row['url'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Contacto</td> 
    <td>'
$row['representante'] .' ('$row["email"].')</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Video</td> 
    <td height="300">'
$row['video1'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Sound Cloud</td> 
    <td height="300">'
$row['soundcloud1'].'</td> 
  </tr> 
  <tr> 
    <td bgcolor="#0066CC">Descarga disco</td> 
    <td>'
$row['disco'].'</td> 
  </tr> 
</table> 
<p align="center">Visto '
$row['hits'].' veces</p>';

exit; 
// o no, si deseas incluir más información

?>


Debes escapar o validar los datos de entrada a tu aplicación SIEMPRE, comprobar que se trata del tipo de datos que estas esperando que vas a recibir, sino podrías encontrarte con "problemas".
Por otro lado como ya te han comentado, te recomiendo utilizar MySQLi, es igual o más sencillo de utilizar y muchísimo más intuitivo.

También es recomendable que en las consultas a la base de datos, selecciones aquellos campos que necesitas y no selecciones toda la tabla (*), así aligeras la consulta. Además si le asignas 'alias' a cada columna, podrías minimizar el código a 'picar' con un foreach, pero eso ya son elecciones de cada cual.

En cuanto al estilo, estaría bien que usaras 'clases' de CSS, así si debes modificar el estilo, tan solo tendrás que modificar la clase y no ir linea por linea modificando el estilo 'inline'. Imagino que es algo que ya tienes en cuenta y harás cuando el código este funcional.

No he probado el código ya que no dispongo de tu base de datos jeje espero que te sirva.
Cualquier otra duda ya sabes, aquí estamos.

Un saludo!

Buen dia,

Primero que nada excelente tu forma de explicar ;-)

Y sobre mysql, soy sincero soy nuevo en esto de las bases de datos, la verdad no lo se utilizar muy bien

Por otra parte, exactamente al lograr que funcione, ya cambiare el diseño y añadire su respectivo style css para que sea mas rapida su edicion.

y por ultimo con respecto al codigo que me dejaste me arroja lo siguiente:
No se encontraron resultados

Pero en la base de datos ya tengo generados 2 id, que seria 1 y 2

te pongo la url: www.mundobajo.net/prueba/bandas/prueba1.php?id=1

mi base de datos es la siguiente no se si sea ahi el problema
CitarCREATE TABLE `grupos` (
  `id` bigint(7) NOT NULL auto_increment,
  `grupo` varchar(100) NOT NULL default '',
  `genero` varchar(100) NOT NULL default '',
  `representante` varchar(100) NOT NULL default '',
  `email` varchar(100) NOT NULL default '',
  `url` varchar(100) NOT NULL default '',
  `facebook` varchar(100) NOT NULL default '',
  `twitter` varchar(100) NOT NULL default '',
  `influencia` varchar(100) NOT NULL default '',
  `historia` longtext NOT NULL,
  `integrantes` longtext NOT NULL,
  `video1` longtext NOT NULL,
  `video2` longtext NOT NULL,
  `soundcloud1` longtext NOT NULL,
  `soundcloud2` longtext NOT NULL,
  `imagen` LONGBLOB NOT NULL,
  `mostrar` varchar(100) NOT NULL default '',
  `hits` tinyint(3) NOT NULL default '0',
  KEY `id` (`id`)
) TYPE=MyISAM 

Y mi archivo conexion.php es el siguiente
Citar<?php
$link=mysql_connect("localhost", "mi_usuario", "micontraseña");
mysql_select_db("mi_basededatos",$link) OR DIE ("Error: Imposible Conectar");
?>

Muchas gracias por tu gran ayuda


1mpuls0

#12
xD

Algo que te recomiendo muchisisisimo es que imprimas tu consulta y la ejecutes en tu SMBD directamente así podrás ver en donde está el error en tu consulta.

Intenta con get

Código (php-brief) [Seleccionar]

$id=$_GET["id"];
$sql = "SELECT * FROM grupos WHERE id=".((int)$id)." LIMIT 1";


Saludos
abc

antonioska

Cita de: Darhius en 13 Marzo 2013, 16:45 PM
xD

Algo que te recomiendo muchisisisimo es que imprimas tu consulta y la ejecutes en tu SMBD directamente así podrás ver en donde está el error en tu consulta. Este consejo lo he dado a muchos y muchos no lo siguen pero cuando ven que funciona les digo TE LO DIJE!.

Intenta con get

Código (php-brief) [Seleccionar]

$id=$_GET["id"];
$sql = "SELECT * FROM grupos WHERE id=".((int)$id)." LIMIT 1";


Saludos

Hola, muchas gracias por contestar.

Ya lo hice y me arroja el mismo error, NO SE ENCONTRARON DATOS  :(

1mpuls0

Cita de: antonioska en 14 Marzo 2013, 08:42 AM
Hola, muchas gracias por contestar.

Ya lo hice y me arroja el mismo error, NO SE ENCONTRARON DATOS  :(

Es por lo que te menciono por eso es importante que imprimas tu consulta xD

echo $sql;

Te debe mostrar un resultado como SELECT * FROM grupos WHERE id=0 LIMIT 1 y por eso el resultado es 0, entonces es porque no está recibiendo una variable.

En tu base de datos cambia el id 1 por el 0 y verás que te arroja ese resultado (antes de ejecutar prueba1.php verifica que si se haya modificado el id.

Saludos.
abc

1mpuls0

Coloca la siguiente validación antes de $sql, a ver que resultados te arroja.

Código (php-brief) [Seleccionar]

//... codigo

if(isset($id)){
if(empty($id)) { //con la función empty 0 se considera como vacio
echo "La variable $ id existe pero esta vacia<br>";
}else {
echo "La variable $ id existe y tiene un valor<br>";
}
}
else {
echo "La variable no existe<br>";
}

$sql = "SELECT ... etc
//mas codigo

abc

s7evin

#16
Si lo que estas haciendo es copiar el código que te estamos proporcionando y pergarlo en un script para su posterior 'ejecución', lo que te falta recoger el valor de 'id' de la url (GET):

<?php  
include('conexion.php');

$id = (int)$_GET['id'];

$sql "SELECT * FROM grupos WHERE id=".$id." LIMIT 1";
$query mysql_query($sql$link) or exit(mysql_error());

if( !
$query || mysql_num_rows($query) <= )
  exit(
'No se encontraron resultados');

$row mysql_fetch_assoc($query);

//... demás código ...


pensé que lo estabas recogiendo con anterioridad en alguna otra parte del script que no nos estabas mostrando...
prueba a ver si es eso :)

Saludos!

PD: si tampoco devuelve resultados ni tampoco errores de SQL, debe ser que esa tabla (`grupos`) está vacía...

antonioska

Cita de: Darhius en 14 Marzo 2013, 17:49 PM
Coloca la siguiente validación antes de $sql, a ver que resultados te arroja.

Código (php-brief) [Seleccionar]

//... codigo

if(isset($id)){
if(empty($id)) { //con la función empty 0 se considera como vacio
echo "La variable $ id existe pero esta vacia<br>";
}else {
echo "La variable $ id existe y tiene un valor<br>";
}
}
else {
echo "La variable no existe<br>";
}

$sql = "SELECT ... etc
//mas codigo



Hola, nuevamenet gracias por contestar, ya hice lo que me dijiste y me arroja lo siguiente: La variable no existe, tambien ya cambie en mi base de datos el id 1 por 0 http://mundobajo.net/prueba/bandas/prueba3.php




antonioska

Cita de: s7evin en 15 Marzo 2013, 13:34 PM
Si lo que estas haciendo es copiar el código que te estamos proporcionando y pergarlo en un script para su posterior 'ejecución', lo que te falta recoger el valor de 'id' de la url (GET):

<?php  
include('conexion.php');

$id = (int)$_GET['id'];

$sql "SELECT * FROM grupos WHERE id=".$id." LIMIT 1";
$query mysql_query($sql$link) or exit(mysql_error());

if( !
$query || mysql_num_rows($query) <= )
  exit(
'No se encontraron resultados');

$row mysql_fetch_assoc($query);

//... demás código ...


pensé que lo estabas recogiendo con anterioridad en alguna otra parte del script que no nos estabas mostrando...
prueba a ver si es eso :)

Saludos!

PD: si tampoco devuelve resultados ni tampoco errores de SQL, debe ser que esa tabla (`grupos`) está vacía...

muchas gracias por contestar como me lo has dicho a funcionado correctamente y ya me arroja resultados
http://mundobajo.net/prueba/bandas/prueba1.php?id=1

antonioska

#19
ya quedo lista la impresion de datos ahora el problema es que no logro que pueda subir la imagen a la base de datos, alguien sabra a que se deba el error?