[POSTGRES-PHP] Recoger datos de consulta a BD

TeKaNeO

Hola a todos:

Desde hace una semana o así estoy realizando un proyecto en base a una web en PHP al estilo de las típicas de compras con carrito y demas, y me he atascado en algo que creo que es sencillo para quien medio entienda de PHP pero que no lo consigo sacar.

El problema viene a raiz de que al realizar una consulta a la BD de posgres, esta me devuelve los datos en forma de filas-columnas correctamente al PHP pero claro... me los muestra en donde le da la gana. Con "donde le da la gana" me refiero a que lo mismo te lo muestra arriba a la izq. de la web la tabla con los datos devueltos y claro... esto no me sirve. Lo que necesito es que por ejemplo, pongamos un ejemplo de consulta:

SELECT * FROM productos WHERE id = $idprod.

Supongamos que me devuelve 5 filas iguales ¿vale? Entonces mi idea es que esas filas de cada producto devuelto me la envie a un textbox de HTML, no se si me explico, en vez de que me lo muestre "a pelo" donde le da la gana en forma de tabla en el PHP, me pille por ejemplo:

  • El parámetro ID del prod en una caja textbox.
  • El parámetro Nombre en en otro textbox.
  • El parámetro Precio en otro textbox.
    etc...

... a modo de que quedaria algo así:

ID      NOMBRE   PRECIO

[0001] [Cuetara] [ 30 ]
[0002] [Principe] [ 20 ]

En el PHP tengo toda la estructura de como quedaría el listado de los productos pero mi problema es como coger cada parámetro de ese producto y colocarlo en una caja (imagino que cada caja/textbox deberá tener una ID o algo que la distinta).

Aprovecho este post para preguntar otro tema respecto al PHP, a ver. ¿Existe algun tutorial que me explique como hacer una especie de "carrito de la compra"? Ya sabeis, el típico de las webs de compras que van saliendo los productos que vas adquiriendo y tal y al final le das a comprar y sale el resultado de la factura y bla bla bla. He creado para ello una tabla en postgress que va rellenandose (o mejor dicho ira rellenándose porque no lo he probado aun) con los productos que va comprando cada cliente distinguiendose cada pedido por ID del cliente, pero claro... no me "entra en la cabeza" como implementarlo en PHP. Me vendria de lujo algo que me de una idea si pudiera ser :)

Perdon por el tostón pero estoy con un proyecto final y me esta dando un poco de dolor de cabeza xD

Muchas gracias a quien pueda echarme una manilla :P

Saludos^^

javithelong

El carrito de la compra lo explican en cualquier tutorial de php donde hablen de sesiones, buscalo, porque todas las webs tienen el mismo ejemplo.

En cuanto a lo de formatear la salida, es facil. Haces un bucle para cada resultado devuelto, y vas metiendo los campos donde quieres. Con textbox no se a que te refieres, si lo quieres en tablita y tal, pos tabla en plan:

echo ("<tr><td>$consulta[id]</td><td>$consulta[nombre]</td></tr>");

PD: No se si es esto lo que pedías, sino explicate un poco mejor, que no me entero xD

SeiYa

Yo no tengo ni puta idea de como se devuelven las consultas de una BBDD PostgreSQL pero seguro que hay una forma de hacerlo como con mysql...

Toma:

$conn = pg_connect("host=localhost dbname=carrocompragitanodemierda");
$result = pg_exec($conn, "SELECT nombre, precio FROM productos WHERE id = $idprod.");
while ($row = pg_fetch_array($result))
{
echo " $row[nombre] cuesta $row[precio] euros, no lo compres que está caducao";
}

TeKaNeO

Estoy testeando con lo que habeis dicho y si, es como se reciben datos desde PostgreSQL a PHP, es como MySQL pero con un lavado de cara en nombre :P

El caso es que no sabia que se devolvia en modo de array (soy bastante novato en PHP xD ) por lo que es como comentais, si . Muchas gracias por las respuestas :)

Aprovecho para preguntar otra cosa a ver, es sobre las sesiones. He leido bastante sobre ellas pero no me termino de aclarar:

Por ejemplo yo tengo una zona de web que es de login y tal, el usuario mete user/pass y todo correcto, accedo a bd, el user/pass es válido y da acceso a otra web. Hasta ahi todo correcto. El problema viene al acceder a otra zona de la web... ¿cómo se que ese usuario está ya logueado? Se que es con sesiones pero perdonarme si no lo entiendo ese tema pero no me termino de aclarar como decirle a la web "oye que el usuario tal esta logueado, no le pidas que se loguee en esta zona de la web".

