Foros del Web » Programando para Internet » PHP »

contar datos de my dase de datos

Estas en el tema de contar datos de my dase de datos en el foro de PHP en Foros del Web. Hola a todos tengo un pequeño problema el cual espero me ayuden a solucionarlo, bueno el problema es el siguiente. Tengo un pequeño formulario marcas.php ...
  #1 (permalink)  
Antiguo 27/02/2007, 14:35
Avatar de franklin85  
Fecha de Ingreso: octubre-2006
Mensajes: 103
Antigüedad: 17 años, 6 meses
Puntos: 0
contar datos de my dase de datos

Hola a todos tengo un pequeño problema el cual espero me ayuden a solucionarlo, bueno el problema es el siguiente.
Tengo un pequeño formulario
marcas.php
Código PHP:
<script>
function 
verif(){
var 
pepez=0;
for(
i=0ele=document.m.elements[i]; i++){
if (
ele.type=='radio')
if (
ele.checked){pepez=1;break;}}
if (
pepez==1){document.m.submit();}else{
alert('Debe seleccionar una marca de autos');return;}
}
</script>
<font class="texto">Que marca de autos es tu preferida</font>
<form name="m" method="POST" action="procesa.php">
<input type="radio" name="voto" value="Toyota">Toyota
<input type="radio" name="voto" value="Renault">Renault
<input type="radio" name="voto" value="Ford">Ford
<input type="radio" name="voto" value="Peugeot">Peugeot
<input type="radio" name="voto" value="Mercedes Benz">Mercedes Benz
<input type="button" value="votar" onclick="verif()" name="Submit">
</form> 
lo que tengo es que con este formulario puedo votar por la marca preferida de autos hasta ahí normal, después tengo otro archivo con el cual puedo ver los resultados de las votaciones el cual es votos.php
Código PHP:
<?
include("conexion.php");
    
$iqryvar=mysql_query("SELECT count(idusuarios) FROM autos",$ilink);
    while (
$row mysql_fetch_row($iqryvar)) {
        
$iid=$row[0];
    }
    
mysql_free_result($iqryvar);
#-------------------------------page usuarios configuration
  
$offset+=0;
  
$item_perpage50;   #----change this to define how many item per page
  
$prev$offset-$item_perpage;
  
