Foros del Web » Programando para Internet » PHP »

Varios errores en una consulta MySQL con PHP

Estas en el tema de Varios errores en una consulta MySQL con PHP en el foro de PHP en Foros del Web. Hola, en mi pagina web tengo una sección con una lista de todos los minijuegos que tengo en ella. Dicha lista tiene varias cosas más, ...
  #1 (permalink)  
Antiguo 06/09/2010, 10:18
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Varios errores en una consulta MySQL con PHP

Hola,
en mi pagina web tengo una sección con una lista de todos los minijuegos que tengo en ella. Dicha lista tiene varias cosas más, como: el numero de veces que se ha jugado cada minijuego, la puntuación que les han dado los usuarios, si dispone de ranking y de guia, la categoria en la que se encuentra y su descripción.

Poco a poco he intentado ir mejorandola agregandole algunas nuevas funciones. La ultima funcion que he intentado agregar es para que la lista sea ordenada a elección de usuario, por ejemplo: si quieres que se ordene por el nombre del juego, por su puntuación...

El codigo que uso es el siguiente:
Código PHP:
<?php
 
//datos de la conexion a la base de datos
$con mysql_connect("******""*****""******");
mysql_select_db("******"$con);
@
mysql_query("SET NAMES 'latin1'");
 
//obtenemos valores que envió la funcion en
 //Javascript mediante el metodo GET
 
if(isset($_GET['campo']) and isset($_GET['orden'])){
  
$campo=$_GET['campo'];
  
$orden=$_GET['orden'];
 }else{
  
//por defecto
  
$campo='name';
  
$orden='ASC';
 }
 
//realizamos la consulta de los empleados,
 //ordenandolos segun campo y asc o desc
 //ej. SELECT * FROM empleado ORDER BY nombres ASC
   
global $dbi
 
$Consulta=mysql_query("SELECT * FROM ava_games ORDER BY $campo $orden",$con);

   echo 
"<table cellspacing='0' cellpading='0' border='1'>";
   echo 
"<tr class='encabezado'>";

 
//definimos dos arrays uno para los nombre de los campos de la tabla y
 //para los nombres que mostraremos en vez de los de la tabla -encabezados
 
$campos="names,hits,rating,highscore_image,guia,categoria";
 
$cabecera="Nombre,Jugadas,Puntuación,Ranking,Guia,Categoria";

 
//los separamos mediante coma
 
$cabecera=explode(",",$cabecera);
 
$campos=explode(",",$campos);

 
//numero de elementos en el primer array
 
$nroItemsArray=count($campos);

 
//iniciamos variable i=0
 
$i=0;
 
 
//mediante un bucle crearemos las columnas
 
while($i<=$nroItemsArray-1){
  
//comparamos: si la columna campo es igual al elemento 
  //actual del array 
  
if($campos[$i]==$campo){
   
//comparamos: si esta Descendente cambiamos a Ascendente
   //y viceversa
   
if($orden=="DESC"){
    
$orden="ASC";
    
$flecha="arrow_down.gif";
   }else{
    
$orden="DESC";
    
$flecha="arrow_up.gif";
   }
   
//si coinciden campo con el elemento del array
   //la cabecera tendrá un color distinto
   
echo "       <td class='encabezado_selec'><a onclick='OrdenarPor('".$campos[$i]."','".$orden."')'><img src='".$flecha."' />".$cabecera[$i]."</a></td>";
  }else{
   
//caso contrario la columna no tendra color
   
echo "       <td><a onclick='OrdenarPor('".$campos[$i]."','DESC')'>".$cabecera[$i]."</a></td>";
  }
  
$i++;
 }

  echo 
"</tr>";

 
//esta funcion permite comparar el campo actual y el nombre de 
 //la columna en la base de datos
 
function estiloCampo($_campo,$_columna){
  if(
$_campo==$_columna){
   return 
" class='filas_selec'";
  }else{
   return 
"";
  }
 }
 
