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
?>
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
?>
Rune1983 Guru
17. februar 2021 - 13:10 #2
Kontroller om du har udskrevet noget på siden før din header("location: xxx.php");
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
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>
Heidi Juniormester
17. februar 2021 - 13:22 #5
Ups - så fandt jeg løsningen tror jeg.
Jeg skal jo bare samlet det
Heidi Juniormester
17. februar 2021 - 13:25 #6
Øv nej - så redirecter den, men udføre ikke det den skal (opdatere database)
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.
Rune1983 Guru
18. februar 2021 - 07:19 #8
I din include tjek ... undlad at printe noget på siden. Så kan du sagtens redirect efter.
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.
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
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.

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





Premium
Sådan kommer den nye coronapas-app til at se ud
Nu er der ikke længe til, at danskerne får mulighed for at downloade et coronapas, der er mindre afslørende i forhold til brugernes personlie sundhedsoplysninger. Se hvordan det nye pas kommer til at se ud.
Computerworld
Endnu en tragisk ulykke med førerløs Tesla: Musk har store forventninger til ny software
En tragisk dødsulykke i USA i weekenden har sat forøget fokus på Teslas eksisterende semiautomatiske system og det kommende fuldautomatiske, der skal gøre bilerne helt selvkørende.
CIO
Har du rost din mellemleder i dag? Snart er de uddøde - og det er et tab
Computerworld mener: Mellemledere lever livet farligt: Topledelsen får konstant ideer med skiftende hold i virkeligheden, og moden går mod flade agile organisationer. Men mellemlederen er en overset hverdagens helt med et kæmpe ansvar. Her er min hyldest til den ofte latterliggjorte mellemleder.
Job & Karriere
"Vi var nødt til at sige til dem, at I er nødt til at sende ham hjem nu, for han begynder at knække"
"Vi var nødt til at sige til dem, at I er nødt til at sende ham hjem nu, for han begynder at knække"
White paper
Netteam ProSupport webinar
Er du IT-ansvarlig i en mindre eller mellemstor virksomhed? På dette webinar giver vi vores deltagere en fuld opdatering på de mest relevante områder inden for netværk og IT-sikkerhed sammen med Cisco.