Foros del Web » Programando para Internet » PHP »

Código mal escrito

Estas en el tema de Código mal escrito en el foro de PHP en Foros del Web. Hola, Estoy haciendo una práctica de la universidad sobre PHP. La verdad es que no tengo ni idea de PHP pero el profesor nos lo ...
  #1 (permalink)  
Antiguo 12/05/2011, 06:25
 
Fecha de Ingreso: mayo-2011
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Código mal escrito

Hola,

Estoy haciendo una práctica de la universidad sobre PHP. La verdad es que no tengo ni idea de PHP pero el profesor nos lo ha dado toco masticado, menos mal. Así que después de estar ayer dándole vueltas y no conseguir nada recurro aquí.

Tengo una web en HTML y los códigos PHP facilitados por el profesor. Necesito hacer una tienda virtual desde nivel bajo. Uso wampserver como servidor y AbanQ para llevar el control de la tienda. El caso es que el código que me da error es:

<?php
session_start();
for ($i=1; $i<=$_POST['num_familias']; $i++)
{$valor=$_POST["familia"][$i]["descripcion"];
print ("<a href=\"/tienda/logica_presentacion/familia_productos.php?categoria=$valor\" style=\"text-decoration: none\">");
print ($valor);
print ("</a><br/>");
}
?>

Cuando abro mi web en lugar de mostrarme las familias de productos que tengo en mi base de datos me muestra:

"); print ($valor); print ("
"); } ?>


Por lo que he imaginado que sea algún error en el código facilitado. Los archivos .php a los que hace referencia ese código también los tengo en mi ordenador y se supone que funcionan ''se supone''. No los he puesto pues son del profesor y no sé si querrá que se publiquen por Internet. Lo que hacen básicamente (por lo que he buscando por google) es establecer la conexión con mi base de datos dándole la IP(localhost), el usuario(root) y la contraseña(que no tengo). También tiene otra sentencia que le digo cual es el nombre de la base de datos(miTienda).
...
$db=mysql_connect("localhost","root","");
mysql_select_db("miTienda",$db);
...

Lo que puse en rojo es porque he visto por Internet que le pasan ese parámetro pero en el código del profesor no viene incluido.

¿Qué puede ser chicos?

Gracias

Última edición por freezeblood; 12/05/2011 a las 06:34
  #2 (permalink)  
Antiguo 12/05/2011, 06:56
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 8 meses
Puntos: 58
Respuesta: Código mal escrito

Creo que deberías coger los apuntes y estudiarlos un poco mejor.

No tienes claro los conceptos cliente-servidor.
El php es un lenguaje de servidor, no lo puedes ejecutar en el cliente, por eso te sale lo que te sale.

Un saludo.
  #3 (permalink)  
Antiguo 12/05/2011, 07:13
 
Fecha de Ingreso: mayo-2011
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Código mal escrito

No tenemos apuntes. La asignatura consiste en la realización de tres prácticas: XML, HTML y PHP. Lo único que dice el guión es:
Realizar una tienda virtual en la que se diferencien las distintas capas: logica de datos, de negocio y de presentación.

He preguntado porque no tengo ni idea para hacerlo. Por internet lo explicarán muy bien pero debo hacerlo con ese código proporcionado por el profesor, no puedo usar ni más ni menos.

Quiero saber dónde está el fallo y entonces solucionarlo, si alguno podéis echarme una mano, gracias.
  #4 (permalink)  
Antiguo 12/05/2011, 07:19
 
Fecha de Ingreso: junio-2008
Mensajes: 165
Antigüedad: 16 años, 5 meses
Puntos: 6
Respuesta: Código mal escrito

Supongo que habras cerrado el tag de php, tambien prueba usando echo en vez de print, no se muy bien que pasa pero por probar no pierdes nada
  #5 (permalink)  
Antiguo 12/05/2011, 07:29
 
Fecha de Ingreso: mayo-2011
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Código mal escrito

He probado a usar el echo en vez de print y nada. Estoy pensando en que haga falta importar algo es decir, cuando en Java usas algún método debes hacer un import de la biblioteca donde se encuentra, ¿hay que hacerlo aquí? Puede que sea eso que no sepa el código lo que hace el echo o el print y por eso imprime código.

He buscado en el foro como usar el a href dentro de una etiqueta echo y he visto que lo hacen así:
echo '<a href="articulo.php?contenido=noticia&ID_Contenido= '.$row[ID_Contenido].'">'.$row[Nombre_Contenido].'</a>';

Si yo pongo eso en mi phpDesigner me pone que está mal escrito. ¿Cuál es el error entonces?
Gracias

Edito:

