web-dev-qa-db-fra.com

en-tête ne fonctionne pas dans mon code php

j'ai ce code, pourquoi mon en-tête ne fonctionne pas? C'est une forme de mise à jour, d'édition et de suppression de pages dans mon panneau de configuration ... et j'ai un fichier index.php dans le même dossier que form.php. ..n'importe quelle aide s'il vous plaît? () J'ai essayé de mettre l'en-tête après l'édition et la suppression ... et toujours aller à la page de formulaire et non à l'index ...

<?php
include "../../includes/site_includes.php";
//send
if ((isset($_POST["send"])) && ($_POST["send"] == 1)) {
    $pageid = $_POST["page_id"];
    $pagetitle = $_POST["page_title"];
    $nameinmenu = $_POST["page_menu_name"];
    $nameinurl = $_POST["page_name_url"];
    $link = $_POST["page_link"];
    $picture = $_POST["page_pic"];
    $desc = $_POST["page_desc"];
    $content = $_POST["page_content"];
}
if ((isset($_POST["act"])) && ($_POST["act"] == "add")) {
    $sql = insertpage();
    if ($result = $mysqli->prepare($sql)) {
        $result->bind_param("sssssss", $pagetitle, $nameinmenu, $nameinurl, $link, $picture, $desc, $content);
        $result->execute();
        $result->store_result();
        $rows = $result->num_rows;
    }
}
////edit
if ((isset($_GET["act"])) && ($_GET["act"] == "edit")) {
    $sql = getfrompages();
    if ($result = $mysqli->prepare($sql)) {
        $rekza = $_GET["id"];
        $result->bind_param("i", $rekza);
        $result->execute();
        $result->store_result();
        $rowsZ = $result->num_rows;
    }
    if ($rowsZ > 0) {
        $row = fetch($result);
        $pageid = $row[0]["page_id"];
        $pagetitle = $row[0]["page_title"];
        $nameinmenu = $row[0]["page_menu_name"];
        $nameinurl = $row[0]["page_name_url"];
        $link = $row[0]["page_link"];
        $picture = $row[0]["page_pic"];
        $desc = $row[0]["page_desc"];
        $content = $row[0]["page_content"];
    }
}
if ((isset($_GET["act"])) && ($_GET["act"] == "delete")) {
    $thedelid = $_GET["id"];
    $sql2 = delpage();
    if ($result2 = $mysqli->prepare($sql2)) {
        $result2->bind_param("i", $thedelid);
        $result2->execute();
        $result2->store_result();
        $rowsZ2 = $result2->num_rows;
    }
}
header('location: index.php');
exit();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> pages add </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
 </head>

 <body>
<form method="post" action="">
        <table>
            <tr>
                <td style="font-weight:bold;">title</td>
                <td><input type="text" name="page_title" value="<?=$pagetitle?>" /></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">name in menu</td>
                <td><input type="text" name="page_menu_name" value="<?=$nameinmenu?>" /></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">name in url</td>
                <td><input type="text" name="page_name_url" value="<?=$nameinurl?>" /></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">link</td>
                <td><input type="text" name="page_link" value="<?=$link?>" /></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">picture</td>
                <td><input type="text" name="page_pic" value="<?=$picture?>" /></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">description</td>
                <td><textarea name="page_desc"><?=$desc?></textarea></td>
            </tr>
            <tr>
                <td style="font-weight:bold;">content</td>
                <td><textarea name="page_content"><?=$content?></textarea></td>
            </tr>
            <tr>
                <td colspan="2">
                <input type="hidden" name="send" value="1" />
                <input type="hidden" name="act" value="<?=$_GET["act"]?>" />
                <input type="hidden" name="page_id" value="<?=$pageid?>" />
                <input type="submit" value="add" /></td>
            </tr>
        </table>
</form>
 </body>
</html>

résolu: avec @ Mihai Iorga code i ajouté ob_start ();

12
michael

C'est parce que vous avez une sortie:

?>
<?php

résulte en une sortie de ligne vide.

header () doit être appelé avant toute sortie réelle, soit par des balises HTML normales, des lignes vides dans un fichier ou par PHP

Combinez tous vos codes PHP et assurez-vous de ne pas laisser d'espaces au début du fichier.

également après header('location: index.php');, ajoutez exit(); si vous avez d'autres scripts ci-dessous.

Déplacez également votre en-tête de redirection après la dernière if.

24
Mihai Iorga

Essayez d’ajouter ob_start(); en haut du code, c'est-à-dire avant l'instruction include.

32
air4x

Supprimer l'espace

Correct: entête ("Location: home.php"); ou en-tête ("Emplacement: home.php");

Incorrect: en-tête ("Location: home.php");

Supprime l'espace entre Location et: -> header ("Emplacement ( supprime l'espace ): home.php");

6
JavaFWS

La fonction ob_start () active la mise en mémoire tampon de la sortie. Tant que la mise en mémoire tampon de sortie est active, aucune sortie n'est envoyée à partir du script (autres que les en-têtes). La sortie est stockée dans une mémoire tampon interne. Donc, le navigateur ne recevra aucune sortie et l'en-tête fonctionnera. Nous devons également nous assurer que header () est utilisé en haut du code.

5
Suyash Jain

utilisez simplement ob_start(); avant d'inclure la fonction, cela vous aidera

5
subindas pm

J'utilise le code suivant et cela fonctionne très bien pour moi.

if(!isset($_SESSION['user'])) {
       ob_start();
       header("Location: https://sitename.com/login.php");
       exit();
} else { 

// my further code 

}
2
Hemi

Il m'a fallu un certain temps pour comprendre ceci: mon fichier php était encodé en UTF-8. Et la nomenclature empêchait l'emplacement de l'en-tête de fonctionner correctement. Dans Notepad ++, je définissais le codage du fichier sur "UTF-8 sans nomenclature" et le problème avait disparu.

1
morcibacsi

J'ai eu la même application sur mon hôte local et sur un serveur partagé. Sur mon hôte local, les reddirects ont bien fonctionné alors que sur ce serveur partagé ne fonctionnait pas. J'ai vérifié le phpinfo et j'ai vu ce qui a causé ceci:

 enter image description here

Sur mon hôte local, j'avais ceci:

 enter image description here

J'ai donc demandé à l'administrateur système d'augmenter cette valeur et, une fois qu'il l'a fait, tout a bien fonctionné.

0
paulalexandru

Il devrait être Location pas location:

header('Location: index.php');
0
Mahdi
ob_start(); 

devrait être ajouté dans la ligne 1 elle-même . comme dans l'exemple ci-dessous

<?php
ob_start(); // needs to be added here
?>
<!DOCTYPE html>
<html lang="en">
// your code goes here
</html>
<?php
if(isset($_POST['submit']))
{ 
//code to save data in db goes here
}
header('location:index.php?msg=sav'); 
?>

l'ajout ci-dessous html ne fonctionne pas non plus. comme ci-dessous

<!DOCTYPE html>
<html lang="en">
// your code goes here
</html>
<?php
ob_start(); // it doesnt work even if you add here
if(isset($_POST['submit']))
{ 
//code to save data in db goes here
}
header('location:index.php?msg=sav'); 
?>
0
Sashi

Dans mon cas, j'ai créé un nouveau fichier de configuration avec la fonction 'ob_start ()' et l'a ajouté à mon fichier .gitignore.

0
Pankaj Agrawal