web-dev-qa-db-fra.com

PHP- Rediriger vers une autre page

Ma question est très simple. mais je me bats trop avec cela. Le problème est que lorsque je clique sur le bouton d'envoi, cette page doit être redirigée vers une autre page. Veuillez simplement me dire ce que j'ai mal fait? Parce que j'ai tout essayé.

Code:

Update-docket.php

<?php
//error_reporting(0);
$link = mysqli_connect("localhost", "home_db", "root", "");

// Check connection 
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

// Escape user inputs for security
$sql = 'SELECT * FROM prod_details';
$result = mysqli_query($link,$sql);

while ($row = mysqli_fetch_array($result))
{ 
     $Quantity1 = $_POST['p_'.$row['id']. ''];          
     $id = $row['id'];
     $store = $row['rstore'];
     // echo $store;

     foreach ($_POST as $key => $value) 
     {}

     if(!empty($Quantity1)) {
         $query="update prod_details SET rdocket='$Quantity1' WHERE id='$id'";
         if(mysqli_query($link, $query)) {
            header('Location: /docket-details.php');
            exit();
         } else {
            echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
         }
      }
  }

docket-details.php

<form class="form-horizontal" action="update-docket.php" method="post" name="myform" autocomplete="off">
  <button  type='submit'  name='submit' class='btn c-theme-btn c-btn-square c-btn-uppercase c-btn-bold'>Submit</button>

S'il vous plaît aider !!!

1
skz

Votre ligne Location est incorrecte, redirigez à l'aide de:

header('Location: /url');

https://secure.php.net/manual/en/function.header.php

mettre à jour

Je pense que votre déclaration n'est pas satisfaite. Essayez d'activer à nouveau la consignation des erreurs et var_dumping dans chaque section conditionnelle pour voir où se situe le vrai problème. Maintenant que vous avez mis à jour votre code pour qu'il utilise header il devrait en théorie fonctionner. Mais je suppose que $ _POST ne renvoie pas ce que vous voulez/attendez.

3
treyBake

Édité!

Essaye ça:

header('Location: /docket-details.php');
// i'm sorry, forgot to add exit
exit();

bien sûr, vous pouvez remplir l’URL complète si vous vous référez.

Important: Aucune sortie ne doit être faite avant cette ligne car elle générera un en-tête. Pas une seule echo avant d'envoyer l'en-tête de la réponse! 

0
Reflective

Cela devrait être quelque chose comme ça:

if(!empty($Quantity1)) {
    $query="update prod_details SET rdocket='$Quantity1' WHERE id='$id'";
    $res = mysqli_query($link, $query);

    if($res) {
        header('Location: /docket-details.php', true, '200');
    } else {
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
}
0
RB_

vous avez "update-details.php" mais vous faites référence à "update-docket.php" dans votre action de formulaire. Ainsi, l'action de formulaire redirige vers un autre fichier.

Comme indiqué par @thisGuyHasTwoThumbs, votre ligne de lieu est incorrecte.

header('Location: /url');
exit();

Vous souhaitez également exit() car cela empêchera toute exécution de code après cette ligne.

https://secure.php.net/manual/en/function.header.phphttps://secure.php.net/manual/en/function.exit.php

Jus pour les détails:

"update prod_details SET rdocket='$Quantity1' WHERE id='$id'"

Wil a l'air beaucoup plus propre et est plus facile à lire comme:

"UPDATE `prod_details` SET `rdocket` = '$Quantity1' WHERE `id` ='$id'"

Maintient les mots MySQL en majuscules. Cacher les noms de colonnes et de tables entre des backticks empêchera " Erreur de serveur MySQL "

Le rendant:

<form class="form-horizontal" action="update-docket.php" method="post" name="myform" autocomplete="off">

<?php
if (!empty( $Quantity1) )
{
    $query = "UPDATE `prod_details` SET `rdocket` = '$Quantity1' WHERE `id` ='$id'";
    if( mysqli_query( $link, $query ) )
    {
        header( 'Location: /docket-details.php' );
        exit();
    } else {
        echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
    }
}

La variable $Quantity1 est ouverte pour l'injection SQL. Pour résoudre ceci, vous pouvez échapper la variable s'il s'agit d'une chaîne, mais vous devez utiliser préparé une instruction .

0
SuperDJ