PDA

Ver la Versión Completa : Ayuda php consulta condicional MySQL


OFFICERTOM
04-ene-2012, 10:48
Hola amigos,

Estoy preparando una página donde el visitante pueda introducir su código postal (CP) y comprobar si existe servicio de entrega a domicilio en su CP. A tal efecto he creado una base de datos con los CP donde SI esta el servicio disponible.

La página con el FORM es:

<form action="consulta_cp.php" method="post"> Codigo Postal <input name="cp" type="varchar" /> <input type="submit" value="Enviar" /> </form>

Este me lleva a "consulta_cp.php" que hace la consulta sobre la BBDD de los CP. Si existe el CP introducido por el visitante se le redirige a la tienda sino a otra página donde se le indica que en su CP no hay servicio. Este es "consulta_cp.php":

<?php
//Connect To Database
$hostname='bdconsulta2012.hostedresource.com';
$username='bdconsulta2012';
$password='*******';
$dbname='bdconsulta2012';
$usertable='bdconsulta2012';
$yourfield = 'cp';

mysql_connect($hostname,$username, $password) OR DIE ('No ha sido posible contactar con nuestra base de datos. Le rogamos vuelva a intentarlo más tarde. Gracias');
mysql_select_db($dbname);

$query = 'SELECT * FROM ' . $usertable WHERE cp = "cp_user";
$result = mysql_query($query);
if($result)
{
("href:/magento/express/?___store=default");
}else
{
include("/magento/no-servicio/?___store=default");

}
?>

Pues bien, de momento me da ERROR de sintaxis en la línea del $query. Tampoco se si la acción condicional de redireccionamiento a la tienda es correcta.

¿Alquien puede ayudarme?

hyperwin
04-ene-2012, 12:35
Te hace falta un punto y una comilla, también debes reemplazar "cp_user" por el valor enviado por el usuario, para ello debes usar $_POST, consulta los siguientes ejemplos

http://www.webestilo.com/php/php09b.phtml

$query = 'SELECT * FROM ' . $usertable . ' WHERE cp = "cp_user";

OFFICERTOM
04-ene-2012, 14:03
<?php
//Connect To Database
$hostname='bdconsulta2012.hostedresource.com';
$username='bdconsulta2012';
$password='*******';
$dbname='bdconsulta2012';
$usertable='bdconsulta2012';
$yourfield = 'cp';

mysql_connect($hostname,$username, $password) OR DIE ('No ha sido posible contactar con nuestra base de datos. Le rogamos vuelva a intentarlo más tarde. Gracias');
mysql_select_db($dbname);

$query = 'SELECT * FROM' .$usertable.' WHERE cp ="cp_user";
$result = mysql_query($query);
if($result)
{
("href:?/magento/express/?___store=default");
}else
{
include("?/magento/no-servicio/?___store=default");

}
?>

Pues nada. Lo he corregido con lo que me has dicho y me da el siguiente error en la línea 13 que es la del $query:

