¿Dudas en PHP?

Saludos soy nuevo programando con PHP, para tal caso tengo instalado, bajo windows 2003 server, PHP5, MySql5 con el servidor apache 2 (http://fredymendoza.myip.org/)
Para este efecto me estoy siguiendo del manual de:
http://www.webestilo.com/php/php07d.phtml
Acá tengo algunas dudas:
1. Al momento de ejecutar el ejem07d.phtml, en la parte de:
while($row = mysql_fetch_array($result)) {
printf("<tr><td>%s</td> <td>%s</td></tr>", $row["Nombre"], $row["Apellidos"]);
Me di cuenta que no arrojaba los registros de mi base de datos, por lo que cambie al siguiente código:
while($row = mysql_fetch_array($result))
{
echo"<tr>
<td>$row[1]</td><td>$row[2]</td><td>$row[3]
<a href=\"index.php?id=$row[0]\">Actualizar</a></td>
</tr>";
}
Y como ven este código si me muestra los registros de mi base de datos, mi pregunta ¿a qué se debe esto? ¿Es algún inconveniente del PHP5? ¿Qué creen que fue el problema?
2.El otro inconveniente que tengo, y que hasta ahora no puedo solucionar es que no puedo redireccionar, luego de hacer click en aceptar, a la página de ingreso de datos (pero si graba los datos normalmente)
El error sucede en esta parte del código:
header("Location: index.php");
Si lo elimino, no sale error en la página, pero se queda en la página que no deseo, y lo que quiero es que se redireccione. Este código lo deseo hacer solamente en PHP. Pregunta
¿Por qué no se puede redireccionar a mi página principal? ¿Es algún problema con la nueva version de php, la cual no soporta esta función(aunque no lo creo)?.
Muchas gracias
Atentamente
Fredy Mendoza
Respuesta
1
En php5 mysql_fetch_array te crea tanto un array numérico como un array asociativo. Lo único de lo que debes preocuparte si usas el array asociativo es que los nombres deben ser exactamente iguales a los que tengas en la tabla de tu base de datos que estés usando, respetando mayúsculas y minúsculas.
Si aun así no te funciona puedes probar lo siguiente:
while($row = mysql_fetch_array($result), MYSQL_ASSOC) {
De esta forma no puedes usar el array numérico, solo el asociativo. Si pones MYSQL_BOTH podrás usar los dos. Este último parámetro creo que es el que usa php por defecto pero ahora mismo no estoy seguro.
Respecto a header, pulsas sobre el botón aceptar y se envían los datos a la página procesar. Phtml. Antes de usar la función header no se tiene que enviar nada al navegador del cliente. Asegúrate que no has dejado ningún espacio al comienzo del archivo, ¿los primeros caracteres del archivo deben ser <?php, sin espacios ni lineas en blanco antes. Y durante la ejecución del código tampoco puedes mostrar ningún dato, no puedes hacer echo ni printf, ni nada que envíe algo al navegador cliente porque de lo contrario se envían las cabeceras de la página al navegador cliente y no se podrán modificar con la función header.
Un requisito de Location es que necesita una URI absoluta. Cuando pones index.php estás poniendo una URI relativa. En realidad este requisito no era tal en otras versiones porque la misma sentencia que tu has puesto funciona. Asegurate que index.php está en la misma ruta que el archivo donde se ejecuta header. Tras asegurarte que la ruta es correcta, si sigue sin funcionar prueba a crear una uri completa:
header("Location: http://" . $_SERVER['HTTP_HOST']
. dirname($_SERVER['PHP_SELF'])
. "/" . "index.php");
Gracias por tu pronta respuesta.
Ya probé con el código que me enviaste pero aun sigue sin funcionar.
te envio el codigo q yo empleo, para q, por favor, lo puedas chequear:
<?php
include("conex.phtml");
$link=Conectarse();
$nombre=$_GET['nombre'];
$apellidos=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values ('$nombre','$apellidos')",$link);
header("Location: index.php");
?>
Te doy muchas gracias por tu tiempo
Esta semana no voy a poder probar el código, pero aparentemente está correcto.
Si te falla la función header, tienes que revisar que en ese archivo, ¿justo antes de <?php no hay ningún espacio en blanco ni ninguna línea en blanco.
Otro punto donde puede estar el problema es en el archivo conex. Phtml. El archivo que estás intentando incluir está en formato html igual que todos, para que la función header no te de error tienes que asegurarte de cambiar a php antes de hacer cualquier otra cosa. Por esto tienes que asegurarte que el archivo conex. ¿Phtml también empieza por <?php sin tener ni líneas ni espacios en blanco antes.
Y otro punto menos probable donde pueda estar el fallo está en la función Conectarse(), debes asegurar que esa función no escriba nada mediante echo, print o cualquier función similar. Que no tenga código html en su interior para evitar que se envíen las cabeceras al navegador cliente y no se puedan modificar.
Si alguna parte del código que ejecutas (posiblemente mysql_query) devolviese un error y tienes configurado php para mostrar los errores, es posible que header no te funcione. Para evitar esto puedes poner lo siguiente:
@mysql_query("insert into prueba (Nombre,Apellidos) values ('$nombre','$apellidos')",$link);
Revisa esas cuestiones hasta que ponga a punto el servidor y pueda probar código.

4 respuestas más de otros expertos

Respuesta
1
A tu primera pregunta, te puedo responder diciendo que la utilización de printf estilo c, ya no es utilizada en php5. :) Cosas de programación
A la segunda pregunta:
Para poder hacer uso de header('Location:index.php'); hay que seguir unas normas muy sencillas.
1.- No se puede utilizar header, si han sido enviadas antes de esta otras cabeceras ( GMT, Refresh, TimeStamp, etc... )
2.- Antes de header(); no puede haber ninguna etiqueta html como salida del script o lineas en blanco que sean interpretadas por el navegador.
----
Como solución temporal te propongo otra más feucha pero que funciona también:
<?
echo "<script>document.location='index.php';</script>";
?>
Saludos amigo..
Dejame decirte que tu solución es EXCELENTE, me ayudo muchísimo en lo que deseaba hacer. Estas dentro de los expertos favoritos para mi.
Pero no deseo quedarme con la duda del otro código, así que te envío el código para que por favor puedas ver si esta bien implementada:
<?php
include("conex.phtml");
$link=Conectarse();
$nombre=$_GET['nombre'];
$apellidos=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values ('$nombre','$apellidos')",$link);
header("Location:index.php");
?>
Muchas gracias
El codifo que me has pegado:
<?php
include("conex.phtml");
$link=Conectarse();
$nombre=$_GET['nombre'];
$apellidos=$_GET['apellidos'];
mysql_query("insert into prueba (Nombre,Apellidos) values ('$nombre','$apellidos')",$link);
header("Location:index.php");
?>
En principio, esta bien, siempre y cuando la conexión a la base de datos sea la correcta.
Y luego te faltaría una cosilla:
Antes de redireccionar con cabeceras, cierra el link a la base de datos.
mysql_close($link);
Si te da fallo, mira si en la función conectarse seleccionas la base de datos que contiene la tabla prueba:
En tres, pasos, debes de hacer esto:
$link = mysql_connect($host,$user,$password);
mysql_select_db("miBaseDeDatos");
$query = "INSERT INTO .... ";
mysql_query($query,$link);
mysql_close($link);
Un saludo, y espero haberte ayudado de nuevo.
Siento haber tardado en responder, pero he estado de vaciones :)
Respuesta
1
1- No hay ningún problema con la sentencia... fíjate que debes colocar el nombre de cada columno tal cual está definido.
2- Seguramente te esta informando sobre la modificación de la información de cabecera. Tienes que evitar mostrar cualquier cosa en pantalla antes de un header...
Si es por presionar un botón hacelo mejor por javascript.
Respuesta
1
1.
Seguramente uno de los nombres no coincide entre la base de datos y la consulta.
Pero como lo has solucionado esta muy bien. Es más cómodo!
2.
Yo uso esa version y si que me deja redireccionar.
Intenta poner un enlace en html, de los de toda la vida.
Es decir:
<a href....index.php.....<\a>
Respuesta
1
Del 1 error puede ser el nombre en tu db, tu le pones "Nombre" y alo mejor debe de ser "nombre" todas en minúsculas.
Del error 2, el header solo funciona si no has mandado nada a la página... y nada es nada... una sola linea en blnaco puede ser suficuente para que el header no funcione.
Revisa tu código a ver si no hay algo... el error más común es este:
<?
bla....bla...
?>
¿Si te fijas antes del <? Hya una linea en blanco. Esta es suficiente para que el header no funcione.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas