Avatar billede Heidi Juniormester
17. februar 2021 - 12:57 Der er 9 kommentarer og
1 løsning

Redirect problem

Nogen som kan se hvorfor denne her ikke virker?
Jeg har ikke andet stående på siden, og inden tomme linjer øverst heller.

<?php
    include_once('../Connect.php');

$hid = $_GET['id'];

    $query = mysqli_query($mysqli, "UPDATE Databasen SET XX = '' WHERE  id = '$id'") or die("Der er sket en fejl. Fejlnr. ".mysqli_errno($mysqli));
    while ($row = @mysqli_fetch_array($query)) {

header("location: xxx.php"); // Redirecting To Other Page
    ?>



<?
}; // afslutter whileloopet
?>
Avatar billede Heidi Juniormester
17. februar 2021 - 13:10 #1
Ok, løst ved at flytte lidt rundt. Jeg troede bare, at det under ikke ville blive udført hvis jeg satte redirect øverst.

<?php
header("location: xxx.php"); // Redirecting To Other Page
    include_once('../Connect.php');

$hid = $_GET['id'];

    $query = mysqli_query($mysqli, "UPDATE Databasen SET XX = '' WHERE  id = '$id'") or die("Der er sket en fejl. Fejlnr. ".mysqli_errno($mysqli));
    while ($row = @mysqli_fetch_array($query)) {

    ?>


<?
}; // afslutter whileloopet
?>
Avatar billede Rune1983 Ekspert
17. februar 2021 - 13:10 #2
Kontroller om du har udskrevet noget på siden før din header("location: xxx.php");
Avatar billede Heidi Juniormester
17. februar 2021 - 13:17 #3
Jeg fandt løsningen ved at flytte lidt rundt, som du kan se mit mit opslag.

Jeg har dog en anden side hvor jeg ikke kan bruge denne løsning, da jeg har noget andet som skal stå først.
Så der ved jeg ikke lige hvad jeg skal gøre
Avatar billede Heidi Juniormester
17. februar 2021 - 13:19 #4
Denne her.
Jeg har tjek og session først på siden, da jeg skal bruge dem.
Men så virker min redirect ikke.
Bud på hvordan jeg læser det?

<?php 
include('Tjek.php'); 
?> 
<?php
if(! isset($_SESSION)){
    session_start();

}

?>
<?php
  header("location: xxx.php"); // Redirecting To Other Page
                    include_once('../Connect2.php');

                    if (isset($_POST['Submit'])) {
                        // her mangler validering af input
                        $ID=$_SESSION['B_id'];   
$hid=$_GET['hid'];

                        $sql = "UPDATE Databasen SET ID='$EjerID' WHERE hid='$hid'";
                        $rs = mysqli_query($mysqli, $sql) or die("Der er sket en fejl. Fejlnr. " . mysqli_error($mysqli));
                     
                       

                    } else {
                        $hid = $_GET['hid'];
                        $sql = "SELECT * FROM Databasen WHERE hid='" . $hid . "'";                       
                        $rs = mysqli_query($mysqli, $sql) or die("Der er sket en fejl. Fejlnr. " . mysqli_error($mysqli));
                        $row = mysqli_fetch_array($rs);

                        // $row bruges direkte nede i formularen, s&aring; det er spild af variabler, da de heller ikke bruges til noget
                        /*
                        $Navn=$row['Navn'];   
$hid=$_GET['hid'];
$EjerID=$_SESSION['B_id'];   
   

  */
                        $msg = "";
                    }
                    ?>
                    <?php
                    echo $msg . "<br>";
                    ?>

<form action="<?php echo $_SERVER['PHP_SELF']?>?hid=<?php echo $row['hid']?>" method="post">
   
Horse: <? echo "$row[Navn]"?><br>

        <input type="hidden" value="<? echo "$[EjerID]"?>" name="EjerID">

<br><br>
    <input type="submit" value="Confirm ownership" name="Submit" class="bottom">

<br>

</form>
Avatar billede Heidi Juniormester
17. februar 2021 - 13:22 #5
Ups - så fandt jeg løsningen tror jeg.
Jeg skal jo bare samlet det
Avatar billede Heidi Juniormester
17. februar 2021 - 13:25 #6
Øv nej - så redirecter den, men udføre ikke det den skal (opdatere database)
Avatar billede arne_v Ekspert
17. februar 2021 - 16:18 #7
I stedetfor at flytte rundt på kode og se hvad der sker så skal du designe din kode.

Først det basale HTTP. En side kan enten redirecte eller den kan vise noget. En side kan ikke gøre begge dele (der er visse muligheder med JavaScript, men det er en anden problematik). Af tekniske grunde kan det kun lade sig gøre at redirecte inden der sendes indhold fra server til browser.

Hvad betyder det for PHP. Det betyder at man bør enten sende en header location eller generere output. Det vil give en fejl hvis man laver en header location efter at der er sendt output. Men her skal man være opmærksom på at der er forskel på at generere output i PHP og at PHP sender output til browser fordi PHP holder output i en intern buffer af effektvitetshensyn. Hvis du genererer en lille smule output men PHP ikke har sendt buuffer til browser, så virker header location stadigvæk. Men jeg vil kraftigt fraråde at basere sig på den mekanisme. Enten header location eller output.

Hvad genererer output. Indhold udenfor <?php ... ?> og echo kald genererer output. At echo genererer output er ret indlysende. Men:
<?php
// nothing
?>

<?php
// nothing
?>

<?php
// nothing
?>

genererer faktisk output. Der er tomt indhold mellem PHP kode blokkene som bliver outputtet.

Så analyser din logik. Skal der redirectes så bør der ikke være nogen echo og heller ikke noget indhold uden for PHP kode blokke.  Skal der vises indhold skal der ikke bruges header location.

Det kan godt være at logikken kræver at der udføres noget kode og undfra den kode bestemmes der dynamisk om der skal redirectes eller vises indhold. Men saa skal du checke hele kode logikken og sikre dig at det er enten eller.
Avatar billede Rune1983 Ekspert
18. februar 2021 - 07:19 #8
I din include tjek ... undlad at printe noget på siden. Så kan du sagtens redirect efter.
Avatar billede Heidi Juniormester
18. februar 2021 - 09:05 #9
Jeg printer ikke noget på siden i min Tjek fil, men jeg har en header med redirect, så jeg tænker det er den som er årsagen?  Selvom den kun skal redirecte hvis nogle bestemte betingelser er opfyldt.
Avatar billede olsensweb.dk Ekspert
18. februar 2021 - 10:37 #10
indsæt dette i toppen af din fil.
<?php
    ini_set("display_startup_errors", "on");
    ini_set("display_errors", "on");
    ini_set("html_errors", "false");
    error_reporting(-1); // -1 viser alle slags fejl beskeder
    ini_set("ignore_repeated_errors", 0);
?>



#0
<?
}; // afslutter whileloopet
?>

#4
"<? echo "$[EjerID]"?>"

undlad at bruge short open tag som jeg skrev i https://www.computerworld.dk/eksperten/spm/1036125?k=8374533
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester