PHP - problema con datos enviados por mail

 
Vista:
sin imagen de perfil

problema con datos enviados por mail

Publicado por jose maria (45 intervenciones) el 19/07/2014 19:46:31
hola, estoy enviando un mail mediante un php, el mail yega a su destino, pero los datos enviados llegan incompletos
parece que cuando hay un espacio donde separe caracteres, solo envia lo que haya a su izquierda, osea,
quiero mandar el dato:
12345678901234567890

a) si lo mando tal cual llega sin problemas
b) si lo mando 12 34 ...... solo llega 12
c) si lo mando 1 23456 789 solo llega 1

¿me explico ahora mejor? ¿por que pasa eso? como lo puedo evitar?
gracias

el codigo php es este:

<html>
<head>
<title></title>
</head>
<body>
<?php
$name=$_POST['nom'];
$moneda1=$_POST['mon1'];
$moneda2=$_POST['mon2'];
$amount=$_POST['montot'];
$descripcion=$_POST['des'];
$destinatario='[email protected]';
$cuerpo = "<h1>Datos del Pago:</h1>";
$cuerpo .= "<p>Comercio: " . $name."</p>";
$cuerpo .= "<p>Importe: " . $moneda1 . " Euros y ". $moneda2 ." Centimos.</p>";
//mando el correo...
mail($destinatario,"Pago por TPV",$cuerpo,"MIME-Version: 1.0\nContent-type: text/html; charset=UTF-8\nFrom: ".$emisor." < http://www.miweb.com >");
?>
</body>
</html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema con datos enviados por mail

Publicado por Vainas (262 intervenciones) el 20/07/2014 13:47:21
Buenas:

En el código que envías no dices en que variable del POST te pasa.En lo que recibes no veo nada malo. No usas en ningun lado la variable $amount? y es aqui donde imagino que esta el problema.

Todo lo que viene por POST o GET desde el cliente es un string. Cuando haces alguna operacion matematica con esos valores se transforman a enteros o reales segun sea el caso y es aqui donde imagino que puede estar el problema.

Te recomiendo este enlace http://php.net//manual/es/language.types.type-juggling.php y te fijes que sucede con el string "10 Cerditos pequeñitos"

Como solucion si crees que va a suceder mucho esto es que limpies de espacios lo que venga de ese input con funciones como la siguiente:

1
2
3
4
function limpia_espacios($cadena){
    $cadena = str_replace(' ', '', $cadena);
    return $cadena;
}

Sacada de http://www.bufa.es/eliminar-espacios-blanco-cadena/

Mira los cast directos $variable = (int)$_POST["variable"]; //No se si esta bien escrito del todo.

O funciones como intval($_POST["variable"]);

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con datos enviados por mail

Publicado por jose maria (45 intervenciones) el 20/07/2014 14:22:25
ocurre en todos los campos.... y me suponia tambien que podria ser esa la causa, pero sigo con la duda, si lo que deseo mandar es "uno dos tres" ¿como hago para que al llegar a mi mail sea "uno dos tres" y no "unodostres"?
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema con datos enviados por mail

Publicado por Vainas (262 intervenciones) el 20/07/2014 15:21:02
Vale pues no es eso entonces

Otra cosa. En la documentacion de la funcion mail hablan de que el mensaje no debe ser mas de 70 caracteres de largo.
Cuando creas $cuerpo = <h1>..</h1><p>...</p> lo haces todo en una sola linea. Y si le agregas un \r\n al final de cada uno?.

Ya nos contaras.

Saludos.

referencia: http://us3.php.net/manual/en/function.mail.php

Actualizo: He leido por alli que puedes codificar el mensaje

1. Agregas a la cabecera Content-Transfer-Encoding: base64.
2. Aplicas al contenido chunk_split(base64_encode(...)).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con datos enviados por mail

Publicado por jose maria (45 intervenciones) el 21/07/2014 17:51:57
bueno, ami no me sale, podrias sujerirme algo de codigo?
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con datos enviados por mail

Publicado por jose maria (45 intervenciones) el 21/07/2014 19:09:03
bueno, acabo de descubrir algo curioso que no entiendo de ninguna manera
la secuencia es esta:
mediante mi html (form-/form) capto datos
los envio por post a mi php donde se confirman y los visualizo en pantalla