Warning: Unexpected character in input: ''' (ASCII=39) state=1 in /home/content/96/8254996/html/magento/belnature/consulta_cp.php on line 13

Parse error: syntax error, unexpected T_STRING in /home/content/96/8254996/html/magento/belnature/consulta_cp.php on line 13


El valor que me da el usuario es "cp_user".

¿Qué c!!o puede ser?. Gracias

vicram
04-ene-2012, 14:53
si el valor cp_user es el q recibes desde el formulario has de recibilo desde POST


$cp_user = $_POST['cp_user'];

$query = 'SELECT * FROM' .$usertable.' WHERE cp ="'. $cp_user.'"';

OFFICERTOM
04-ene-2012, 19:21
Gracias vicram.

Ahora ya no me da error en el query pero no me va en ninguno de los casos de la condicional a las respectivas páginas que yo quiero, simplemente se queda la pantalla en blanco aparcada en la página "consulta_cp.php".

El código del formulario es:

<form action="consulta_cp.php" method="post"> Codigo Postal <input name="cp" type="varchar" /> <input type="submit" value="Enviar" /> </form>

El código de "consulta_cp.php" tal como ha quedado con vuestras correcciones es:

<?php
//Connect To Database
$hostname='bdconsulta2012.db.hostedresource.com';
$username='bdconsulta2012';
$password='*******';
$dbname='bdconsulta2012';
$usertable='bdconsulta2012';
$yourfield = 'cp';

mysql_connect($hostname,$username, $password) OR DIE ('No ha sido posible contactar con nuestra base de datos. Le rogamos vuelva a intentarlo más tarde. Gracias');
mysql_select_db($dbname);

$cp_user = $_POST['cp_user'];
$query = 'SELECT * FROM' .$usertable.' WHERE cp ="'. $cp_user.'"';
$result = mysql_query($query);
if($result)
{
("href:?/magento/express");
}else
{
("href:?/magento/no-servicio");

}
?>

Estoy más cerca pero algo todavía falla.

vicram
04-ene-2012, 21:27
<form action="consulta_cp.php" method="post"> Codigo Postal <input name="cp" type="varchar" /> <input type="submit" value="Enviar" /> </form>

el campo input tiene distinto identificador

<input name="cp_user" type="varchar" />

o sea al recibir el dato tu mandas cp y no cp_user que es el que recibes

OFFICERTOM
05-ene-2012, 11:59
Perdona Vicram, había puesto una versión antigua del formulario.

La versión con la que estoy trabajando es esta y concuerda con lo que tu me dices:

<form action="?/consulta_cp.php" method="post"> Código Postal<input name="cp_user" type="varchar" /> <input type="submit" value="Enviar" /> </form>

Por lo tanto debe haber algo mal en "consulta_cp.php"que me da el error que describo en mimensaje anterior.

Ya podéis perdonar por lo plasta o ignorante que soy.

vicram
05-ene-2012, 15:18
<form action="?/consulta_cp.php" method="post"> Código Postal<input name="cp_user" type="varchar" /> <input type="submit" value="Enviar" /> </form>

en el input el type="text" no varchar

son cosas basicas ..... hay q estudiar o leer un poco mas

OFFICERTOM
05-ene-2012, 21:07
Gracias. Tienes toda la razón y de hecho he buscado y buscado, pero sigue sin funcionarme. :-(

OFFICERTOM
05-ene-2012, 21:55
Debo tener algún fallo en la condicional porque introduzca el CP que meta me va siempre a la página "?/magento/no-servicio" de no servicio disponible.

El php lo tengo así:

<?php
//Connect To Database
$hostname='bdconsulta2012.db.hostedresource.com';
$username='bdconsulta2012';
$password='*******';
$dbname='bdconsulta2012';
$usertable='bdconsulta2012';
$yourfield = 'cp';

mysql_connect($hostname,$username, $password) OR DIE ('No ha sido posible contactar con nuestra base de datos. Le rogamos vuelva a intentarlo más tarde. Gracias');
mysql_select_db($dbname);

$cp_user = $_POST['cp_user'];
$query = 'SELECT * FROM' .$usertable.' WHERE cp ="'. $cp_user.'"';
$result = mysql_query($query);
if($result)
{
header("Location: ?/magento/express");
}else
{
header("Location: ?/magento/no-servicio");

}
?>

Lo veis por algún lado ? Gracias.


:golpe::golpe::golpe::golpe::golpe::golpe:

OFFICERTOM
11-ene-2012, 08:56
Alguien que me pueda echar una mano con el post anterior? porque estoy atascado. Gracias.

vicram
12-ene-2012, 18:12
1.- he visto q en la consulta no dejas espacio entre FROM y la variable $usertable

2.- a veces no se porque preguntar por $result directamente produce errores, yo suelo hacerlo por si devuelve 1 o mas valores por el total de registros devueltos

quedaria asi:


$query = 'SELECT * FROM ' .$usertable.' WHERE cp ="'. $cp_user.'"';
$result = mysql_query($query);
if(mysql_nums_rows($result)>=1) {
// recibimos que existe al menos 1 registro con esa consulta
header("Location: ?/magento/express");
} else {
header("Location: ?/magento/no-servicio");
}

OFFICERTOM
12-ene-2012, 18:22
Gracias Vicram

Me da el siguiente error:

Fatal error: Call to undefined function mysql_nums_rows() in /home/content/96/8254996/html/magento/consulta_cp.php on line 15

La linea 15 es: if(mysql_nums_rows($result)>=1) {

Lo siento pero sigo sin ver el error.

ideasmultiples
12-ene-2012, 18:37
mysql_nums_rows() esta mal es mysql_num_rows.

Busca en los manuales de php, hay tienes todas las funciones que necesites.

Creo que este tipo preguntas te la contestarían antes en un foro de php-programación.

Recuerda que eso es un foro sobre hosting y tu pregunta es una pregunta sobre desarrollo y programación en php....

:cool:

Osiris
12-ene-2012, 19:11
Hola, no has intentado usar ajax para este tipo de cuestiones, digo, no tengo nada en contra de php. Pero ajax a veces puede ser una buena opcion.

Otra cosa, estas usando mysql de php. Tambien puedes usar mysqli.

Es igual, solo cambian algunas cosillas.

Lo que necesitas es esto:

if ($result){
if(mysql_num_rows($result)>0){
//a donde quieras ir
}
else{
// la otra pagina
}
}

espero te sirva

OFFICERTOM
12-ene-2012, 19:25
Gracias a todos por vuestra exquisita paciencia porque creo que mi inexperiencia aburre a cualquiera :sho:, pero esto sigue sin irme.

Ahora todo el script lo tengo así:

<?php
//Connect To Database
$hostname='bdconsulta2012.db.8254996.hostedresourc e.com';
$username='bdconsulta2012';
$password='**********';
$dbname='bdconsulta2012';
$usertable='cp';
$yourfield = 'cpserv';

mysql_connect($hostname,$username, $password) OR DIE ('No ha sido posible contactar con nuestra base de datos. Le rogamos vuelva a intentarlo más tarde. Gracias');
mysql_select_db($dbname);
$cp_user = $_POST['cp_user'];
$query = 'SELECT * FROM '. $usertable.' WHERE cpserv ="'. $cp_user.'"';
$result = mysql_query($query);
if ($result){
if(mysql_num_rows($result)>0){
// recibimos que existe al menos 1 registro con esa consulta
header("Location: ?/magento/postal/");
}else {
header("Location: ?/magento/no-servicio/");}
}
?>

Y meta el valor de CP que meta, va siempre a la página web señalada para la condicional FALSA (?/magento/no-servicio/)

:eek::eek::eek::eek:

Osiris
12-ene-2012, 19:41
Pero ya funciona???

Esto de perdido es buena señal.

Bueno, ahora has pruebas.

Has un respaldo de tu codigo.

Usa este:


<?php
//Connect To Database
$hostname='bdconsulta2012.db.8254996.hostedresourc e.com';
$username='bdconsulta2012';
$password='**********';
$dbname='bdconsulta2012';
$usertable='cp';
$yourfield = 'cpserv';

mysql_connect($hostname,$username, $password) OR DIE ('No ha sido posible contactar con nuestra base de datos. Le rogamos vuelva a intentarlo más tarde. Gracias');
mysql_select_db($dbname);
$cp_user = $_POST['cp_user'];
// imprime lo que enviaste del formulario
echo $cp_user;
$query = 'SELECT * FROM '. $usertable.' WHERE cpserv ="'. $cp_user.'"';
$result = mysql_query($query);
if ($result){
if(mysql_num_rows($result)>0){
//vamos a imprimir en una tabla los resultados de la consulta
echo "<table>";
//con el siguiente while mostraras cada una de las filas que encontro en la consulta
//imprimira solamente el primer campo de la tabla
while($fila = mysql_fetch_array($result)){
echo "<tr><td>$fila[0]</td></tr>";
}
echo "</table>";
}else {
echo "no se encontro nada";
}
?>

Bueno, pruebalo, y comenta tus resultado.

Espero no haberme equivocado, ya que lo escribi por aqui.

OFFICERTOM
12-ene-2012, 20:27
PERFECTO OSIRIS!!!:aprueba::aprueba::aprueba:

Funciona, imprime el valor dos veces si lo encuentra o imprime "no se encontró nada" si el valor no está en la tabla, luego la consulta y la condicional van bien.

Lo que no sé es cómo modificar el código para que en el caso de que encuentre el valor vaya a la web "?/magento/store" o en el caso de que no lo encuentre vaya a la web "?/magento/no-servicio".

:afirmar:

Osiris
12-ene-2012, 21:51
ok, bueno, ya lo ultimo que queda es reedireccionar a las paginas que querias.

basta con que reemplaces el codigo dentro del if asi:

header('Location: pagina.php');

esto siempre y cuando la pagina este en el mismo directorio.

igualmente con el else.

Pruebalo a ver si te sirve.

OFFICERTOM
12-ene-2012, 22:36
Ya funciona. Gracias Osiris. Un millón de gracias. Llevaba con esto atascado casi dos semanas. Voy a publicarlo como ha quedado por si a algún otro le sirve.

Se trata de un script que recibe un Código Postal introducido por el cliente en un formulario y que le lleva a una página web o a otra según exista el servicio de entrega o no en su CP.

El formulario es el siguiente:

<h3>Introduzca por favor el código postal de la direccion donde desea que le hagamos la entrega:</span></h3>

<h3><form action="?/consulta_cp.php" method="post"><br />Código Postal</span> <input name="cp_user" type="text" /> <input type="submit" value="Enviar" /> </form></h3>

El script ha quedado así:

<?php
//Connect To Database
$hostname='bdconsulta2012.db.8254996.hostedresourc e.com';
$username='bdconsulta2012';
$password='******';
$dbname='bdconsulta2012';
$usertable='cp';
$yourfield = 'cpserv';

mysql_connect($hostname,$username,$password) OR DIE ('No ha sido posible contactar con nuestra base de datos. Le rogamos vuelva a intentarlo más tarde. Gracias');
mysql_select_db($dbname);
$cp_user = $_POST['cp_user'];
$query = 'SELECT * FROM '. $usertable.' WHERE cpserv ="'. $cp_user.'"';
$result = mysql_query($query);
if ($result){
if(mysql_num_rows($result)>0){
header("Location: ?/express");
}else {
header("Location: ?/no-servicio");
}
}
?>

Una vez más gracias. Espero que sirva a más gente.

GRACIAS !!!:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D:-D

Osiris
12-ene-2012, 22:53
De nada, un consejo, si vas a seguir con php puro, pues te recomiendo que cheques la libreria mysqli, es muy similair a mysql, por no decir igual, ya que si varia un poco.

Viene incorporada en php 5, creo.

Que bueno que te sirva, saludos.