¿Hay alguna manera de que al entrar en otra zona de la web, esta reconozca a un usuario como logueado? Se que existen las cookies y las session_start() pero si alguien me lo puede explicar para "novatos muyyyyyyyy novatos" se lo agradeceria.

El caso es que yo he estado montandome el sistema de login durante estos 3 dias, es por donde voy pero me surgen mil dudas xD me leo mil manuales, avanzo pero este tema es básico para avanzar en mi proyecto :P

Un saludo a todos^^

SeiYa

Al principio de cualquier php que quieras usar con sesiones:

session_start();

Cuando se loguee correctamente le haces:

$_SESSION[login] = 1;

Y preguntas en las demás (habiendo puesto el session_start) si $_SESSION[login] == 1.

Básicamente es un array en el que metes lo que quieras.

Puede ser $SESSION[login] $SESSION[nombreusuario] $_SESSION[logeao] ... como quieras.

Es bastante fácil ;)

TeKaNeO

Mmm bien mas o menos lo entiendo, pero a ver si entiendo una cosa:

yo en la web de login justo cuando me de user/pass valido hago el $_SESSION[login] = 1, donde login es el nombre de usuario por ejemplo.

Ahora en el resto de webs, al hacer:

session_start();
if $_SESSION[login] == 1

<resto de la web>

else


<pantallazo de logueese>

Lo que no se es, ¿como sabe el resto de webs que ese SESSION es 1? no se si me explico, ¿ $_SESSION[login] = 1 es una variable global que se lee en cualquier php al hacer:

session_start();
if $_SESSION[login] == 1

y que sabe que "login" tiene acceso válido a esa web?

SeiYa

"yo en la web de login justo cuando me de user/pass valido hago el $_SESSION[login] = 1, donde login es el nombre de usuario por ejemplo."

Nooo, tu lo llamas $_SESSION[login] = 1; y entre corchetes pones login tal como está.

Si quieres que tenga otro nombre, pues que tenga otro nombre.

$_SESSION[login] contendrá 1 si ese usuario está logeado en todas las páginas en las que exista un session_start();

Vamos, que $_SESSION[login] es una variable GLOBAL para todas las páginas e INDEPENDIENTE para cada usuario, no necesitas llamarla de manera diferente, lo que se suele hacer es, o yo por ejemplo almaceno.

$SESSION[usuario] = "nombredeusuariologeado";
$SESSION[id] = "iddelusuariologeado";

Y si trabajas con más datos por ejemplo:

$SESSION[categoria];

$SESSION[equipo];

Cosas así las que quieras ...

Si quieres guardar más datos, cojonudo, cuando se deslogueen destruyes su session y queda vacío, cuando esté logueado contendrá datos.

Pongo en el nombre de cada variable session el "" porque a veces tengo problemas con el register globals (a pesar de tenerlo bien xD) y $SESSION[usuario] se confunde con $usuario y cosas así xD

Un saludo.

Soltrac

Lo q tienes q hacer es ...

Cuando logueas, pones q la session del login sea = 1, pero solo cuando logueas, en los otros caso no existira o valdra 0 (eso no lo se, pq yo no programo en php).

Ya a partir de ahi se comporta como una variable global. Simplemente es comprobar q el login = 1 porque solo valdrá 1 cuando el usuario haya hecho login

Lo entiendes?

Por supuesto, dentro de las session puedes meter todo lo q te de la gana. Evidentemente, si haces un carrito de la compra, tendras q ir guardando el carrito de la compra en una variable de la session, pero esto ya mas adelante si lo necesitas te lo explico mas trankilamente :D

javithelong

Digamos que una sesión es una zona de memoria en el servidor. Se diseñó así para poder pasar datos entre distintas páginas (sin tener que estar codificandolo en la url) y tener así mucha más privacidad.

Así pues, cuando entras en una web, puedes crear una sesión, y ahi meter 'variables' con lo que quieras.

La forma de validar la sesión te la han explicado bastante bien arriba, y si quieres más seguridad que un simple campo a 1, metes en la sesión una variable con el login y otra con la contraseña, te haces una funcioncita php en plan compruebaLogin, llamándola en cada web distinta, y que compruebe en la base de datos si el usuario y contraseña son correctos.

El carrito de la compra aquel, simplemente metiendo datos en variables de la sesión, tienes todo resuelto.

Si tienes más dudas...

Usuarios habituales

  • javithelong
  • Soltrac
  • SeiYa
  • TeKaNeO