Bonjour, je suis devant une énigme en PDO

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Sur certains serveurs d’hébergements mais pas tous....
php 7.0 et/ou php 7.01.33

1/ En positionnant les headers Location APRES l’exécution de la requête (insert, update, delete) les redirection ne fonctionnent pas,
par contre les requêtes s’executent normalement

if(!empty($_POST['modidentifiant']) etc ….) {

$insert = "INSERT INTO matable (id, champ1, champ2, champ3, etc …..) VALUES ('', 'value1', 'value2', 'value3', etc .....)";
$inserttable = Database::getInstance()->request($insert);

header("location: verlapage-de-destination.php");
}

2/ En positionnant les headers Location AVANT l’exécution de la requête (insert, update, delete) tout fonctionnent normalement
requete et redirection
if(!empty($_POST['modidentifiant']) etc ….) {

header("location: verlapage-de-destination.php");

$insert = "INSERT INTO matable (id, champ1, champ2, champ3, etc …..) VALUES ('', 'value1', 'value2', 'value3', etc .....)";
$inserttable = Database::getInstance()->request($insert);

}

Merci de votre aide, cordialement

3 réponses


Bonjour.
Pour commencer, si ton problème concerne la redirection, ton sujet n'a aucun rapport avec MySQL/PDO, mais avec le PHP, tu devris donc par conséquent déplacer ton sujet dans le forum PHP.
Ensuite, les redirections doivent être situées après tout code PHP, tu ne dois donc pas placer les redirections avant toute exécution de script.
Pour terminer, si selon certains cas la redirection ne s'effectue pas alors que le code précédent s'effectuant correctement et se situe dans une même condition par exemple, il te suffit par exemple d'utiliser exit, soit par exemple :

if (!empty($_POST['modidentifiant']) /* etc ... */) {
    $insert = "INSERT INTO matable (id, champ1, champ2, champ3, etc …..) VALUES ('', 'value1', 'value2', 'value3', etc .....)";
    $inserttable = Database::getInstance()->request($insert);
    header("Location: verlapage-de-destination.php");
    exit;
}

Et penses à reformater le code du contenu de ton post de manière à ce qu'il soit plus visible.

Merci pour la reponse
j'ai fait des test en mettant exit; et même la syntaxe suivante exit(header("location: verlapage-de-destination.php")); après la redirection mais rien ni à fait.... même testé avec un ob_start(); ob_end_flush(); là encore pas de redirection ...
J'ai peut être le début d'une piste, l'hébergeur utilise pour pdo-mysql :Client API version 10.1.37-MariaDB alors que la maquette du site qui est chez un autre hébergeur utilise pour pdo-mysql l'API mysqlnd 5.0.12-dev - mysqlnd 5.0.12-dev - 20150407
peut être il y a t'il une conséquence à cette différence....

Par contre et celà est quand même etrange, que la mauvaise syntaxe à savoir mettre le header avant l'execution de ma requete sql
fonctionne sans problème pour insert, update, delete et redirection .......

et même la syntaxe suivante exit(header("location: verlapage-de-destination.php"));

Cette syntaxe est totalement fausse, il ne faut passer aucune fonction en argument dans la fonction exit, je t'ai pourtant donné un exemple.