$order=date('ymdHis');
$moneda1=$_POST['importe1'];
$moneda2=$_POST['importe2'];
$monedatotal=$moneda1.$moneda2;
$descripcion=$_POST['descripcion'];
$name=$_POST['comercio'];
echo "...........................
luego al pulsar una imagen que hace de boton los vuelvo a enviar por post mediante input hidden:
..........................
<form name=confirmarcompra action='enviomail.php' method='post' target='_self'>
........................
<input type='image' src='img/b_ok.png' width='94' height='31' />
.......................
<input type='hidden' name='nom' value=$name>
<input type='hidden' name='ref' value=$order>
<input type='hidden' name='mon1' value=$moneda1>
<input type='hidden' name='mon2' value=$moneda2>
<input type='hidden' name='montot' value=$monedatotal>
<input type='hidden' name='des' value=$descripcion>
</form>
y aqui es donde creo esta el fallo, ya que cuando llega al php encargado de enviar el mail los datos llegan como comente al principio de mi post, ¿por que pienso que es aqui el problema que no veo?
hice la prueba con otro codigo para enviar el mail y funciono correctamente, lo inserte en el codigo y me daba el mismo error, asi que hice la prueba al reves, al otro codigo de prueba le inserte otro php y me ocurria lo mismo....
¿que puede ser?
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema con datos enviados por mail

Publicado por Vainas (262 intervenciones) el 21/07/2014 21:37:30
Mira a ver si este codigo te funciona:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<?php
	$comercio= isset($_POST['comercio']) ? $_POST['comercio'] : '' ;
	$order=date('ymdHis');
	$moneda1= isset($_POST['importe1']) ? $_POST['importe1'] : '' ;
	$moneda2= isset($_POST['importe2']) ? $_POST['importe2'] : '' ;
	//No es lo mismo $moneda1.$moneda2 que $moneda1*$moneda2
	$monedatotal=$moneda1.$moneda2;
	$descripcion=isset($_POST['descripcion']) ? $_POST['descripcion'] : '' ;
	?>
	<p>Imprimo la variable POST</p>
	<pre><?php var_dump($_POST); ?></pre>
	<p>Formulario</p>
	<form name='confcomp' action='' method='post' target='_self'>
		<label>Comercio: </label>
		<input type='text' name='comercio' value='<?php echo $comercio ?>'><br>
		<label>Fecha: </label>
		<input type='text' name='order' value='<?php echo $order ?>' disabled><br>
		<label>Importe 1: </label>
		<input type='text' name='importe1' value='<?php echo $moneda1 ?>'><br>
		<label>Importe 2: </label>
		<input type='text' name='importe2' value='<?php echo $moneda2?>'><br>
		<label>Total: </label>
		<input type='text' name='monedatotal' value='<?php echo $monedatotal?>' disabled><br>
		<label>Descripcion: </label>
		<input type='text' name='descripcion' value='<?php echo $descripcion ?>'><br>
		<input type='submit' name='enviar' value='Enviar'/>
	</form>
	<?php
	//Aqui creamos el mensaje a enviar
	$destinatario='mail@demo.com';
	$asunto = "Pago por TPV";
	$cuerpo = "<h1>Datos del Pago:</h1>\r\n";
	$cuerpo .= "<p>Comercio: ".$comercio."</p>\r\n";
	$cuerpo .= "<p>Importe: ".$moneda1." Euros y ".$moneda2." Centimos.</p>\r\n";
	$emisor = "Nombre";
	$cabeceras = "MIME-Version: 1.0\r\nContent-type: text/html; charset=UTF-8\r\nFrom: ".$emisor." <http://www.miweb.com>\r\n";
	//mando el correo...
	if(isset($_POST['enviar'])){
		mail($destinatario,$asunto,$cuerpo,$cabeceras);
		echo "ENVIADO";
	}
	?>
</body>
</html>

Espero que te sirva. Yo lo he probado y funciona bien. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con datos enviados por mail

