YA LO TENGO. Por fin, lo consegui. Funciona!!! Usando las funciones DOM de php de las que hace unos dias no tenia ni idea: abro un archivo xml, busco si la ip del que lo manda el email, si ya esta registrada saco el numero que veces que lo ha hecho, lo comparo.... Creo que ya pillais por donde van los tiros. Este es el codigo:
Código :
<?php
$usuarios = new domdocument("1.0");
$usuarios->preserveWhiteSpace=false;
$usuarios->load("usuarios.xml");
//inicializamos el tema del xml, creando un nuevo objeto dom y cargando el archivo xml.
$ipencuestion=$REMOTE_ADDR;
//aqui definimos la ip del visitante
$personas_nl=$usuarios->getElementsByTagname("persona");
//creamos un nodelist con todos los tags de persona
foreach ($personas_nl as $persona_nl){
$mi_array[$x]=$persona_nl->nodeValue;
$x++;
}
//mediante un codigo conseguido tras la mezcla de CC con kas limon, convertimos el nodelist en un array. Lla idea es que un nodelist no es un array, luego no podemos hacer busqudas en el, pero que si funciona con foreach
if(in_array($ipencuestion,$mi_array)){
echo "la ip si esta en el xml <br>";
$numeroregistro = array_search($ipencuestion,$mi_array);
//aqui conseguimos el numero de registro de la ip, MUY IMPORTANTE
foreach ($personas_nl as $node_numero_veces){
$array_veces[$y]=$node_numero_veces->getAttribute("num");
$y++;
}
$numero_veces=$array_veces[$numeroregistro];
echo $numero_veces."<br>";
//bueno, ahora hemos sacado el numero de veces que la gente ha enviado el email
if ($numero_veces>4){
echo "&estatus=demasiados";
}else{
//aqui se ponen las acciones si la ip si esta registrada pero no ha llegado hasta el limite de emails
$numero_veces++;
$raiz=$usuarios->documentElement;
$registro_actual = $raiz->getElementsByTagName('persona')->item($numeroregistro);
$registro_actual->setAttribute("num",$numero_veces);
$usuarios->save("usuarios.xml");
$sendTo = $_POST["mail"];
$subject = $_POST["titulo"];
$headers = "From: " . $_POST["nombre"];
$headers .= "<" . $_POST["mail"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["mail"];
$message = $_POST["mensaje"];
mail($sendTo, $subject, $message, $headers);
echo "&estatus=ok";
}
}else{
//aqui se ponen las acciones si la ip no esta registrada
$raiz=$usuarios->documentElement;
$persona_nueva = new domelement("persona");
$persona_nueva = $raiz->appendChild($persona_nueva);
$persona_nueva->setAttribute("num",1);
$persona_nueva->nodeValue=$ipencuestion;
$usuarios->save("usuarios.xml");
$sendTo = $_POST["mail"];
$subject = $_POST["titulo"];
$headers = "From: " . $_POST["nombre"];
$headers .= "<" . $_POST["mail"] . ">\r\n";
$headers .= "Reply-To: " . $_POST["mail"];
$message = $_POST["mensaje"];
mail($sendTo, $subject, $message, $headers);
echo "&estatus=ok";
}
?>
Y el XML:
Código :
<?xml version="1.0" ?>
<usuarios>
<persona num="2">127.0.0.1</persona>
</usuarios
Al flash tambien le he hecho algun pequeño cambio para que reconozca la variable estatus y diga si se ha enviado el mensaje, si ya son demasiados o si no se ha podido contactar con el servidor, pero no creo que nadie tenga ningun problema en hacerlo.
La parte del envio del email, las variables y todo eso, no se que anduve haciendo asi que mejor echarle un vistazo, porque creo que no se corresponde del todo con el codigo que me diste, pero simplemente cambialo.
El numero maximo de emails ponlo aqui:
Código :
if ($numero_veces>4){
Bueno, han sido bastantes horas de esfuerzo (mi librito de php 5 no es tan bueno, como pensaba, el capitulo de XML es una p*M*!!). Puede que mi codigo no sea muy... decente, pero mas o menos funciona. Se admiten sugerencias. Espero que te sirva para resolver tu problema, pero de todas formas hay que ver lo que uno aprende tratando de solucionar un problemilla. No se si a algun BOFH le interesará colgarlo como ejemplo o algo asi, pero estoy a vuestra completa disposicion.
Saludos!
*perdonad los acentos, es que estoy cansado...