He estado poniendo en mi código:
<?php
if(session_start()){
echo "CORRECTO";
}
else{
echo "MAL";
}
?>
Y cuando abro mi web no sale ninguno de los dos mensajes, ¿qué me ocurre?

Última edición por freezeblood; 12/05/2011 a las 08:13
  #6 (permalink)  
Antiguo 12/05/2011, 08:55
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 14 años
Puntos: 48
Respuesta: Código mal escrito

Bueno ahi yo lo haria asi no me gusta mucho meter html dentro de php prefiero php dentro del html, continuo y estas seguro que la conexion a la DB funciona ? y la consulta que hacer la hace bien ?

Codigo como yo lo haria:
Código PHP:
<?php
session_start
();
for (
$i=1$i<=$_POST['num_familias']; $i++)
{
    
$valor=$_POST["familia"][$i]["descripcion"];
    
?>
    <a href="/tienda/logica_presentacion/familia_productos.php?categoria=<?=$valor?>" style="text-decoration: none">
    <?=$valor?>
    </a><br/>
    <?
}
?>
  #7 (permalink)  
Antiguo 12/05/2011, 09:27
 
Fecha de Ingreso: mayo-2011
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Código mal escrito

Gracias s00rk.

Poniendo ese código no me sale nada cuando abro la web en mi navegador, buena señal. No sé si está bien la BD conectada pues el profesor nos lo dejó todo montado en los ordenadores. De todas formas te digo como lo tengo puesto. Para acceder a la base de datos uso el AbanQ. Los datos que uso son:

Base de datos: miTienda
Usuario: root
Contraseña: (sin nada)
Servidor: localhost
Puerto: 3306

Uso el wampserver como servidor, con el que puedo acceder a las tablas de mi base de datos pinchando en phpMyAdmin. Las veo, veo las tuplas que le he metido, etc.

Ahora voy a ir mirando esos archivos *.php que se abren cuando los llama el HTML.

familia_productos.php
Código PHP:
<?php 
session_start
();    
$_POST['accion']=$_GET['categoria'];
include(
"/wamp/www/tienda/logica_datos/facturalux_productos.php");
include(
"/wamp/www/tienda/index.htm");
?>
Cuando se hace el include, ¿debo partir desde donde está situado el documento html que ha llamado a ese php? Es decir, mi html está fuera de la carpeta 'logica_datos'.

facturalux_productos.php
Código PHP:
<?php 
session_start
();
$nombre=$_POST['accion'];
//Conectar a  la base de datos
$db=mysql_connect("localhost","root",""); //yo he puesto el root
mysql_select_db("miTienda"); //yo he puesto miTienda porque mi bd se llama así
$query "SELECT * FROM familias WHERE descripcion='$nombre' ";
$result=mysql_query($query);
$familias[0]=mysql_fetch_array($result);
$result=$familias[0]["codfamilia"];
$query "SELECT * FROM articulos WHERE codfamilia=".$result." "
$result=mysql_query($query);
$num_result=mysql_num_rows($result);
for (
$i=1$i<=$num_result$i++)     //  ciclo para procesado
    
{$_POST[$i]=mysql_fetch_array($result);
    }
$_POST['num_productos']=$num_result;
mysql_close($db);
?>
La consulta SQL está bien. Quiero mostrar el contenido de la columna 'descripción' que está en la tabla familias.
Lo que hace lo demás código, no lo sé. No hemos dado teoría de PHP.

Edito:

Analizando el código de facturalux_productos.php he visto que ese código php no hace lo que realmente busco. Yo quiero imprimir todo el contenido de descripcion, columna de la tabla familias. Qué os parece esto:

Código PHP:
<?php 
session_start
();
//Conectar a  la base de datos
$db=mysql_connect("localhost","root","");
mysql_select_db("miTienda",$db);
$query "SELECT * FROM familias";
$result=mysql_query($query);
$num_result=mysql_num_rows($result);
for (
$i=1$i<=$num_result$i++)     //  ciclo para procesado
    
{$_POST["familia"][$i]=mysql_fetch_array($result);
    }
$_POST['num_familias']=$num_result;
mysql_close($db);
?>
Universidad de Granada...
  #8 (permalink)  
Antiguo 12/05/2011, 10:05
Avatar de s00rk  
Fecha de Ingreso: octubre-2010
Ubicación: Mexico
Mensajes: 238
Antigüedad: 14 años
Puntos: 48
Respuesta: Código mal escrito

Como o donde llenas esto ?
$_POST["familia"]

