06. oktober 2011 - 11:08Der er
25 kommentarer og 1 løsning
Problemer med $_POST
Hej eksperter.
Jeg sidder med følgende kode til at skifte sprog på en hjemmeside. Hensigten er der først skal tjekkes om den ligger en cookie i forvejen, og skifte side herefter. Hvis brugeren efterfølgende skifter sprog via formen, skal der laves en ny cookie og derefter skiftes side til det valgte sprog.
<?php if (isset($_COOKIE['userlang'])) { $userlang = $_COOKIE['userlang']; if ($userlang <> 'en') header("Location: ../$userlang/{$userlang}_home.php"); } if (isset($_POST['newuserlang'])) { $newuserlang = $_POST['newuserlang']; setcookie('userlang', "{$newuserlang}", time()+60*60*24*1095, '/'); if ($newuserlang <> 'en') header("Location: ../$newuserlang/{$newuserlang}_home.php"); } ?>
Det virker super godt på min lokale apache server, men når jeg uploader det til min udbyder, virker det ikke. Jeg har efterfølgende læst at, det kan have noget med globals at gøre, de er slået fra af sikkerhedsmæssige årsager og at man skal undgå at bruge dem.
Jeg har brugt et par timer på at læse op på, hvordan jeg så kan konstruere min kode, men jeg kan ikke finde ud af det.
Kommer den slet ikke ind i form if'en, eller hvilken linje går den i stå ved? Prøv evt. at echo'e undervejs.
Og ikke at jeg tror, det har nogen betydning for problemet, men er der nogen grund til, at du har: name="newuserlang" på dine <option>'s? Det skal vel kun være på <select>'en.
setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.
Så fandt jeg endelig løsningen, det var ronols hint i forbindelse med formatet utf-8. (jeg anede ikke hvad du hentydede til i første omgang) Alle mine sider er kodet i notepad++, formatet er utf-8 med BOM som standard og det er ligepræcis det her BOM der er skyld i at det ikke virker.
Ved at konvertere alle filer til utf-8 uden BOM, så virker det hele som skal. Heldigvis er det bare et tryk på en knap i notepad++.
Der står mere om det i kommentarerne her http://php.net/manual/en/function.header.php Jeg forstår dog stadig ikke helt hvad BOM er og hvorfor det virker out-of-the-box på min lokale webserver, og ikke online.
>hvorfor det virker out-of-the-box på min lokale webserver, og ikke online. kunne det tænkes du havde en cookie liggende fra dette sp http://www.eksperten.dk/spm/947509 ??
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.