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
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.
<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.
<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.
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:
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:
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:
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
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.
vBulletin® v3.8.5, Derechos de autor ©2000-2013, Jelsoft Enterprises Ltd. Traducido por mcloud - vBhispano.com
Search Engine Friendly URLs by
vBSEO 3.6.0