Ayuda formulario y php

L

Hola,

tengo un formulario en el que hay un menu dropdown con las siguientes opciones

google
bing
yahoo

y al lado de ese menu, tengo un boton que cuando pinchas te envia a la url del buscador que tengas seleccionado (www.google.es etc..)

<option value="http://www.google.com">Google</option>

y la opcion del boton para que envie a la url es asi:

onclick="window.open(buscador.value,'newtab'+buscador.value)"

Hasta aqui todo perfecto, ahora por otro lado en un php estoy recogiendo los datos del formulario, $buscador=$_POST('buscador)

y cuando envio por correo los datos hago tal que asi;

Buscador usado: '.$buscador.'

Pues el problema que tengo, es que me muestra la URL. Es obvio, porque el value en el formulario es lo que recoge el $_POST, pero me gustaria saber si hay alguna manera de que me recoja el nombre a secas, Google, Bing... y no la url.

Sin tener ni idea de php o programacion web, pense que en el php podria hacer algo para que los datos que recoge $buscador que seria la web, lo convirtiese en el texto que yo quisiera y convertirlo en otra variable... algo asi como $nombrebuscador para ya meterlo en el correo con '.$nombrebuscador.'

Muchas gracias de antemano!

Kiroushi

¿Necesitas almacenar el número de clicks por buscador en una bdd o similar? Si no es así, no necesitas php para nada.

Usando jQuery como framework puedes hacerlo tan simple como:

$('#id-del-boton').click(function(e) {
e.preventDefault();
window.open($('#id-del-select').val(), 'nombre-ventana');
}
1 respuesta
L

#2 Con eso no necesitaria poner la opcion value en el formulario?

necesito prescindir de value="url" para que el $_post no me la recoja

Kiroushi

Pero es que no necesitas ningún php, no tienes que procesar información.

En tu html ya tienes escrita la url en cada value="...", por lo tanto, no necesitas un procesado de la información que te devuelva dicho valor; puedes cogerlo directamente usando javascript.

Como manejar el DOM es un poco lioso, te recomiendo que uses jQuery como framework.

En tu documento, incluyes en el <head> la librería, y luego metes el script donde te apetezca del documento (preferiblemente al final del <body>), algo así:

<script>
$(document).ready(function(){
  $('#id-del-boton').click(function(e) {
    e.preventDefault();
    window.open($('#id-del-select').val(), 'nombre-ventana');
  }
})
</script>
L

Si necesito el php, todo lo que escribe el usuario en el formulario lo envio a un correo y se postea en un foro. Y se me postea http://www.... en vez de Google o Yahoo.

Creo que me explique mal x'D

Lo que creo que me solucionaria el asunto, es convertir en el documento php la informacion procesada al texto que yo quiera, a ver si ahora me explico bien con esto xD

//Recogida de datos
$nombre=$_POST['nombre'];
$edad=$_POST['edad'];
$ciudad=$_POST['ciudad'];
$buscador=$_POST['buscador'];

//Cuerpo del Email
Nombre del usuario: '.$nombre.'
Edad: '.$edad.'
Ciudad: '.$ciudad.'
El buscador que selecciono: '.$buscador.'

El email tendria que leerse asi;

Nombre del usuario: Pepe
Edad: 21
Ciudad: Valencia
El buscador que selecciono: Google

pues me lo saca asi;

Nombre del usuario: Pepe
Edad: 21
Ciudad: Valencia
El buscador que escogio: http://www.google.com

#6 En el value, pongo la url entera para cuando presionan el otro boton de al lado les lleve a la web. Si de value pongo Google cuando presionen el boton de Ir! se les abrira una ventana en blanco en la que va a poner "google" en la barra de direcciones

Li3cht

Vamos a ver, a malas puedes hacer un split declarado por puntos (".") y así te quedas con el string de dentro que será google/bing... pero lo veo una tontería pudiendo poner de value Google o Bing únicamente en lugar de la URL entera.

1 respuesta
Kiroushi

Bueno, pues entonces usa la función $.post() y envías al .php la información procesada, y el window.open para abrir la ventana nueva.

Así de camino evitas tener que recibir un GET de vuelta, ahorras peticiones y aprendes a usar Ajax, que nunca está de más.

<script>
$(document).ready(function(){
  $('#id-del-boton').click(function(e) {
    e.preventDefault();
    $.post("direccion-del-php.php", function() {}).success(function() {
      window.open($('#id-del-select').val(), 'nombre-ventana');
    });
  }
})
</script>

http://api.jquery.com/jQuery.post/ <- Aquí tienes ejemplos de cómo señalar la variable data a enviar al post.

eXtreM3

Haz un switch en el php, según la url que pinches le asignas un valor u otro a $buscador.

1
L

Muchas gracias a todos!

switch($buscador){
	case "http://www.google.com":$buscador1 = 'Google';
		break;
}

:D

HaxeR

#1 Suponiendo que en los options siempre tengas urls y sin suponerlo, los datos deberías tratarlos siempre desde el lado del servidor. La opción del switch desde php es un poco cerdita :) sin ofender, hay funciones nativas de php que te leen y desglosan urls o si no siempre puedes tirar de expresiones regulares.

Para ahorrarte algo de trabajo, te dejo aquí con tu mismo código la solución en una sola linea y válida para cualquier url que pongas en los options:

 //Recogida de datos
    $nombre = $_POST['nombre'];
    $edad = $_POST['edad'];
    $ciudad = $_POST['ciudad'];
    $buscador = ucfirst(explode('.', str_ireplace('www.','',parse_url($_POST['buscador'],PHP_URL_HOST)))[0]);

//Cuerpo del Email
Nombre del usuario: '.$nombre.'
Edad: '.$edad.'
Ciudad: '.$ciudad.'
El buscador que selecciono: '.$buscador.'

Usuarios habituales

  • HaxeR
  • Lao_Tse
  • eXtreM3
  • Kiroushi
  • Li3cht