Y segun veo tu codigo seria asi:
Código PHP:
<?php 
session_start
();
//Conectar a  la base de datos
$db=mysql_connect("localhost","root","");
mysql_select_db("miTienda",$db);
$query "SELECT * FROM familias";
$result=mysql_query($query);
if(
mysql_num_rows($result))
{
  while(
$r mysql_fetch_object($result))
  {
    echo 
$r->familia;
  }
}else{
  echo 
"No se encontraron filas";
}
mysql_close($db);
?>
  #9 (permalink)  
Antiguo 12/05/2011, 10:06
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 8 meses
Puntos: 58
Respuesta: Código mal escrito

Hola freezeblood.

Vuelvo a repetir lo que te dije antes. El código está perfectamente. Lo que pasa es que lo estás ejecutando en la parte del cliente. Si ejecutas un archivo php en un navegador te van a salir esas cosas raras porque un navegador no entiende php. Un archivo php tiene que pasar primero por un servidor para que lo traduzca a html. Entonces ya lo puede enviar al cliente para que lo pueda abrir con un navegador.

Para comprobar que tienes bien instalado el servidor escribe en la barra de direcciones del navegador:

localhost

Así, tal cual. Si está todo bien te debería salir la página de inicio del servidor. Si no te sale nada o te da error es que no lo has instalado bien o no lo has conectado. Si te sale bien, entonces es que no estás accediendo bien al archivo.
Para acceder a un archivo que está en un servidor local debes poner en la barra de direcciones:

localhost/carpeta donde está el archvo php/archivo.php

Si el archivo estuviera colocado directamente en la carpeta por defecto del servidor sería:

localhost/archivo.php

Espero que te haya quedado un poco más claro el asunto.

Un saludo.

Última edición por Nexus10; 12/05/2011 a las 11:16
  #10 (permalink)  
Antiguo 12/05/2011, 12:03
 
Fecha de Ingreso: mayo-2011
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Código mal escrito

Cita:
Iniciado por s00rk Ver Mensaje
Como o donde llenas esto ?
$_POST["familia"]

Y segun veo tu codigo seria asi:
Código PHP:
<?php 
session_start
();
//Conectar a  la base de datos
$db=mysql_connect("localhost","root","");
mysql_select_db("miTienda",$db);
$query "SELECT * FROM familias";
$result=mysql_query($query);
if(
mysql_num_rows($result))
{
  while(
$r mysql_fetch_object($result))
  {
    echo 
$r->familia;
  }
}else{
  echo 
"No se encontraron filas";
}
mysql_close($db);
?>
Ese código lo que hace es que cuando yo selecciono una familia, busca los productos de esa familia, repito, no sé de php nada.

Hola Nexus10, he visto por internet que hay que configurar el httpd.conf para que el servidor sepa que los archivos html o htm tienen código php. Ya lo he hecho y se me ha corregido los errores, el código estaba limpio y funciona, ahora voy a ver por qué me salen algunos errores Warnings diciendo que ya hay una sesión iniciada.

Muchas gracias a todos, que gracias a vosotros nos motivamos y no dejamos las cosas por imposibles. Gracias enserio
  #11 (permalink)  
Antiguo 12/05/2011, 12:16
 
Fecha de Ingreso: mayo-2011
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Código mal escrito

¿Sabéis como ocultar los warnings? Resulta que yo tengo varios session_start() en el código de cada html y claro, cada vez que llega a uno pues como ya hay una session instanciada pues me sale el warning. ¿Puedo quitar esos session_start() sin problemas o los dejo?

Fix it:

Lo he arreglado comprobando si hay una sesión ya activa, si lo está, no se empieza:
if(!isset($_SESSION))
{
session_start();
}
  #12 (permalink)  
Antiguo 12/05/2011, 13:05
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 8 meses
Puntos: 58
Respuesta: Código mal escrito

Eso no es así.
Que yo sepa, session_start() debe aparecer al principio en TODOS los archivos php en los que se va a usar la variable de sesión. Yo siempre lo hago así y no tengo problema. Los warnings que te salen serán por otra cuestión. Pégalos aquí para ver si vemos donde está el problema.

El problema más típico con session_start() es que no puede haber nada que se imprima antes de la declaración de la función. Un simple espacio en blanco antes de la etiqueta <?php ya daría origen al warning. Es decir:

<?php
session_starat()
?>

No da warning. Pero:

(espacio en blanco)<?php
session_start()
?>

Sí da warning.

Chequea los archivos por si hubiera algún error de esos. Pega los warnings de todas formas, para verlos.

EDITO:
He buscado en internet sobre session_start() y he visto esto que no sabía.

Nota: Si en el php.ini se ha definido la variable session.auto_start = 1 se inicializa automáticamente la sesión en cada página que visita un usuario, sin que se tenga que hacer el session_start()

De todas formas, aunque se ponga session_start() en todas las páginas no debería salir warning, pienso yo