Publicado por jose maria (45 intervenciones) el 22/07/2014 19:08:43
bueno, gracias, pero ami no me funciona.....
lo probe de varias formas....
la primera lo copie tal cual guardandolo conla extension .php
me visualiza el array (y de echo solo me visualizava datos antes del espacio)
luego las cajas de texto activas estaban vacias.....
comercio, importe1,importe2,descripcion.....
(y repito, el array lo visualiza)
luego lo intente tambien cojer la idea pero no consigo nada.....(vamos por partes....)
de todas formas, repito, gracias
alguna otra sujerencia?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con datos enviados por mail

Publicado por jose maria (45 intervenciones) el 22/07/2014 19:27:54
bueno, tengo que medio excusarme, si funciona, cambie el nombre a unas variables en el anterior php y si se visualizan......
pero sige estando la cadena incompleta, se rompe en el primer espacio......

por otra parte, encontre por google este codigo:

<?php

// Inicializamos las variables
$tamano = 50; // tamaño máximo
$contador = 0;
$texto = 'Este es el texto que se cortará para que no ocupe más de 50 carácteres';

// Cortamos la cadena por los espacios
$arrayTexto = split(' ',$texto);
$texto = '';

// Reconstruimos la cadena
while($tamano >= strlen($texto) + strlen($arrayTexto[$contador])){
$texto .= ' '.$arrayTexto[$contador];
$contador++;
}
echo $texto;
?>

funciona tal cual, lo que hace es cortar la cadena por donde hay un espacio y despues la une, digo yo, se podria adaptar para enviar la informacion palabra por palabra (vamos el array) y luego montarla como hace este el el segundo php ¿verdad?
¿podriais ayudarme? yo no doy pie con vola....
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con datos enviados por mail

Publicado por jose maria (45 intervenciones) el 22/07/2014 19:47:52
se me olvido poner el link:

http://www.programacionweb.net/articulos/articulo/cortar-cadenas-de-texto-1/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Vainas
Val: 34
Ha aumentado su posición en 3 puestos en PHP (en relación al último mes)
Gráfica de PHP

problema con datos enviados por mail

Publicado por Vainas (262 intervenciones) el 23/07/2014 11:08:22
Vaya que mal. Ya te digo que a mi aqui me funciona. y en un servidor que tengo linux tambien lo he probado.

Lo unico ya es preguntar 2 cosas mas para mi:

Has probado con otros navegadores y pasa lo mismo? (chrome, firefox, ie).

Estas trabajando sobre Linux o sobre Windows (lamp, xampp, bitnami). Si dices que siempre te lleva esas variables al servidor quitando lo que hay despues del espacio puedo entender que pueda ser algo del apache.

El problema no es llevar la info por partes es que si yo en la casilla Importe 1 o Importe 2 meto un dato tal que asi: 23 34 34 54. Al dar a "Enviar" esto deberia viajar al servidor como una cadena y guardarse en la variable como tal, luego ya podrias aplicar a esa variable un intval() o un cast para que sea un entero y antes de eso podrias eliminar los espacios para que si hay valores separados por espacio los tome tambien en cuenta.

Yo la primera vez que ejecuto mi script obtengo esto:

1
2
array(0) {
}


La segunda vez ya obtengo los datos de la siguiente forma

1
2
3
4
5
6
7
8
9
10
11
12
array(5) {
  'comercio' =>
  string(12) "talleres zzz"
  'importe1' =>
  string(11) "23 34 34 54"
  'importe2' =>
  string(14) "99 100 191 195"
  'descripcion' =>
  string(41) "Una cualquiera que se me acaba de ocurrir"
  'enviar' =>
  string(6) "Enviar"
}

Pega que te envia cuando metes los datos en el formulario y le das enviar.

Saludos y a ver si lo arreglamos, no sera por no hacer pruebas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

problema con datos enviados por mail

Publicado por jose maria (45 intervenciones) el 23/07/2014 13:51:48
jajaja, totalmente de acuerdo, por pruebas que no sea.....
el navegador que utilizo es crome....
sobre las pruebas, en local lo hago mediante wamp server, cuando veo que va lo cuelgo en servidor......
wamp no me manda email, asi que esto me ocurre directamente al servidor.....
ayer segi investigando mas, en este link:

http://www.desarrolloweb.com/faq/59.php

comenta (a mi parecer) que es algo normal cuando mandamos datos por url, pero nuevamente, esto es algo que me queda grande, pero quiero aprender a solucionarlo....
gracias, segire probando lo que dices....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar