Avatar billede naza Nybegynder
20. september 2007 - 23:00 Der er 7 kommentarer

Problem med php side

Hej

Jeg har lige flyttet en php webside fra et webhotel til et nyt ifbm. køb af virksomhed.

Sælger kender intet til deres løsning pga. de har fået lavet alt i Indien.
Jeg kender intet/meget lidt til php - har arbejdet i asp og asp.net i flere år så jeg kan godt nogenlunde forstå den kode der står.

Indtil videre fungere det meste af siden fint - har fået ændre alle de steder hvor der henvises til databasen.

Men nu er jeg rendt ind i et problem. En del af siden ser ud som om den er lavet vha. OsCommerce - shopping del på siden.

Der er et link til denne side, hvor der burde være en querystring bagefter linket (dette er generet dynamisk), ex.

link.php?PHPSESSID=xxxxxxxx

Men på det nye webhotel ser det ud som om dette ikke genereres - der står kun link.php og det medfører en fejl når jeg forsøger at tilgå den del af siden.
Kan se at linket generes udfra en variabel i starten som defineres således

<?
if($_REQUEST['osCsid']!="")
    $oscid="?osCsid=".$_REQUEST['osCsid'];
    else
    $oscid="";
?>

Denne bruges så senere således

link.php<?=$oscid;?>

På det nye webhotel vises der kun link.php

Håber der er nogen der kan hjælpe mig med problemet

Mvh. Jannik
Avatar billede terrak Nybegynder
21. september 2007 - 11:50 #1
PHPSESSID som der ses i linket bruges normalt kun hvis browseren ikke understøtter eller ikke har slået cookies til. Dette er noget som automatisk sker på serveren og som man normalt ikke behøver tage hensyn til i koden.

$_REQUEST er en, ifølge mig, løs måde at hente eksterne variabler på. Man bør vide hvor sine variabler kommer fra og i dette tilfælde er det en session variabel, så jeg vil foreslå at du bare laver disse to linjer
if($_REQUEST['osCsid']!="")
$oscid="?osCsid=".$_REQUEST['osCsid'];
om til
if($_SESSION['osCsid']!="")
$oscid="?osCsid=".$_SESSION['osCsid'];

Jeg tvivler dog på det virker, da $_REQUEST metoden stadig burde kunne gøre det. Jeg tror vi skal se mere kode, for at se hvordan sessions håndteres. Hvis det forrige webhotel havde en php konfiguration med
session.auto_start = 1
kan en meget vigtig funktion som
session_start()
nemlig undlades.

og så synes jeg der mangler nogle 'curly brackets' {}
- men hvis systemet virker uden, så er det bedst ikke at pille ved det - if it's not broken, don't fix it :-)
Avatar billede naza Nybegynder
21. september 2007 - 14:08 #2
Jeg har svært ved at sende en masse mere kode - for der er rigtig meget og jeg ved (for at være ærlig) meget lidt om php og derfor heller ikke hvilken kode der vil være relevant.
MEN jeg kan se, at de to filer der fejler på siden der står der faktisk session_start() i toppen.

Kan de være årsagen hvis nu det nye webhotel har session.auto_start = 1?
Avatar billede terrak Nybegynder
21. september 2007 - 14:51 #3
Det er ikke årsagen. Jeg var måske lidt hurtig til at bedømme at det var en session variabel.

Prøv at indsætte følgende før session_start()
ini_set('error_reporting',E_ALL);

Ved at gøre dette vises eventuelle fejl i koden, både store og små. Det skal lige siges at variabelnavne kan blottes, hvilket udgør en potentiel sikkerhedsrisiko, så husk at fjerne det igen.
Avatar billede naza Nybegynder
21. september 2007 - 16:24 #4
Jeg prøvede lige ovenstående og får så en meddelse på siden om følgende:

Notice: Undefined index: osCsid in (og så stien til den php fil det drejer sig om)

Det gør den for 8 andre værdier også - dvs. 9 linjer ialt med ovenstående meddelelse

Hvad betyder det?
Avatar billede terrak Nybegynder
21. september 2007 - 16:44 #5
Det betyder at variablen med navnet osCsid hverken kommer via SESSION, COOKIE, POST eller GET.

Kan du finde andre steder i koden, hvor teksten osCsid fremgår?
Avatar billede avminarm Juniormester
21. september 2007 - 20:48 #6
jeg mener nu at "Undefined index" blot er en warning, dvs pga variablen osCsid ikke er sat, men dette burde ikke give problemer på de fleste hoteller da denne "fejl" typisk ikke vises, da det alene er et spørgsmål om god kodeskik mere end det er en fejl.

Prøv med:
ini_set('error_reporting',E_ALL & ~E_NOTICE);

lidt om felj typer hentet i php.ini ;o)
; error_reporting is a bit-field.  Or each number up to get desired error
; reporting level
; E_ALL            - All errors and warnings
; E_ERROR          - fatal run-time errors
; E_WARNING        - run-time warnings (non-fatal errors)
; E_PARSE          - compile-time parse errors
; E_NOTICE          - run-time notices (these are warnings which often result
;                    from a bug in your code, but it's possible that it was
;                    intentional (e.g., using an uninitialized variable and
;                    relying on the fact it's automatically initialized to an
;                    empty string)
; E_CORE_ERROR      - fatal errors that occur during PHP's initial startup
; E_CORE_WARNING    - warnings (non-fatal errors) that occur during PHP's
;                    initial startup
; E_COMPILE_ERROR  - fatal compile-time errors
; E_COMPILE_WARNING - compile-time warnings (non-fatal errors)
; E_USER_ERROR      - user-generated error message
; E_USER_WARNING    - user-generated warning message
; E_USER_NOTICE    - user-generated notice message
Avatar billede terrak Nybegynder
21. september 2007 - 21:49 #7
avminarm > Ja, det er jo ikke en decideret fejl, selv om jeg vist fik det til at fremstå sådan :-)
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