Avatar billede dallan2007 Nybegynder
13. oktober 2010 - 15:44 Der er 14 kommentarer og
1 løsning

Bør dette ikke fungere? (header location)

Jeg sender en mail til en kunde (ordrebekræftelse), og den del virker upåklageligt, men så skal kunden jo viderestilles:

if(mail($to, $subject, $body, $headers)){
header ("Location: tak.php");
}
else{
header ("Location: problem.php");
}

Her sker der ingenting; hverken problem.php eller tak.php
Avatar billede dallan2007 Nybegynder
13. oktober 2010 - 15:49 #1
Hvis jeg sætter et simpelt echo ind i stedet for header ("Location: tak.php"); så virker det fint. Er der problemer med viderestilning ved mail()?
Avatar billede repox Seniormester
13. oktober 2010 - 16:03 #2
Har du slået fejlmeldinger fra? Jeg tror du har output inden din header.
Avatar billede Stickano Nybegynder
13. oktober 2010 - 16:36 #3
Sjovt jeg lige spottede den her på eksperten da jeg selv har haft ligende problemer for ikke så lang tid siden.
Jeg benytter mig nu af et stykke JS i stedet som virker perfekt.

Prøv den her:

if(mail($to, $subject, $body, $headers)){
?>
<script type="text/javascript" language="javascript">
  document.location.href="tak.php";
</script>
<?php
}else{
?>
<script type="text/javascript" language="javascript">
  document.location.href="problem.php";
</script>
<?php
}
Avatar billede repox Seniormester
13. oktober 2010 - 17:10 #4
#3
Ja, for guderne forbyde man prøvede at finde fejlen - så er det bedre at lave et work-around...
Avatar billede Stickano Nybegynder
13. oktober 2010 - 17:26 #5
#4
Nååå ja, for det handler selvfølgelig ikke om at få det til at virke.. Men fejlfind du bare, så laver jeg mine work-around's..
Avatar billede majbom Novice
13. oktober 2010 - 19:26 #6
-> #5 - lol!

synes nu osse mere det lyder som om at du ikke kan sender headers, da der allerede er sendt output og fejlmeddelelser er slået fra, så du ikke 'ser' det...
Avatar billede repox Seniormester
13. oktober 2010 - 19:47 #7
#5
Hvad bliver det næste så i dine 'work-arounds - for det skal bare virke' kompetencer? JavaScript cookies stedet for sessions - for det handler bare om at få det til at virke? Eller bare slå output buffering til, for det virker bare - endda helt uden man behøver at tænke?
God fornøjelse med din videre udvikling...
Avatar billede Stickano Nybegynder
13. oktober 2010 - 20:43 #8
#7
Er der noget der ikke virker for mig, finder jeg en anden løsning. Da du åbenbart har et problem med det, er der her en anden mulighed.

Smæk det her i toppen og bunden af alle dine dokumenter.

ob_start(); <- skal placeres i toppen.



ob_end_flush(); <-bunden

Headers kan være et helvede at få til at makke ret, især hvis man arbejder med functions.
Derfor syntes jeg egentlig mit alternativ er godt.. Men åbenbart ikke..

- Og hvis du 'repox' finder det underholdende at fejlfinde skal du være velkommen til det. Og garanteret, skulle du finde fejlen er det jo en god ting at rette op på det. Men jeg personligt gider ikke sidde og stirre mig blind på noget kode, og da slet ikke når det er unødvendig, som det er i det her tilfælde. Der er altid mere end en løsning..
Og om du kan li' min metode eller ej.. Who cares? din mening betyder absolut ingenting..
Avatar billede majbom Novice
13. oktober 2010 - 21:37 #9
-> #8 - det passer jo meget godt med #7's kommentar: Eller bare slå output buffering til, for det virker bare - endda helt uden man behøver at tænke?

