Estoy trabajando con 2 excelentes codigos de este mismo foro pero necesito unirlos a ambos... explico:
Tenemos un form que vamos a enviar por correo en formato HTML a traves de PHP. Dentro del form, adapte el 1er codigo, unas listas dependientes de paises y estados con base de datos (funciona ok). El problema es que este codigo se basa en los ID de cada tabla para mostrar los SELECT y, al llegar el correo, me muestra asi:
nombre: Pedro Perez
edad: 18
correo: [email protected]
pais: 57 (quiero que me muestre el nombre, no el id)
estado: 720 (quiero que me muestre el nombre, no el id)
telefono: 67152354
Ahora pongo los codigos...
1. Parte del form (solo el area de los select):
Código PHP:
<?
// datos de conexion a la BD.
$servidor = "xxxxxx"; // host
$usuario = "xxxxxx";
$clave = "xxxxxx";
$basedatos = "xxxxxx"; // Indicar una Base de datos.
// si se ha pulsao el boton enviar ($enviado) se procesa el formulario ..
// Sino, se continua con el formulario y los nuevos valores de los Select ..
// OJO si se tienen mas varibles (mas <input> ) se van a perder sus valores a no ser
// que los obtengamos y se les de como valor inicial en el value= de cada uno segun corresponda.
if (!empty($_POST['enviado'])){
// Procesar el formulario ...
echo "Procesando formulario:<br>";
echo "Recibido id_tabla_padre: ".$_POST['id_padre']."<br>";
echo "Recibido id_tabla_hija: ".$_POST['id_hija']."<br>";
} else {
// Conexión a la BD
$conexion = mysql_connect($servidor, $usuario, $clave) or die(mysql_error());
mysql_select_db($basedatos, $conexion) or die(mysql_error());
// Obtener el $id_padre del envio a si mismo del formulario ..
if(isset($_POST['id_padre'])){
$id_padre=$_POST['id_padre'];
}
if(isset($_POST['id_hija'])){
$id_hija=$_POST['id_hija'];
}
// Inicio Formulario .. PHP_SELF enviamos a si mismo (a este script).
echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"POST\">\n\n";
// Formar Selec "Padre".
echo "<select name=\"id_padre\" onChange=\"this.form.submit()\">\n";
echo "<option value=\"\"> Seleccione </option>\n";
$SQLconsulta_padre="SELECT * FROM countries";
$consulta_padre = mysql_query($SQLconsulta_padre,$conexion) or die(mysql_error());
While ($registro_padre=mysql_fetch_assoc($consulta_padre )){
// Se mira si el ID del registro es el mismo q el $id_padre q recibimos si hemos cambiado el select hijo.
// Se selecciona en consecuencia (selected) la opción elegida.
if ($id_padre == $registro_padre['country_id']){
echo "<option value=\"".$registro_padre['country_id']."\" selected>".$registro_padre['name']."</option>\n";
} else {
echo "<option value=\"".$registro_padre['country_id']."\">".$registro_padre['name']."</option>\n";
}
}
echo "</select>\n\n";
mysql_free_result($consulta_padre); // Liberar memoria usada por consulta.?></div></td>
<td><div align="left"><?
// Formar Select "Hijo"
echo "<select name=\"id_hija\" onChange=\"this.form.submit()\">\n";
// Si $id_padre no tiene valor (caso de que no se ha seleccionado ningua opcion del select hijo
// se muestra el mensaje de "seleccine un item" (del select padre).
if (!empty($id_padre)){
$SQLconsulta_hija="SELECT * FROM states WHERE country_id='$id_padre'";
$consulta_hija = mysql_query($SQLconsulta_hija,$conexion) or die(mysql_error());
// se mira el total de registros de la consulta .. si es 0 se muestra mensaje en el select ..
if (mysql_num_rows($consulta_hija) != 0){
While ($registro_hija=mysql_fetch_assoc($consulta_hija)) {
//echo "<option value=\"".$registro_hija['state_id']."\">".$registro_hija['name']."</option>\n";
if ($id_hija == $registro_hija['state_id']){
echo "<option value=\"".$registro_hija['state_id']."\" selected>".$registro_hija['name']."</option>\n";
} else {
echo "<option value=\"".$registro_hija['state_id']."\">".$registro_hija['name']."</option>\n";
}
}
} else {
echo "<option value=\"\"> No hay registros </option>";
}
} else {
echo "<option value=\"\"> <-- Seleccione </option>";
}
mysql_free_result($consulta_hija); // Liberar memoria usada por consulta.
echo "</select>\n\n";
}
?>
Código PHP:
<?php
$sfrom="$email"; //cuenta que envia
$sdestinatario="xxxxxx"; //cuenta destino
$ssubject="Contacto desde el website"; //subject
$shtml="<html>
<head>
<title>Mensaje para Pedro Lopes</title>
</head>
<body>
<b>Contenido del mensaje...</b><br><br>
<b>Nombre completo:</b> ".$nombre."<br>
<b>Sexo:</b> ".$sexo."<br>
<b>Edad:</b> ".$edad."<br>
<b>Correo electrónico:</b> ".$email."<br>
<b>País:</b> ".$id_padre."<br>
<b>Estado / Region:</b> ".$id_hija."<br>
<b>Dirección:</b> ".$direccion."<br>
<b>No. de Teléfono:</b> ".$telefono."<br>
<b>No. de Movil:</b> ".$movil."<br>
<b>Mensaje:</b> ".$comentarios."<br>
</body>
</html>"; //mensaje
$sheader="From:".$sfrom."\nReply-To:".$sfrom."\n";
$sheader=$sheader."X-Mailer:PHP/".phpversion()."\n";
$sheader=$sheader."Mime-Version: 1.0\n";
$sheader=$sheader."Content-Type: text/html";
$sheader=$sheader."charset=iso-8859-1";
mail($sdestinatario,$ssubject,$shtml,$sheader);
?>
<b>Estado / Region:</b> ".$id_hija."<br> una consulta a base de datos para con un if isset Id, poder mostrar el name (campo de la tabla)
O pues, en su defecto, modificar el codigo 1 para que en el option value, me pase el name, no el Id
Espero me puedan colaborar, gracias