Hola,
Estoy usando el plugin fancybox como ventana modal.
Necesito pasar la variable $row["nombreempresa"] recogida de una
base de datos dentro de un bucle while y cargar un formulario
dentro de una ventana modal y que se envíe asincronamente.
No encuentro la manera de hacerlo. Llevo pillado con esto una semana.
De momento solo he conseguido pasar los datos del formulario serializando los datos pero,
¿como puedo pasar a la vez $row["nombreempresa"] ?
Para ello se me ocurre poner un name que
contenga dicha variable y que al hacer clic la envíe, pero no se como recogerla y enviarla mediante ajax y con los datos del formulario serializados a la vez.
Primero págino una serie de resultados:
while ($row = $result->fetch_assoc()) {?>
<div class="aladerechaflota">
<p><a class="modalbox" href="#inline" name="<?php echo $row["nombreempresa"];?>">click to open</a></p>
<!-- hidden inline form -->
</div>
</div>
<?php }
/* liberar el resultset */
$result->free();
}
/* cerrar la conexión */
$conn->close();
?>
<div id="inline">
<h2>Send us a Message</h2>
<form id="contact" name="contact" action="#" method="post">
<label for="email">Your E-mail</label>
<input type="email" id="email" name="email" class="txt">
<br>
<label for="msg">Enter a Message</label>
<textarea id="msg" name="msg" class="txtarea"></textarea>
<button id="send">Send E-mail</button>
</form>
</div>
El script que valida el formulario y pasa los datos a send_email.php es el siguiente:
function validateEmail(email) {
var reg = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return reg.test(email);
}
$(document).ready(function() {
$(".modalbox").fancybox();
$("#contact").submit(function() { return false; });
$("#send").on("click", function(){
var emailval = $("#email").val();
var msgval = $("#msg").val();
var msglen = msgval.length;
var mailvalid = validateEmail(emailval);
if(mailvalid == false) {
$("#email").addClass("error");
}
else if(mailvalid == true){
$("#email").removeClass("error");
}
if(msglen < 4) {
$("#msg").addClass("error");
}
else if(msglen >= 4){
$("#msg").removeClass("error");
}
if(mailvalid == true && msglen >= 4) {
// if both validate we attempt to send the e-mail
// first we hide the submit btn so the user doesnt click twice
$("#send").replaceWith("<em>sending...</em>");
$.ajax({
type: 'POST',
url: 'includes/send_email.php',
data: $("#contact").serialize(),
success: function(data) {
if(data == "true") {
$("#contact").fadeOut("fast", function(){
$(this).before("<p><strong>Success! Your feedback has been sent, thanks </strong></p>");
setTimeout("$.fancybox.close()", 1000);
});
}
}
});
}
});
});
El archivo sendemail.php el cual envía el formulario y devuelve la respuesta es:
<?php
$sendto = "[email protected]";
$usermail = $_POST['email'];
$content = nl2br($_POST['msg']);
$subject = "New Feedback Message";
$headers = "From: " . strip_tags($usermail) . "\r\n";
$headers .= "Reply-To: ". strip_tags($usermail) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html;charset=utf-8 \r\n";
$msg = "<html><body style='font-family:Arial,sans-serif;'>";
$msg .= "<h2 style='font-weight:bold;border-bottom:1px dotted #ccc;'>New User Feedback</h2>\r\n";
$msg .= "<p><strong>Sent by:</strong> ".$usermail."</p>\r\n";
$msg .= "<p><strong>Message:</strong> ".$content."</p>\r\n";
$msg .= "</body></html>";
if(@mail($sendto, $subject, $msg, $headers)) {
echo "true";
} else {
echo "false";
}
?>
Gracias de antemano por la atención prestada.
Manuel