//mostramos los resultados mediante la consulta de arriba
while ($row mysql_fetch_assoc($resEmp)) {
        if (
$row['highscores'] == 1) {
            
$game['highscore_image'] = "<center><img src='http://www.mjuegos.net/images/trophy_smaller.png'></center>";
        }
        else {
            
$game['highscore_image'] = " ";
        }

        if (
$row['rating'] == 0) {
            
$game['rating'] = "<center>Sin puntuar.</center>";
        }
        else if (
$row['rating'] == 1) {
            
$game['rating'] = "<center><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'></center>";
        }
        else if (
$row['rating'] == 2) {
            
$game['rating'] = "<center><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'></center>";
        }
        else if (
$row['rating'] == 3) {
            
$game['rating'] = "<center><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'></center>";
        }
        else if (
$row['rating'] == 4) {
            
$game['rating'] = "<center><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/empty_star.png'></center>";
        }
        else if (
$row['rating'] == 5) {
            
$game['rating'] = "<center><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'><img src='http://www.mjuegos.net/templates/red/images/star.png'></center>";
        }

        if (
$row['category_id'] == 103) {
            
$game['categoria'] = "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=103&sortby=newest&page=1'>Acci&oacute;n</a></center>";
        }
        else if (
$row['category_id'] == 2) {
            
$game['categoria'] = "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=2&sortby=newest&page=1'>Aventuras</a></center>";
        }
        else if (
$row['category_id'] == 102) {
            
$game['categoria'] = "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=102&sortby=newest&page=1'>De mesa</a></center>";
        }
        else if (
$row['category_id'] == 7) {
            
$game['categoria'] = "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=7&sortby=newest&page=1'>Estrategia</a></center>";
        }
        else if (
$row['category_id'] == 100) {
            
$game['categoria'] = "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=100&sortby=newest&page=1'>Habilidad</a></center>";
        }
        else if (
$row['category_id'] == 9) {
            
$game['categoria'] = "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=9&sortby=newest&page=1'>Para los m&aacute;s peques</a></center>";
        }

        if (
$row['advert_id'] == 7) {
            
$game['guia'] = "<center><img src='http://foro.mjuegos.net/Themes/default/images/post/pagina.gif'></center>";
        }
        else {
            
$game['guia'] = " ";
        }

  echo 
"<tr>";
  echo 
"        <td".estiloCampo($campo,'name').">".$row['name']."</td>";
  echo 
"        <td".estiloCampo($campo,'hits').">".$row['hits']."</td>";
  echo 
"        <td".estiloCampo($campo,'rating').">".$game['rating']."</td> n";
  echo 
"        <td".estiloCampo($campo,'highscore_image').">".$game['highscore_image']."</td>";
  echo 
"        <td".estiloCampo($campo,'guia').">".$game['guia']."</td>";
  echo 
"        <td".estiloCampo($campo,'categoria').">".$game['categoria']."</td>";
  echo 
"</tr>";
 }
?>
</table>


El cual me devuelve el siguiente error:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /homepages/8/d318990700/htdocs/mjuegos/lista_de_minijuegos/index.php on line 76


Gracias de antemano.
  #2 (permalink)  
Antiguo 06/09/2010, 10:22
 
Fecha de Ingreso: julio-2010
Ubicación: La Ciudad Blanca, Mérida-Yucatán
Mensajes: 375
Antigüedad: 13 años, 9 meses
Puntos: 7
Respuesta: Varios errores en una consulta MySQL con PHP

Código PHP:
Ver original
  1. while ($row = mysql_fetch_assoc($resEmp)) {


Donde declaras el $resEmp???.....
creo que ahi debería ir $Consulta
__________________
--No todos aprendemos de la misma forma, ni a la misma velocidad---
  #3 (permalink)  
Antiguo 06/09/2010, 10:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Varios errores en una consulta MySQL con PHP

Pues si, al parecer ese era el fallo.

Pero ahora se me presenta otro fallo: este codigo es para ordenar la lista a elección, pero no me deja ordenarla. Se supone que las cabeceras de cada columna deberia ser estilo link para poder darle clic y que se reordene la lista, pero me aparece normal...
  #4 (permalink)  
Antiguo 06/09/2010, 11:17
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Varios errores en una consulta MySQL con PHP

He editado un par de cosas y ha quedado asi:
http://www.mjuegos.net/lista_de_minijuegos/

Como podeis ver, las cabeceras son como links, pero al darles clic, no cambian el orden. Además tampoco se ven las flechitas que se deberian ver al lado de la que esta en orden.


Gracias de antemano.
  #5 (permalink)  
Antiguo 06/09/2010, 11:23
 
Fecha de Ingreso: febrero-2010
Mensajes: 818
Antigüedad: 14 años, 2 meses
Puntos: 55
Respuesta: Varios errores en una consulta MySQL con PHP

parece que los links estan mal escritos, en codigo de la pagina me aparece esto al tratar de ordenar por jugadas

<a )="" desc="" ,="" hits="" onclick="OrdenarPor(">Jugadas</a>

podrias en el link hacer que envie por get el tipo de orden que quieres y cuando recibas el tipo de orden haces la consulta nuevamente

Código PHP:
<a href="pagin.php?&orderby=jugadas"Jugadas </a>