hvis headers ikke virker er det jo som regel fordi der er output før... synes nu aldrig det er svært at finde ud af hvorfor det driller - enten output før, eller BOM er slået til i din editor
Avatar billede intenz Novice
13. oktober 2010 - 23:58 #10
#8
Det handler jo ikke om at finde det underholdende at fejlfinde, det handler om at lære at skrive ordenlig kode. Du argumenterer mod folk der ved betydeligt mere end dig om det, så tag i stedet imod kritiken og lær fra det.

Det kan godt være det virker for dig, at lave en redirect i klienten (javascript) ud fra kode på serveren (php), men det bliver meget hurtigt noget rod. Og er absolut ikke en god måde at gøre det på. Og det her "Headers kan være et helvede at få til at makke ret, især hvis man arbejder med functions" viser bare at du ikke har den grundlæggende forstående for hvordan koden skal struktureres. Funktioner og headers er absolut ikke hinandens modsætninger, det handler bare om at skrive koden ordenligt.

Og selvom ob_start() og ob_end_flush() godt kan skjule dine fejl, betyder det ikke at det er en ordenlig måde at gøre det på. Det gør både din kode langsommere og øger kompleksiteten mere end nødvendigt.

Ved at skrive koden 'rigtigt', vil alle de problemer forsvinde og behovet for work-arounds ligeså. Koden bliver den hurtigere, nemmere at vedligeholde og mængden af fejl minimeres. Ved at lave mystiske work-arounds sker det modsatte.

Og til spørger, som skrevet i #2. Tjek om du har dine fejlmeddelelser slået til, så bør fejlen blive vist korrekt.
Avatar billede dallan2007 Nybegynder
14. oktober 2010 - 09:58 #11
Jeg fandt fejlen. Jeg havde lavet et mellemrum allerøverst før jeg startede scriptet e.g. mellrum mellemrum<?php og nu virker det fint.
Avatar billede repox Seniormester
14. oktober 2010 - 15:17 #12
#8
Jeg antager at du har fattet budskabet - du kører heller ikke rundt på dit reservedæk indtil det heller ikke virker mere, vel?
Du lærer intet ved at springe over hvor gærdet er lavest - og som de andre allerede har understreget var dit næste forslag, som jeg sagde, ret forudsigeligt.

Dine udtalelser fortæller du har meget at lære - at sammenkæde headers og det at 'arbejde med functions' udviser manglende forståelse for sammenhængen. Du ville kunne opnå meget ved at erkende at du har meget at lære.
Hvis du fortsætter med at bilde folk ind at det vigtigste ved programmering er at 'få lortet til at virke' vil du ende i flere tråde som disse.
Avatar billede repox Seniormester
14. oktober 2010 - 15:17 #13
#11
Super - hvis jeg bidrog til at du fandt problemet, så lægger jeg mit svar her.
Avatar billede Stickano Nybegynder
15. oktober 2010 - 13:46 #14
#12
Da du nu har stor opbakning omrking din pointe, må jeg jo pænt trække mig og undskylde. Det ændrer dog ikke på min måde at arbejde på, og ja jeg har meget at lære endnu-.-
Avatar billede repox Seniormester
16. oktober 2010 - 10:49 #15
#14
Det forekommer mig besynderligt at du, på trods af din egen konstatering omkring opbakningen af mine udtalelser, ikke selv vil ændre din arbejdsgang og løse problemer i stedet for at arbejde udenom dem. Men det er naturligvis dit eget valg; meget af arbejdet for en udvikler består i at bugsearche og bugfixe. Det er derfor lige så vigtigt for en udvikler at kunne identificere fejl, som det er at kunne udbedre den. Som udgangspunkt er der ikke noget i vejen med et work-around - så længe det kun er midlertidigt - for som #10 påpegede, så er koden nemmere at vedligeholde og mængden af fejl minimeres væsentligt, når koden er skrevet rigtigt.

Men i stedet for at koge suppe på det, så håber jeg da at du med tiden kan ændre din arbejdsgang i forhold til arbejdet som udvikler.
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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