Última edición por Nexus10; 12/05/2011 a las 13:16
  #13 (permalink)  
Antiguo 12/05/2011, 15:00
 
Fecha de Ingreso: mayo-2011
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Código mal escrito

Mira ahora son notice en vez de warning:

( ! ) Notice: A session had already been started - ignoring session_start() in C:\wamp\www\tienda\interfaz\productos.htm on line 96
Call Stack
# Time Memory Function Location
1 0.0004 374176 {main}( ) ..\tienda.html:0
2 0.0145 414120 include( 'C:\wamp\www\tienda\interfaz\productos.htm' ) ..\tienda.html:121
3 0.0149 414280 session_start ( ) ..\productos.htm:96

Si los condiciono con el if no salen esos mensajes.

Ahora estoy con la siguiente parte de la practica, una vez que saco la familia y ya la imprimo, el usuario debe elegir una por ejemplo: detergente. Entonces se deben mostrar todos los productos de la familia detergente que tengo en mi bd.

Continúo en ello :D

No entiendo en PHP como hace este código,¿ qué valor toma nombre? ¿cómo o cuándo recibe 'Contacto' o 'carrito'?
Código PHP:
<?php 
$nombre
=$_POST['accion']; 
if (
$nombre=="Contacto")include("/wamp/www/tienda/interfaz/principal.htm");
elseif (
$nombre=="carrito")include("/wamp/www/tienda/interfaz/carrito.htm");
else include(
"/wamp/www/tienda/interfaz/productos.htm");
?>
  #14 (permalink)  
Antiguo 13/05/2011, 15:19
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 8 meses
Puntos: 58
Respuesta: Código mal escrito

Ese warning ocurre porque debes tener dos (o más) session_start() en el mismo archivo.
Seguramente estás utilizando en algún archivo sentencias include() para incluir código de otros archivos, y tanto en ese archivo como en el que se incluye estará puesto session_start(), con lo que se juntarían dos en el mismo archivo. Por eso con el if que has puesto se soluciona.

Con respecto a la otra cuestión, $nombre toma el valor de la variable $_POST. Esta variable es un array. Aquí están incluidos los datos que se envían desde un formulario. En alguna página tendrás un formulario con campos a rellenar o un menú con botones. Al enviar el formulario, los datos que has rellenado se guardan en la variable $_POST y en la página a la que has enviado el formulario los puedes rescatar.

Según el código que has puesto, seguro que será una serie de botones en la página de inicio para elegir donde quieres ir. El botón pulsado se guarda en $_POST y en ese código que has puesto se recupera que botón se pulsó y se hace una cosa u otra.

Lo que se envía al pulsar un botón es el value del botón, osea que tendrás algo así:

<input type="submit" name="accion" value="Contacto" />
<input type="submit" name="accion" value="carrito" />

Algo parecido a eso tendrás.
  #15 (permalink)  
Antiguo 15/05/2011, 03:29
 
Fecha de Ingreso: mayo-2011
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Código mal escrito

Cita:
Iniciado por Nexus10 Ver Mensaje
Ese warning ocurre porque debes tener dos (o más) session_start() en el mismo archivo.
Seguramente estás utilizando en algún archivo sentencias include() para incluir código de otros archivos, y tanto en ese archivo como en el que se incluye estará puesto session_start(), con lo que se juntarían dos en el mismo archivo. Por eso con el if que has puesto se soluciona.

Con respecto a la otra cuestión, $nombre toma el valor de la variable $_POST. Esta variable es un array. Aquí están incluidos los datos que se envían desde un formulario. En alguna página tendrás un formulario con campos a rellenar o un menú con botones. Al enviar el formulario, los datos que has rellenado se guardan en la variable $_POST y en la página a la que has enviado el formulario los puedes rescatar.

Según el código que has puesto, seguro que será una serie de botones en la página de inicio para elegir donde quieres ir. El botón pulsado se guarda en $_POST y en ese código que has puesto se recupera que botón se pulsó y se hace una cosa u otra.

Lo que se envía al pulsar un botón es el value del botón, osea que tendrás algo así:

<input type="submit" name="accion" value="Contacto" />
<input type="submit" name="accion" value="carrito" />

Algo parecido a eso tendrás.
Hola Nexus10.

Ya tengo solucionado todos los problemas (warning) que me lanzaban colocando un if en el código. También he entendido muy bien cómo funciona el $_POST aunque según he visto, la web no tiene ningún botón, solamente, el menú izquierdo con opciones como el carrito y las familias de productos que recupera de la bd.

Voy a seguir avanzando en la web porque ahora estoy intentando volcar el contenido de mi BD en una tabla html.

Gracias por todo, a tí y a todos.

Etiquetas: virtual, tiendas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:42.