$next$offset+$item_perpage;
  if (
$prev <= 0$prev=0;
include(
"header_admin.inc");
?>

<table border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td><em>Marcas de autos</em></td>
<td>Total de Usuarios: <? echo $iid?></td>
</tr>
</table>

<table border="0" cellpadding="0" cellspacing="0" align="center">
<tr>
<td>
    <table border="1" width="100%" cellpadding="0" cellspacing="0">
    <td class="linkboxl" onMouseOver="high(this);" onMouseOut="low(this);" onClick="window.location.href='./votos.php?offset=<?echo $prev?>';" nowrap>&nbsp;<a href="./votos.php?offset=<?echo $prev?>"><strong>&lt;&lt; <?echo $item_perpage?> Anteriores</strong></a>&nbsp;</td>
    <td class="linkboxl" onMouseOver="high(this);" onMouseOut="low(this);" onClick="window.location.href='./votos.php?offset=<?echo $prev?>';" nowrap>&nbsp;<a href="./votos.php?offset=<?echo $next?>"><strong><?echo $item_perpage?> Siguientes &gt;&gt;</strong></a>&nbsp;</td>
    <td class="linkboxl" onMouseOver="high(this);" onMouseOut="low(this);" onClick="window.location.href='index.php';" nowrap>&nbsp;<a href="./index.php"><strong>INICIO</strong></a>&nbsp;</td>
    </table>
</td>
</tr>
<tr>
    <td>Usuario</td>
    <td>Numero IP</td>
    <td>Voto</td>
    <td>Fecha</td>
    <td>Hora</td>
</tr>
<?
#---------------------------------------query configuration
   
$tbl_search "autos";
  
$field "idusuarios,hostname,voto,DATE_FORMAT(fecha,'%d/%m/%Y') AS fecha,hora";
  
$query "SELECT $field FROM $tbl_search LIMIT $offset, $item_perpage";
#---------------------------------------query process
$iqryvar=mysql_query($query,$ilink);
while (
$row mysql_fetch_array($iqryvar)) {
$id=$row["idusuarios"];
$hostname=$row["hostname"];
$voto=$row["voto"];
$fecha=$row["fecha"];
$hora=$row["hora"];

echo 
"<tr>";
echo 
"<td>".$id."</td>";
echo 
"<td>".$hostname."</td>";
echo 
"<td>".$voto."</td>";
echo 
"<td>".$fecha."</td>";
echo 
"<td>".$hora."</td>";
echo 
"</tr>";
}
?>
</table>
ahora al costado de donde me muestra el total de inscritos, le quiero agregar es que me muestre cuantos votos hay por cada marca. ejemplo:
Toyota = 15 (es aquí donde quiero el código php para contar las marcas por separado)
Renault = 20
Ford = 8
Peugeot = 12
Mercedes Benz = 18
TOTAL === 73 INSCRITOS

Bueno ante todo muchas gracias.
  #2 (permalink)  
Antiguo 27/02/2007, 17:16
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 5 meses
Puntos: 3
Re: contar datos de my dase de datos

teniendo en cuenta que tengas el campo id (único)

$contar = mysql_query("SELECT COUNT(id) FROM tabla WHERE condición");
$suma = mysql_result($contar,0);

la variable suma tendrá el valor de todos los registros que hay con esa condición.

Espero haber podido ayudarte, saludos
__________________
aste nagusia
  #3 (permalink)  
Antiguo 27/02/2007, 17:44
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: contar datos de my dase de datos

Hola

Bueno, pues lo correcto seria manejar eso como una encuesta,pero te conllevaria crear mas tablas

como solo hablas de una tabla, una posible solucion seria esta

Código PHP:
//nombrevoto suponiendo que el valor que almacenas es toyota, ford, //etc...
//distinct trae el nombre solo una vez (es decir, si votaron por toyota 3 //veces pues traeria 3 veces toyota, pero con distinct se arregla eso
$query = mysql_query("Select distinct nombrevoto from autos order by nombrevoto");
while($r = mysql_fetch_array($query))
{
?>
<?
//query que hace el count por cada nombre de voto 
$query_total_votos_por_marca mysql_query("Select count(nombrevoto) as uno from autos where nombrevoto='$r[0]'");
$r_total_votos_por_marca mysql_fetch_array($query_total_votos_por_marca);
echo 
$r[0].' : '.$r_total_votos_por_marca[0].'<br>';
}
//query final que cuenta el total de usuarios y nos da el total de votos
$query_total_votos mysql_query("Select count(idusuarios) from autos");
$r_total mysql_fetch_array($query_total_votos);
?>
<br>
Total de votos: <?=$r_total[0]?>
Espero os sirva

Suerte
  #4 (permalink)  
Antiguo 27/02/2007, 17:45
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: contar datos de my dase de datos

HOla, me falto el signo <? al principio del codigo anterior, por eso no quedo con color, ten eso en cuenta si copias el codigo, suerte.
  #5 (permalink)  
Antiguo 01/03/2007, 17:07
Avatar de franklin85  
Fecha de Ingreso: octubre-2006
Mensajes: 103
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: contar datos de my dase de datos

Hola El Patrón ante todo gracias por tu ayuda, si salio el conteo de cada marca, ahora surgió otro problema cuando corrí el código para el conteo de las marcas de autos dentro los datos que habia guardado mediante el formulario halle un campo vacio, para lo cual el codigo me voto el siguiente resultado:
Ejemplo
Toyota : 15
renault : 6
:1
Bueno lo que hice fue borrar ese registro y ese (:1) desapareció.
Cuando entre a la bd para borrar el registro encontre lo siguiente:
Ejemplo:
13, 192.168.41.55, (aquí se deberia ir la marca por la cual voto), 28/02/2007, 15:23:10
* Que puedo hacer para que no pase esto, a lo que me refiero es que cuando registre debe hacerlo con todos los campos de mi bd. Te paso my archivo procesa.php para ver si hay algo mal en el.
* Si no fuera mucha molestia como puedo hacer para que un usuario solo vote una sola vez, ya que me e percatado que hay usuarios que votan varias veces. Por ejemplo e encontrado a 1 usuario que habia votado 18 veces a la misma hora(el usuario lo e sacado por la ip que se registra en la bd).

Bueno Gracias por tu ayuda

procesa.php

Código PHP:
<?php
include("conexion.php");
$ilimit=0;
$sql="SELECT idusuarios FROM autos where idusuarios='$idusuarios'";
$iqryvar=mysql_query($sql,$ilink);
while (
$row mysql_fetch_row($iqryvar)) {
        
$ilimit += 1;
    }
mysql_free_result($iqryvar);

if (
$ilimit<1)
{
 
$hostname gethostbyaddr($REMOTE_ADDR);
// $datum=date("j/n/Y");
 
$datum date("Y-m-d");
$insert="insert into autos (idusuarios, hostname, voto, fecha, hora) values('','".$hostname."','".ucwords($voto)."','".$datum."','".date("H:i:s")."')";

 
mysql_query($insert);
 
$idusr=mysql_insert_id();

$vtit "Usted a apoyado a "$voto ." - Gracias por haber participado";
 echo 
"<html><head><title>Adicionar Usuario</title>";
 echo 
"<BODY bgcolor=white background=img/fondo.gif>";
 echo 
"<div align=center><font face=arial size=2 color=ffffff>Usted a apoyado a <b>".$voto."</b><br>Gracias por haber participado.</font></div></body></html>";
}
else
{
 echo 
"<script type='text/javascript'>window.alert('Su voto ya fue registrado');history.back(-1);</script>";
}
mysql_close($ilink);
?>
  #6 (permalink)  
Antiguo 05/03/2007, 00:29
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: contar datos de my dase de datos

Hola

Bueno, pues la verdad copie tu codigo y lo probe y envia todos los valores correctamente a la base de datos, asi que no se porque ese se iria vacio, tal vez fue el tiempo de espera de la pagina o quien sabe que pasaria que no envio el dato.

En cuanto a lo que dices de la repeticion de votos por un mismo usuario, bueno, pues te tocaria deshabilitar las acciones de refrescar la pagina (el boton de refrescar, la tecla F5, las teclas Ctrl+R) en la pagina procesa.php o hacerle un location.href=otrapagina.html, porque usuarios que manejen bien el proceso votaran una vez y listo, pero usuarios mas "abejas" daran refrescar a la pagina, y pues tantas veces como le den refrescar seran registrados sus datos en la base de datos, claro, si no estan algunos datos como el idusuarios como principal key, que tal vez te ocurra.
Ahora, si el campo idusuarios esta como autonumeric pues no hay modo que al refrescar no le genere un nuevo idusuario, tocaria quitar ese autoincrement.

Y pues en la consulta donde tu miras si los datos ya estan o no registrados es precisamente con idusuarios, entonces yo te pregunto si antes de votar la gente se registra en algun lado??? si es asi, entonces perfecto, la validacion no tendria problema en la consulta pero de no ser asi podrian votar varias veces pues se les generaria un nuevo idusuarios al ser autonumerico..

podrias poner si quieres restringirlos por la ip select hostname from autos where hostname='$hostname' y obviamente el $hostname tendrias que ponerlo antes de la consulta, pero esto tal vez le haga mal a varias personas que trabajen sobre una red y tengan una ippublica ya que si una sola de esas personas votas registra la ip y a la hora de votar otra persona la ip obviamente ya estara registrada y no podrian votar.

Bueno, aparte de eso funciona de maravilla, suerte.
  #7 (permalink)  
Antiguo 21/05/2007, 13:58
Avatar de franklin85  
Fecha de Ingreso: octubre-2006
Mensajes: 103
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: contar datos de my dase de datos

hola El Patrón tengo un pequeño problema con la solución que me distes acerca a este tema, bueno el problema es el siguiente:
  • te explico a principio el codigo a estado funcionando de maravilla, pero hoy dia me esta saliendo el siguiente error
Código PHP:
mysql_fetch_array(): supplied argument is not a valid MySQL result resource in votos.php on line 
osea en esta linea
Código PHP:
$r_total_votos_por_marca mysql_fetch_array($query_total_votos_por_marca); 
a que se debe ese error, ya que yo no e cambiado nada del script
Gracias por tu ayuda
  #8 (permalink)  
Antiguo 22/05/2007, 21:14
 
Fecha de Ingreso: abril-2006
Ubicación: Colombia
Mensajes: 648
Antigüedad: 18 años
Puntos: 3
Re: contar datos de my dase de datos

Hola Franklin

Bueno, pues ese error me aparecia a mi cuando me faltaba seleccionar la base de datos o cuando alguno de los datos de la conexión estaba mal o cuando alguna variable estaba con diferente nombre respecto a alguna inicial que se llamaba parecido, mira, te dejo un ej para que lo pruebes

Código PHP:
<?php
//Conexión con usuario y contraseña si la tiene
  
echo $link mysql_connect("localhost","user","pass");
//Selección de base de datos a usar
  
mysql_select_db("Foros");
//Variable que guardara el resultado de la consulta
  
$query_total_votos_por_marca mysql_query("SELECT * FROM Usuarios",$link);
//Variable que tendra los resultados de la consulta
  
$r_total_votos_por_marca mysql_fetch_array($query_total_votos_por_marca);
//Impresión de uno de los elementos del arreglo
  
echo $r_total_votos_por_marca[1];
?>
__________________
Suerte.
_______________________________
"La vida es el principio de la muerte".
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 23:05.