//y en el codigo
if($_get['orderby']){
$sql consulta sql order by $_get['orderby'];

  #6 (permalink)  
Antiguo 06/09/2010, 11:37
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Varios errores en una consulta MySQL con PHP

¿Y que podria o deberia hacer?
  #7 (permalink)  
Antiguo 06/09/2010, 13:56
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: Varios errores en una consulta MySQL con PHP

Creo que el problema está acá:
Cita:
ORDER BY $campo $orden
Pero es difícil de ver cuando publicas tanto código y no especificás puntualemente qué linea es la 76 :o(
  #8 (permalink)  
Antiguo 06/09/2010, 14:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Varios errores en una consulta MySQL con PHP

Gracias de todas formas, pero el problema de la linea 76 ya lo tenia solucionado gracias a zapt142.

Ahora el problema que tengo es que cuando le doy clic a alguna de las cabeceras de la tabla, no se ordena según esa columna.
  #9 (permalink)  
Antiguo 06/09/2010, 16:40
Avatar de vertigo112  
Fecha de Ingreso: agosto-2006
Ubicación: Estado de Mexico
Mensajes: 25
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Varios errores en una consulta MySQL con PHP

2 OPCIONES PARA SOLUCIONARLO

Mírate esto es lo que arme:



!.- paso de parámetros por método GET dentro de la misma URL esto hará que se recargue la pagina y envié el campo a ordenar:

LA TABLA QUE TENGO PARA ESO ES ESTA:



organice de esta forma:
Para la opción 1 “paso de parámetros por el URL” quedo así -->
index.php, acciones.php, function.php, BD_SQL.php y la CSS estilos.css

CODIGO:

index.php

Código PHP:
<? require_once("acciones.php"); ?>
<? 
require_once("function.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ordenar por Columnas</title>
<link rel="stylesheet" type="text/css" href="estilos.css" />
</head>
<body>
 <h1 align="center">Ordenar registros de una tabla con Ajax y PHP </h1>
 <div id="listado">
     <table>
        <tr class='encabezado'><td><a href="index.php?orden=name">Nombre</a></td><td><a href="index.php?orden=hits">Jugadas</a></td><td><a href="index.php?orden=rating">Puntuacion</a></td><td><a href="index.php?orden=highscores">Ranking</a></td><td><a href="index.php?orden=advert_id">Guia</a></td><td><a href="index.php?orden=category_id">Categoria</a></td></tr>
        <?
        
for($i=0;$i<count($row);$i++)
        {
            echo 
"<tr><td>".$row[$i]['name']."</td><td>".$row[$i]['hits']."</td><td>".numEstrellas($row[$i]['rating'])."</td><td>".ranking($row[$i]['highscores'])."</td><td>".guia($row[$i]['advert_id'])."</td><td>".categoria($row[$i]['category_id'])."</td></tr>";
        }
        
?>
    </table>
 </div>
</body>
</html>

acciones.php

Código PHP:
<?
$baseDatos  
'pruebas';
$servidor   'localhost';
$usuario    'root';
$contrasena '1475369';
require_once(
'BD_SQL.php');
$conn = new BD_SQL;
$conn->conectar($baseDatos,$servidor,$usuario,$contrasena);
$conn->execute("SET NAMES 'latin1'");
if(isset(
$_REQUEST['orden']))
{
    
$sql "SELECT * FROM ava_games order by ".$_REQUEST['orden'];
}
else{
    
$sql "SELECT * FROM ava_games";
}
$conn->execute($sql);
$row $conn->getRows(); 
?>

function.php

Código PHP:
function numEstrellas($total)
{
    
$t $total;
    if(
$t==0){$s .= '<center>Sin puntuar.</center>';}
    else{    
        for(
$i=0;$i<5;$i++)
        {
            if(
$i $t){
                
$s .= "<img src='http://www.mjuegos.net/templates/red/images/star.png'>";
            }else{
                
$s .= "<img src='http://www.mjuegos.net/templates/red/images/empty_star.png'>";
            }
        }    
    }
    return 
$s;
}
//
function ranking($num)
{
    if (
$num){
        
$result "<center><img src='http://www.mjuegos.net/images/trophy_smaller.png'></center>";
    }
    else{
        
$result " ";
    }
    return 
$result;
}
//
function guia($num)
{
    if (
$num == 7) {
        
$result "<center><img src='http://foro.mjuegos.net/Themes/default/images/post/pagina.gif'></center>";
    }
    else {
        
$result " ";
    }    
    return 
$result;
}
//
function categoria($num)
{
        if (
$num == 103) {
            
$result "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=103&sortby=newest&page=1'>Acci&oacute;n</a></center>";
        }
        else if (
$num == 2) {
            
$result "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=2&sortby=newest&page=1'>Aventuras</a></center>";
        }
        else if (
$num == 102) {
            
$result "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=102&sortby=newest&page=1'>De mesa</a></center>";
        }
        else if (
$num == 7) {
            
$result "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=7&sortby=newest&page=1'>Estrategia</a></center>";
        }
        else if (
$num == 100) {
            
$result "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=100&sortby=newest&page=1'>Habilidad</a></center>";
        }
        else if (
$num == 9) {
            
$result "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=9&sortby=newest&page=1'>Para los m&aacute;s peques</a></center>";
        }
        
        return 
$result;


BD_SQL.php

Código PHP:
<?
class BD_SQL{
    
// variables de conexion
    
var $BaseDatos;
    var 
$Servidor;
    var 
$Usuario;
    var 
$Clave;    
    
// Identificador de conexion y Consultas
    
var $Conexion_ID 0;
    var 
$Consulta_ID 0;
    
// Numero y Texto de Error
    
var $Errno 0;
    var 
$Error "";
    
// Constructor de la clase
    
function BD_SQL($bd "",$host ""$user ""$pass ""){
    
$this->BaseDatos $bd;
    
$this->Servidor $host;
    
$this->Usuario $user;
    
$this->Clave $pass;
    }
    
// Conexion a la Base de Datos
    
function conectar($bd$host$user$pass){
      if(
$bd != "")   $this->BaseDatos $bd;
      if(
$host != ""$this->Servidor $host;
      if(
$user != ""$this->Usuario $user;
      if(
$pass != ""$this->Clave $pass;
      
// Enlace con el servidor
      
$this->Conexion_ID mysql_connect($this->Servidor,$this->Usuario,$this->Clave);
      if(!
$this->Conexion_ID){
         
$this->Error "Ha fallado la Conexion con el Servidor de Base de Datos";
         return 
0;
        }
      
// Seleccionamos la Base de Datos
      
if(!@mysql_select_db($this->BaseDatos$this->Conexion_ID)){
        
$this->Error "Imposible Abrir la Base de Datos : ".$this->BaseDatos;
        return 
0;
      } 
      
mysql_query("SET NAMES 'utf8'"); 
      
// si Todo fue un exito obtenemos el identificador de la conexion  de lo contrario devuelve 0
      
return $this->Conexion_ID;
    }    
    
//
    
function execute($sql ""){
    if(
$sql == ""){
      
$this->Error "No ha especificado una consulta SQL";
      return 
0;
      }
    
$this->Consulta_ID = @mysql_query($sql$this->Conexion_ID);
    
    if(!
$this->Consulta_ID){
      return 
$this->Error "Error al ejecutar la consulta";
      }
    return 
$this->Consulta_ID;  
    }
    
//
    
function getrows(){
         while(
$fila mysql_fetch_array($this->Consulta_ID))
              {
              
$registros[] = $fila;
              }
              return 
$registros;
    }  
// fin de la funcion

// fin de la clase 
?>

estilos.css

Código HTML:
@charset "utf-8";
/* CSS Document */
table{
	border: 1px solid #CCCCCC;
	margin: 0 auto;		
	background-color:#FFFFCC;
	font-family:Verdana, Arial, Helvetica, sans-serif;
	font-size:12px;
	color:#000066;
}
table a{
	text-decoration:none;
	cursor:pointer;
}
td { 
	padding-top:2px; 
	padding-bottom:2px;
	border-top: 1px solid #FFFF00; 
	border-right: 1px solid #FFFF00;
	padding-left:10px;
	padding-right:10px;
	color:#666666;
}
.encabezado{
	background-color:#FFCC00;
}
.encabezado_selec{
	background-color:#FF9900;
}


El mismo ejemplo pero usando AJAX con JQUERY te recomiendo este FrameWork ya que es muy sencillo de aplicar y usar

ahora fijate que son los mismo archivos solo con una ligeras modificaciones
en el index.php solo agregar las siguientes lineas dentro del <head></head>
Código HTML:
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="script.js"></script> 

para la libreria JQUERY descargala desde su web o desde este enlace [URL="http://www.macrowebdigital.com/forosdelweb/images/jquery.js"]JQUERY[/URL]

CODIGO:
script.js

Código HTML:
$(document).ready(function(){
	$('#listado a').click(function(e){
		e.preventDefault();
		orden = $(this).attr("href");
		filtro = obtenerParam('orden',orden);		
		pagina = 'ordenaTabla.php?orden='+filtro+'&rand='+Math.random()*999999999;
		$.ajax({
			url : pagina,
			success : function(data){
				$("#listado").html(data);
			}
		});
	});
});
//
function obtenerParam(name,pagina){
	var regexS = "[\\?&]"+name+"=([^&#]*)";	
	var regex = new RegExp(regexS);
	var tmpURL = pagina;
	var results = regex.exec(tmpURL);
	
	if(results == null)
		return "";
	else
		return results[1];
}


Y por último el archivo que aplica la acciones en la tabla de resultados:
ordenaTabla.php

Código PHP:
<? require_once("acciones.php"); ?>
<? 
require_once("function.php"); ?>
<script type="text/javascript" src="script.js"></script>
    <table>
        <tr class='encabezado'><td><a href="index.php?orden=name">Nombre</a></td><td><a href="index.php?orden=hits">Jugadas</a></td><td><a href="index.php?orden=rating">Puntuacion</a></td><td><a href="index.php?orden=highscores">Ranking</a></td><td><a href="index.php?orden=advert_id">Guia</a></td><td><a href="index.php?orden=category_id">Categoria</a></td></tr>
<?        
    
for($i=0;$i<count($row);$i++)
    {
        echo 
"<tr><td>".$row[$i]['name']."</td><td>".$row[$i]['hits']."</td><td>".numEstrellas($row[$i]['rating'])."</td><td>".ranking($row[$i]['highscores'])."</td><td>".guia($row[$i]['advert_id'])."</td><td>".categoria($row[$i]['category_id'])."</td></tr>";
    }
?>
</table>


aqui dejo los archivos para descargar:

ORDENACION POR PASO DE PARAMETROS POR EL URL [URL="http://www.macrowebdigital.com/forosdelweb/images/ordenacion01.zip"]DESCARGAR[/URL]

ORDENACION POR AJAX USANDO JQUERY [URL="http://www.macrowebdigital.com/forosdelweb/images/ordenacion02.zip"]DESCARGAR[/URL]

Última edición por GatorV; 07/09/2010 a las 13:42
  #10 (permalink)  
Antiguo 06/09/2010, 23:49
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 meses
Puntos: 13
Respuesta: Varios errores en una consulta MySQL con PHP

buen codigo vertigo112 pero solo sirve para aprender como base ...
debes aclarar eso

sigues usando $_REQUEST, los archivos php se pueden cargar independientemente en la urls del navegador, los datos son no filtrados, tu codigo es injetable mysql y xss
ademas estas permitiendo la incrucion de archivo remoto...
debes emplear mysql_real_escape_string en tus consultas ademas aplicar htmlentities, addcslashes, etc etc ...

y por ultimo para este tipo archivos yo emplearia al principio

count( get_included_files() ).....


pero como dije ta bueno para mejorarlo...

saludos

Última edición por zerpico_01; 06/09/2010 a las 23:57
  #11 (permalink)  
Antiguo 07/09/2010, 03:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Varios errores en una consulta MySQL con PHP

Muchisimas gracias vertigo112, me funciona muy bien. Pero tiene un par de cosillas...

Por ejemplo, no se por que, cuando ordeno por la categoria, la de Habilidad y De mesa aparecen antes que Accion. Y solo ordena en ASC, si le vuelvo a dar clic no me lo ordena en DESC. ¿Como podria arreglar esas cosillas?
  #12 (permalink)  
Antiguo 07/09/2010, 10:44
Avatar de vertigo112  
Fecha de Ingreso: agosto-2006
Ubicación: Estado de Mexico
Mensajes: 25
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Varios errores en una consulta MySQL con PHP

Gracias amigo zerpico_01 por los comentarios, lo tomare en cuenta, también tienes razón debo aclarar eso
Cita:
Pero solo sirve para aprender como base ...
pero igual te comento que esta no es la forma en la que acostumbro a programar de hecho no programo así la razón es porque no quiero confundir al amigo elsaylala lo único que trato es de intentar hacer el código similar a como lo tiene solo darle el primer paso a que se adentre a las Clases por completo a la MVC que eso sería la forma más correcta de programar según mi punto de vista, igual las Consultas a la BD y así como las ruta a las imágenes no son correctas lo sé pero todo es con el fin de No confundirlo, pero para los demás lo que dice zerpico_01 es muy cierto y hay que considerarlo.

Ahora a lo consiguiente:
Vamos solucionando la Primera “si le vuelvo a dar clic no me lo ordena en DESC” vamos con esta primero ya que es más fácil de explicar.

Lo único que voy a hacer es un SWITCH (1,0) como si de apagar la luz se tratara lo que tengo que enviar por URL es un valor más por parámetro por ejemplo tipo=1 y así condiciono cuando sea 1 ordeno de una forma y cuando sea diferente de 1 ósea 2 ordeno de otra forma y así defino una variable para irle pasando el valor según corresponda mírate aquí:

el siguiente codigo ira en el acciones.php

Código PHP:
if(isset($_REQUEST['tipo']))
  {  
    if(
$_REQUEST['tipo']==1)
    {
        
$tipo_orden 'ASC';
        
$orden 2;
    }
    else
    {
        
$tipo_orden 'DESC';
        
$orden 1;
    }
  }
else
  {
      
$orden 1;
  } 


Ahora hay que modificar la consulta quedando de esta forma:

tambien tiene que ir en el acciones.php

Código PHP:
if(isset($_REQUEST['ordena_por']))
{
    
$sql "SELECT * FROM ava_games order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
}
else{
    
$sql "SELECT * FROM ava_games";



Eso quedaria en el acciones.php así:

Código PHP:
<?
$baseDatos  
'pruebas';
$servidor   'localhost';
$usuario    'root';
$contrasena '1475369';
require_once(
'BD_SQL.php');
$conn = new BD_SQL;
$conn->conectar($baseDatos,$servidor,$usuario,$contrasena);
$conn->execute("SET NAMES 'latin1'");

if(isset(
$_REQUEST['tipo'])){  
    if(
$_REQUEST['tipo']==1){
        
$tipo_orden 'ASC';
        
$orden 2;
    }else{
        
$tipo_orden 'DESC';
        
$orden 1;}
  }
else{
      
$orden 1;
  }  

if(isset(
$_REQUEST['ordena_por'])){
    
$sql "SELECT * FROM ava_games order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
}else{
    
$sql "SELECT * FROM ava_games";
}
$conn->execute($sql);
$row $conn->getRows(); 
?>


Ahora hay que hacer una ligera modificación al index.php en los link enviarlos con 2 parámetros así:
Código PHP:
<a href="index.php?ordena_por=name&tipo=<?=$orden?>">Nombre</a>


el archivo index.php quedaria asi:

Código PHP:
<? require_once("acciones.php"); ?>
<? 
require_once("function.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ordenar por Columnas</title>
<link rel="stylesheet" type="text/css" href="estilos.css" />
</head>
<body>
 <h1 align="center">Ordenar registros de una tabla con Ajax y PHP </h1>
 <div id="listado">
     <table>
        <tr class='encabezado'><td><a href="index.php?ordena_por=name&tipo=<?=$orden?>">Nombre</a></td><td><a href="index.php?ordena_por=hits&tipo=<?=$orden?>">Jugadas</a></td><td><a href="index.php?ordena_por=rating&tipo=<?=$orden?>">Puntuacion</a></td><td><a href="index.php?ordena_por=highscores&tipo=<?=$orden?>">Ranking</a></td><td><a href="index.php?ordena_por=advert_id&tipo=<?=$orden?>">Guia</a></td><td><a href="index.php?ordena_por=category_id&tipo=<?=$orden?>">Categoria</a></td></tr>
        <?
        
for($i=0;$i<count($row);$i++)
        {
            echo 
"<tr><td>".$row[$i]['name']."</td><td>".$row[$i]['hits']."</td><td>".numEstrellas($row[$i]['rating'])."</td><td>".ranking($row[$i]['highscores'])."</td><td>".guia($row[$i]['advert_id'])."</td><td>".categoria($row[$i]['category_id'])."</td></tr>";
        }
        
?>
    </table>
 </div>
</body>
</html>


SOLUCIONADA LA OPCION UNO

Ahora bien vamos con la Solución 2cuando ordeno por la categoría, la de Habilidad y De mesa aparecen antes que Acción” ¿porque?:
Es que hay veo algunas cuestiones más lo que según veía en tu código lo que estabas asiendo para el campo de categoría es esto:
Código PHP:
        if ($row['category_id'] == 103) {
            
$game['categoria'] = "<center><a style='text-decoration:none; color:grey' href='http://www.mjuegos.net/index.php?task=category&id=103&sortby=newest&page=1'>Acci&oacute;n</a></center>";
        }.......... 

Donde Yo lo reduje a llamarlo mediante una función creada en el function.php “categoría($num)”, ahora que pasa aquí, pues que lo estas manejando como un campo numérico ósea al momento de ordenarlo lo que se está ordenando es el valor “category_id” que es un Numero mas no un Texto:

Por ejemplo ahí defines que el valor de Acción es 103 , el valor de Aventuras es 2 y así sucesivamente, pues eso realmente no podría ordenarse por Texto ya que no toma el valor del texto si no el valor del campo: “SELECT * FROM ava_games order by NOMBRE_CAMPO desc”;

Bien hay soluciones a esto varias,

La más optima y recomendable seria que Exista la tabla Categorías como esta podría ser:



Ya mediante esta tabla se genera un JOIN con la tabla



Hacer una consulta entre las dos como esto:

Código HTML:
SELECT ag.id, ag.name, ag.hits, ag.rating, ag.highscores, ag.advert_id, c.nombre category_id FROM ava_games ag, categorias c WHERE ag.category_id = c.category_id


daria esto:




Ahora bien si se hace lo Anterior estaría solucionado el problema de ordenar por Categoría, ahora voy a darte esta solución sin modificar nada de lo anterior en el código y solo generando esta nueva Tabla para que funcione correctamente Solo ten en cuenta que una vez lo entiendas no es necesario obtener un campo de mas en la consulta que voy a realizar es solo para que Funcione y sin afectar mucho el código ya Actualizado:

Bien lo primero es el acciones.php quedaría así:

Una vez teniendo la tabla categorias modifico la consulta y creo el JOIN entre ellas.

Código PHP:
<?
$baseDatos  
'pruebas';
$servidor   'localhost';
$usuario    'root';
$contrasena '1475369';
require_once(
'BD_SQL.php');
$conn = new BD_SQL;
$conn->conectar($baseDatos,$servidor,$usuario,$contrasena);
$conn->execute("SET NAMES 'latin1'");
if(isset(
$_REQUEST['tipo']))  {  
    if(
$_REQUEST['tipo']==1)    {
        
$tipo_orden 'ASC';
        
$orden 2;
    }else{
        
$tipo_orden 'DESC';
        
$orden 1;
    }
  }
else{
      
$orden 1;
  }
if(isset(
$_REQUEST['ordena_por'])){
    
//$sql = "SELECT * FROM ava_games order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
    
$sql "select ag.id, ag.name, ag.hits, ag.rating, ag.highscores, c.nombre category_id , c.category_id category_id_id, ag.advert_id from ava_games ag, categorias c where ag.category_id = c.category_id order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
}else{
    
$sql "SELECT * FROM ava_games";
}
$conn->execute($sql);
$row $conn->getRows(); 
?>


ahora un ligero cambio al index.php en ya que ahora tenemos un campo nombre obtenido de la tabla categorias:

Código PHP:
categoria($row[$i]['category_id_id']) 


quedando de esta forma el index.php


Código PHP:
<? require_once("acciones.php"); ?>
<? 
require_once("function.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ordenar por Columnas</title>
<link rel="stylesheet" type="text/css" href="estilos.css" />
</head>
<body>
 <h1 align="center">Ordenar registros de una tabla con Ajax y PHP </h1>
 <div id="listado">
     <table>
        <tr class='encabezado'><td><a href="index.php?ordena_por=name&tipo=<?=$orden?>">Nombre</a></td><td><a href="index.php?ordena_por=hits&tipo=<?=$orden?>">Jugadas</a></td><td><a href="index.php?ordena_por=rating&tipo=<?=$orden?>">Puntuacion</a></td><td><a href="index.php?ordena_por=highscores&tipo=<?=$orden?>">Ranking</a></td><td><a href="index.php?ordena_por=advert_id&tipo=<?=$orden?>">Guia</a></td><td><a href="index.php?ordena_por=category_id&tipo=<?=$orden?>">Categoria</a></td></tr>
        <?
        
for($i=0;$i<count($row);$i++)
        {
            echo 
"<tr><td>".$row[$i]['name']."</td><td>".$row[$i]['hits']."</td><td>".numEstrellas($row[$i]['rating'])."</td><td>".ranking($row[$i]['highscores'])."</td><td>".guia($row[$i]['advert_id'])."</td><td>".categoria($row[$i]['category_id_id'])."</td></tr>";
        }
        
?>
    </table>
 </div>
</body>
</html>


FIN ahora ya funciona tot el codigo lo he metido ahi ya que no me da oportunidad este foro de colocar una liga a los archivos a descargar pero garantizo que todo funciona correctamente ya que primero lo hago local y si valido que funcione y lo coloco ahi.......
Espero esto te ayude un poco amigo elsaylala

Última edición por GatorV; 07/09/2010 a las 13:44
  #13 (permalink)  
Antiguo 07/09/2010, 14:35
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Varios errores en una consulta MySQL con PHP

Pues muchas gracias, me ha funcionado todo hasta que he editado el archivo acciones.php por segunda vez, para lo del orden de las categorias. Lo otro me funciona perfectamente.

Ahora el error que me da es:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homepages/8/d318990700/htdocs/mjuegos/lista_de_minijuegos/BD_SQL.php on line 57


Gracias por todo, me estás ayudando muchisimo. Esto, más que para mi web y mis usuarios, me está ayudando a mi muchisimo para aprender y comprender mejor el php con mysql.
  #14 (permalink)  
Antiguo 07/09/2010, 15:34
 
Fecha de Ingreso: enero-2009
Mensajes: 455
Antigüedad: 15 años, 3 meses
Puntos: 11
Respuesta: Varios errores en una consulta MySQL con PHP

no estan reinventando la rueda? existen frameworks de ajax llamados grids que se pueden llenar, una vez llenados los grids (tablas) con un solo clic los ordena como quieran, Ej. DHTMLXGRID

saludos
  #15 (permalink)  
Antiguo 07/09/2010, 18:23
Avatar de vertigo112  
Fecha de Ingreso: agosto-2006
Ubicación: Estado de Mexico
Mensajes: 25
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Varios errores en una consulta MySQL con PHP

Cita:
no estan reinventando la rueda? existen frameworks de ajax llamados grids que se pueden llenar, una vez llenados los grids (tablas) con un solo clic los ordena como quieran, Ej. DHTMLXGRID
si tienes razon eulerss esto es reinvenrtar la rueda, claro que existen muchos Frameworks del lado del lenguaje [PHP, ASP, JSP etc..] y del lado asincrono como el Script [JavaScript] como el API que mencionas, incluso esto que el amigo elsaylala esta desarrollando facilmente lo puedo montar en uno como el PhpOpenbiz [7 lineas de codigo], Symfony [3 lineas de codigo], QPHP [12 lineas de codigo], ZooP [11 lineas de codigo], CodeIgniter [22 lineas], Prado[18 lineas] son los que manejo actualmente, la cuestion ahi es entener y saber configurarlos al 100% y todo sera sencillo.

la cuestio aqui es que siempre me he dado cuenta que entre mas conoces las bases con las que esta construida la gran Muralla es mucho mejor ya que eso te permite explotarlas al maximo.


Cita:
el lema es que en esto hay 2 tipos de programadores, los que programan bajo la rueda de otros y los que pueden mejorarla.
bueno amigo por hoy ya es tarde en Mexico y es hora de dejar la programacion un rato y seguirle a la animacion y postproduccion que es como musica para mis ojos, pero antes en cuanto al error

Cita:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /homepages/8/d318990700/htdocs/mjuegos/lista_de_minijuegos/BD_SQL.php on line 57


lo que veo ahi es que he olvidado colocar una funcion que me retorne el error mas elegante ya que lo que te dice ahi es que al tratar de hacer la seleccion de los datos de la tabla esta contiene campos que no concuerdan, en resumen checate bien en las tablas que no son iguales como las que te he pasado en el ejemplo alguno de los campos se esta perdiendo o no esta coicidiendo....

Última edición por GatorV; 07/09/2010 a las 18:30
  #16 (permalink)  
Antiguo 08/09/2010, 04:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Varios errores en una consulta MySQL con PHP

He revisado el archivo y mis tabls, he editado algunas cosas que no estaban bien, como dijiste. Pero sigue dandome el mismo error, ya no se que más puedes haber diferente.

Ahora el archivo acciones.php es así:
Código PHP:
<?
$baseDatos  
'db334963038';
$servidor   'db312.1and1.es';
$usuario    'dbo334963038';
$contrasena 'filemon95';
require_once(
'BD_SQL.php');
$conn = new BD_SQL;
$conn->conectar($baseDatos,$servidor,$usuario,$contrasena);
$conn->execute("SET NAMES 'latin1'");
if(isset(
$_REQUEST['tipo']))  {  
    if(
$_REQUEST['tipo']==1)    {
        
$tipo_orden 'ASC';
        
$orden 2;
    }else{
        
$tipo_orden 'DESC';
        
$orden 1;
    }
  }
else{
      
$orden 1;
  }
if(isset(
$_REQUEST['ordena_por'])){
    
//$sql = "SELECT * FROM ava_games order by ".$_REQUEST['ordena_por']." ".$tipo_orden;
    
$sql "SELECT ag.id, ag.name, ag.hits, ag.rating, ag.highscores, ag.guia, ag.guia_url, c.name category_id , c.category_id category_id_id, ag.advert_id FROM ava_games ag, ava_cats c WHERE ag.category_id = c.id ORDER BY ".$_REQUEST['ordena_por']." ".$tipo_orden;
}else{
    
$sql "SELECT * FROM ava_games";
}
$conn->execute($sql);
$row $conn->getRows(); 
?>
  #17 (permalink)  
Antiguo 08/09/2010, 08:58
Avatar de vertigo112  
Fecha de Ingreso: agosto-2006
Ubicación: Estado de Mexico
Mensajes: 25
Antigüedad: 17 años, 8 meses
Puntos: 1
Respuesta: Varios errores en una consulta MySQL con PHP

Que tal amigo pues si es un poco complicado saber exactamente que no está cuadrando, también hay posibilidad de que se trate de un bug hace un tiempo se me dio el caso de que una aplicación PHP web desarrollada bajo mi PC donde ahí tengo Windows se la envié a mi cliente as su máquina con Linux.

En principio no debería haber problemas, pero la mala práctica que en ocasiones este lenguaje me genera es que como no es case-insensitive no tomo mucho en cuenta meter alguna letra mal, no siempre coincidieran las mayúsculas de las llamadas a los archivos reales, path, incluso las propias funciones dentro de código, el lenguaje PHP en teoría no le importa esa regla pero la cuestión podría estar más en la configuración del Servidor, bueno al archivo acciones solo he dejado el nombre de esa función “getrows” ya que es la Línea 57 del BD_SQL la tengo así: ahora chécate que la he montado en mi servidor de macrowebdigital en esta ruta:.

http://www.macrowebdigital.com/forosdelweb/elsaylala/

Ahí hay un Link para que descargues los archivos, e incluso te he agregado un .txt “BD.txt” para la creación de las 2 tablas que uso en este Ejemplo.
Espero te sirva de algo la info y el ejemplo.

Un saludo desde México
  #18 (permalink)  
Antiguo 08/09/2010, 09:28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 55
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Varios errores en una consulta MySQL con PHP

Muchisimas gracias vertigo112. No se que era lo que iba mal, pero ya me funciona perfectamente gracias a ti, ahora mismo me pongo a editarla para hacer que aparezca la imagen de cada minijuego, que los nombres de los minijuegos dirijan al minijuego en mi web...


De verdad, muchisimas gracias por tu ayuda.

Tambien gracias a zapt142 por ayudarme con el primer error que me salió.


Saludos.

Etiquetas: mysql
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 21:46.