Tengo lo siguiente:
res.php
Código PHP:
<?php
if(isset($_POST['select']) != ''){
if(file_exists($_SERVER['DOCUMENT_ROOT']."/encuestas/sondeo1.xml")){
$xml_verificar = simplexml_load_file($_SERVER['DOCUMENT_ROOT']."/encuestas/sondeo1.xml");
if($xml_verificar->xpath('/datos/voto[ip_address="'.$_SERVER['REMOTE_ADDR'].'"]')) { echo 'Usted ya ha votado.'; exit(); } else {
$sxe = new SimpleXMLElement($xml_verificar->asXML());
$newItem = $sxe->addChild("voto");
$newItem->addChild("respuesta", $_POST['select']);
$newItem->addChild("ip_address", $_SERVER['REMOTE_ADDR']);
if (!$sxe->asXML($_SERVER['DOCUMENT_ROOT']."/encuestas/sondeo1.xml")){
echo "Hubo un error al guardar su voto, por favor intentelo nuevamente.";
}
else { echo "Su voto por <strong>".$_POST['select']."</strong> ha sido guardado satisfactoriamente."; }
}
} else {
$xml_sondeo = "<?xml version='1.0' encoding='UTF-8'?>
";
$xml_sondeo .= "<datos>
<voto>";
$xml_sondeo .= "<respuesta>".$_POST['select']."</respuesta>
<ip_address>
".$_SERVER['REMOTE_ADDR']."
</ip_address>
";
$xml_sondeo .= "</voto>
</datos>
";
$archivillo = $_SERVER['DOCUMENT_ROOT']."/encuestas/sondeo1.xml";
if($fh = fopen($archivillo, 'w+')) {
if(fwrite($fh, $xml_sondeo)){
echo "Su voto por <strong>".$_POST['select']."</strong> ha sido guardado satisfactoriamente.";
} else {
echo "Hubo un error al guardar su voto, por favor intentelo nuevamente.";
}
fclose($fh);
}
}
} else {
echo 'Debe seleccionar una opción';
} ?>
Cita:
en test.php se encuentra el formulario, y res.php es el backend.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sondeos</title>
</head>
<body>
<div style="width:300px; background-color:#CCC; margin: 0 auto;">
<div style=" width:300px;">
<div>
<label>¿Que opina de los burritos?</label><br>
<input class="boton" type="radio" name="group2" value="BUENOS"> Estan buenos<br>
<input class="boton" type="radio" name="group2" value="NOBUENOS"> No me gustan<br>
<input class="boton" type="radio" name="group2" value="abstener"> Abstengo mi comentario<br>
<input id="elBoton" type="button" value="Enviar">
</div>
<br><br>
<div id="resultado">
</div>
</div>
</div>
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script>
$('#elBoton').click(function(){
$( "#resultado" ).load( "res.php", {
elBoton : $('#elBoton').val(),
select : $('.boton:checked').val()
} );
})
</script>
</body>
</html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sondeos</title>
</head>
<body>
<div style="width:300px; background-color:#CCC; margin: 0 auto;">
<div style=" width:300px;">
<div>
<label>¿Que opina de los burritos?</label><br>
<input class="boton" type="radio" name="group2" value="BUENOS"> Estan buenos<br>
<input class="boton" type="radio" name="group2" value="NOBUENOS"> No me gustan<br>
<input class="boton" type="radio" name="group2" value="abstener"> Abstengo mi comentario<br>
<input id="elBoton" type="button" value="Enviar">
</div>
<br><br>
<div id="resultado">
</div>
</div>
</div>
<script src="//code.jquery.com/jquery-1.11.2.min.js"></script>
<script>
$('#elBoton').click(function(){
$( "#resultado" ).load( "res.php", {
elBoton : $('#elBoton').val(),
select : $('.boton:checked').val()
} );
})
</script>
</body>
</html>
El detalle es el siguiente:
Supongamos que no existe el xml aun, un individuo entra, realiza la votacion y listo, se crea el XML con un registro, si ese mismo usuario intenta votar INMEDIATAMENTE despues de hacer su primera votacion y que nadie mas haya votado aun, el podra votar, la validacion que hago con xpath y la IP no funciona cuando hay solo un registro y el mismo usuario intenta votar inmediatamente despues.
Si yo siendo el primero, realizo la votacion, despues otro usuario vota (despues de este punto ya hay 2 registros), despues intento votar yo de nuevo, ahora si funcionara la validacion.
La pregunta es, ¿porque no funciona esa validacion si el primer usuario intenta votar 2 veces, de que otra forma pudiera hacer esa validacion?
Lo intente con un foreach y un if, pero tuve el mismo resultado.
Gracias de antemano.
======================
Una correccion...
Error. El detalle es, que el primer usuario, siempre, sin importar que, puede votar 2 veces
==========================