last day (14 days later) » 

13:19
2
A: ¿Cómo redireccionar con PHP teniendo que ejecutar un código para obtener el enlace?

eferion Sé que header("location: tiene que estar al principio del código para ejecutarse Esa afirmación no es correcta. header tiene que ser lo primero que se le envía al cliente. Es decir, mientras no le envíes un solo byte al cliente puedes hacer todas las operaciones que consideres oportunas. L...

Gracias por tu respuesta! Pero en configurationofdatabase.php tengo solamente la conección con base de datos y el resto tampoco envío nada al cliente ... ¿qué significa que las rutas sean coincidentes?
@Lukas Me refiero a que las rutas relativas deben ser coincidentes entre producción y explotación... si no es así (por el motivo que sea) entonces la ruta relativa va a fallar y el navegador no va a redirigir correctamente
he puesto mi archivo de configurationofdatabase.php, a lo mejor los comentarios son los que causan el problema? Las rutas son coincidentes en produccion y local... alguna solucion? He comprobado y no se envia nada al cliente .. "Page source" me muestra blanco, sin nada.
@Lukas si te funciona en localhost entonces no es un problema de envío de datos al cliente... yo miraría el tema de las rutas de los ficheros
la ruta funciona de esta manera: el archivo question.php?id= al recibir un valor para el ID muestra un contenido u otro. El header simplemente envia al archivo question.php?id= .. y lo demas lo hace el archivo. El acceso al question.php?id= ... funciona, lo he comprobado, las rutas no estan definidas en un archivo aparte.
13:19
@Lukas Recuerda que después de enviar el header debes evitar enviar al cliente más información. Lo más seguro en ese caso es abortar la ejecución del PHP
He mentido, eso era local :D me sigue sin funcionar ... no se que pasa ...
@Lukas Genial. Voy a editar la respuesta para aclarar este último punto
Por favor, mira mi pregunta, la he editado al final ..
13:37
@Lukas ¿en qué momento incializas $pdo? no tienes ningún new
14:04
Está en el archivo configurationofdatabase:

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt);
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, FALSE);
@Lukas esos detalles deberías incluirlos en la pregunta ya que cualquier punto en el que se puedan enviar mensajes al cliente te va a fastidiar la redirección
No hace falta que publiques los datos de la conexión (te los puedes inventar o dejarlos en blanco)
Perdona, lo he borrado por error .. ahora lo pongo todo en la pregunta ..
Ya está editada
@Lukas en cualquier caso fíjate que inicializas la conexión con el modo ERRMODE_EXCEPTION
eso quiere decir que si se produce algun error en la conexión te va a arrojar una excepción que suele tener salida en el cliente
¿no estarás intentando una conexión localhost en producción, verdad?
ahaaaaa
si, lo estoy haciendo ...
como deberia cambiarlo ?
luego pongo esto:
Pues salvo que en desarrollo el servidor de bases de datos esté en localhost te va a fallar... tienes que poner la IP del servidor
14:09
ini_set('display_errors', 0);
ini_set('log_errors', 1);
Eso da igual... si se produce una excepción no tratada la ejecución del script se aborta y no llega al redirect
pero no me muestra ningun error ..
y lo de ini_set lo habia en-comentado
para ver si lo daba
Haz una prueba tonta... encierra la ejecución de la query en un try-catch y en el catch pon un mensaje de error... el que quieras y después de eso un exit
lo más probable es que se esté lanzando una excepción porque la conexión no está bien configurada y al decir que te oculte los errores la excepción se lanza... mata el script y no le indica nada al usuario
require_once('../configurationofdatabase.php');
$last_question = $pdo->query("SELECT MAX(product_id) FROM questions ;")->fetchColumn();
$question_id = $last_question + 1;
echo "location:../question.php?id=$question_id";
header("location:../question.php?id=$question_id");
Si hago error en SELECT me sale excerption
pero ahora he intentado esto que he puesto
hacer echo de enlace, me lo da bien
@Lukas ¿En localhost o en producción?
Yo digo de hacer la prueba en producción que es donde te está fallando...
14:21
en produccion
El problema es lo que te digo... estás lanzando una conexión en producción contra localhost y en producción no tienes una base de datos en localhost
o al menos tiene toda la pinta
tengo la base de datos, todo es correcto .. si borro todo lo que tengo despues de header tampoco me va ...
Si sustituyes el header por un mensaje cualquiera... ¿te sale dicho mensaje?
Sii me sale
Esto ya está un poco confuso. ¿Te importa editar la pregunta y añadir la información que le falta para trabajar tener los dos la misma versión?
@Lukas revisa mi mensaje anterior por favor
14:35
Ahora lo hago, gracias, ningun problema
ya está
@Lukas he editado tu pregunta porque la inicialización de pdo no estaba completa. revisa que así esté bien
Sii esta bien, gracias

last day (14 days later) »