• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • Conoce los Días Naranjas de PcComponentes: descuentos de hasta un 40% en tecnología. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Sitema de votacion, ajax , php y msql

pabs11, tienen: 7.0, 5.6 y 5.5. Yo tengo la 5.5 puesta.
 
Sube a 7.0 que va mucho mejor (dentro de lo bien que puede ur 1&1) y te funcionara PDO... Aunque creia que PDO era desde la 5.3...

Enviado desde mi X5pro mediante Tapatalk
 
pabs11, ok ya te contaré si funciona :)
 
pabs11 oMega_2093 , ya he hecho el contador.php, pero no me funciona... no sé dónde está el error. Si podriaís echar un cable os lo agradeceria.



[<?php]

if(!isset($_GET['votos']))
{
echo 'Gracias, por votar.';

}else{
if(!isset($_GET['id']));

}


$votos= 0;
$id = (int) $_GET('id');


//obtenemos la IP del usuario
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
return $ip;

//comprobamos que este usuario haya realizado el voto (identificacion por IP)
$stm = $pdo->prepare("SELECT *FROM votos WHERE ip = '".$realip."' and id = $id",$link);
$stm->bindParam(':ip', 'id');
$stm->execute();

//insertamos el voto
if($row[0]==""){

$stm = $pdo->prepare("SELECT votos,nombre FROM encuesta WHERE id =$id",$link);
$stm->bindParam(':votos', 'nombre');
$stm->bindValue(':votos', $votos, PDO::pARAM_INT);
$stm->bindValue(':nombre', $nombre, PDO::pARAM_INT);
$stm->execute();

$stm->execute();

//insertamos la ip y la fecha del voto

$stm = $pdo->prepare("INSERT INTO votos(id,ip,fecha)VALUES($id,'".$realip."','".$fecha."')",$link);
$stm->bindValue(':ip', $ip, ':fecha', $fecha, PDO::pARAM_INT);

$stm->execute();


// actualizamos el voto

$stm = $con->prepare("UPDATE encuesta SET votos= votos, nombre= nombre");
$stm->bindParam(':nombre', $nombre);
$stm->bindParam(':votos', $votos);
$stm->execute();


}



[?>]
 
Código:
Parse error: syntax error, unexpected 'ha' (T_STRING), expecting ',' or ')' in test.php on line 39

PHP:
<?php

if(!isset($_GET['votos']))
{
echo 'Gracias, por votar.';

}else{
if(!isset($_GET['id']));

}


$votos= 0;
$id = (int) $_GET('id');


//obtenemos la IP del usuario
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '';
return $ip;

//comprobamos que este usuario haya realizado el voto (identificacion por IP)
$stm = $pdo->prepare("SELECT *FROM votos WHERE ip = '".$realip."' and id = $id",$link);
$stm->bindParam(':ip', 'id');
$stm->execute();

//insertamos el voto
if($row[0]==""){

$stm = $pdo->prepare("SELECT votos,nombre FROM encuesta WHERE id =$id",$link);
$stm->bindParam(':votos', 'nombre');
$stm->bindValue(':votos', $votos, PDO::PARAM_INT);
$stm->bindValue(':nombre', $nombre, PDO::PARAM_INT);
$stm->execute();

$stm->execute();

//insertamos la ip y la fecha del voto

$stm = $pdo->prepare("INSERT INTO votos(id,ip,fecha)VALUES($id,'".$realip."','".$fec ha."')",$link);
$stm->bindValue(':ip', $ip, ':fecha', $fecha, PDO::PARAM_INT);

$stm->execute();


// actualizamos el voto

$stm = $con->prepare("UPDATE encuesta SET votos= votos, nombre= nombre");
$stm->bindParam(':nombre', $nombre);
$stm->bindParam(':votos', $votos);
$stm->execute();


}

Entiendo que ese error deriva de copiar y pegar sin utilizar las etiquetas php en el foro. Lo arreglo y...

Código:
Gracias, por votar.
Fatal error: Uncaught Error: Function name must be a string in test.php:14
Stack trace:
#0 {main}
  thrown in test.php on line 14

¿Estás probando el código...? ¿Cómo te va a funcionar?

  • Tienes fallos de sintaxis.
    • No es $_GET('index'), es con corchetes. Los paréntesis son para funciones, no para arrays.
    • return sólo se usa en funciones. ¿Para qué lo pones en la línea 19?
    • ¿De dónde te sacas $row en la línea 27?
    • ¿Y las otras variables que tienes desperdigadas por todo el código? $votos en la 31, $nombre en la 32, $realip en la 39, $link en la 29... ¿De dónde salen?
    • PDOStatement::bindParam() no se utiliza como tú lo estás haciendo en la 23 ni PDOStatement::bindValue() como lo usas en la 40.
    • ¿$con en la 47, de dónde sale?
  • No estás inicializando la conexión con la base de datos. NO puede funcionar NUNCA así.
  • Estás copiando y pegando fragmentos de código, sin entenderlos y sin molestarte en ello. Sintiéndolo mucho, prefiero no participar en eso. Explico lo que haga falta a quien me lo pida, pero no ayudo a copiar y pegar, lo siento.
[/php]
 
Última edición:
oMega_2093, gracias por ayudarme. Entiendo que no queráis participar.... Intentaré comprender el ejemplo que me pusiste, y intentaré sacarlo. Gracias por todo.

Saludos y gracias

:)

PD: Lo siento , por haceros perder vuestros tiempo por ayudarme
 
oMega_2093, si puedes decirme de tutoriales, ejemplos o de páginas con contenido en PHP que me pudieran servir de ayuda. Te lo agradecería
 
Buenas,
oMega_2093, he hecho mi sistema de votación con los tutoriales que me pasaste, pero no me funciona. Si puedes echarle un vistazo, te estaré agradecido.

Este es el botón:

<?php

include('conexion.php');
include('funciones.php');

echo '<button id="boton" data-id="1">Cojinudo</button> <span id="resultado">' . get_likes(boton) . '0</span>';
?>

<?php
if(!$_GET){
$yourID = 1;
}else{
$yourID = $_GET['id'];
}
?>


Este es el archivo js

$(document).ready(function () {
$('#boton').click(function () {
contador($(this).data('id'));
});
});

function contador(id) {
$.ajax({
url: 'contador.php',
type: 'GET',
dataType: 'json',
data: {id: id},
success: function (response) {
$('#resultado').html(response.votos);
$('#boton').prop('disabled',true);
},
});
}

Este es el archivo funciones.php

<?php
function get_likes($id)
{
include('conexion.php');

$query = "SELECT votos FROM encuesta WHERE id='" . (int)$id . "';";
$result = mysqli_query($connect, $query);

while ($row = mysqli_fetch_array($result, MYSQL_BOTH)) {
if ($row['votos'] == "") {
return '0';
} else {
return $row['votos'];
}
}
mysqli_close($connect);
}
//// Función para obtener la IP
function getIp()
{
$ip = $_SERVER['REMOTE_ADDR'];

if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

return $ip;
}

?>

Y este es archivo contador.php

<?php


require('conexion.php');
include('funciones.php');

$ip = getIp();
$yourID = $_GET['id'];
$query = "SELECT votos FROM encuesta inner join votos on votos.id_encuesta=encuesta.id WHERE id_encuesta=" . $yourID . " limit 1;";
$result = mysqli_query($connect, $query);
$votos = null;
$data = array();
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
$votos = (int)$row['votos'];
$votos++;
$queryEncuesta = "UPDATE encuesta SET votos=" . $votos . " WHERE id=" . $yourID . ";";
mysqli_query($connect, $queryEncuesta);
$queryVotos = "INSERT INTO votos(id_encuesta,ip) VALUES (" . $yourID . ",'" . $ip . "');";
mysqli_query($connect, $queryVotos);
$data = array('votos' => $votos);
}
return json_encode($data);
?>
 
No lo he examinado a fondo, aunque me choca ver un include dentro de una función... Debería estar fuera a no ser que solo quieras que se use cuando uses esa función...
 
pabs11, ese include es para hacer la conexion a la base de datos.
 
pabs11, ese include es para hacer la conexion a la base de datos.
Pero no deberia estar dentro de la funcion, ya que su uso no depende de la funcion sino del archivo.

¿Cada vez que llames a la funcion quieres la conexion a la BD o te sobra con una vez?

Enviado desde mi X5pro mediante Tapatalk
 
pabs11, ese incluye me sobra. No me di cuenta de quitarle.
 
Arriba