11. marts 2005 - 18:18Der er
22 kommentarer og 1 løsning
Undefined Index Hvad betyder
Er der nogen der ved hvad dette betyder, og havd problemmet er? jeg bruger det samme script på en anden side uden problem. Kan det være noget med globals eller.
Notice: Undefined index: user in d:\web\nettel.dk\nettel.dk\netAdmin\auth.php on line 5
Her er linje 4 og 5:
session_start(); if (!$_SESSION['user'] || !$_SESSION['pass']) {
Grunden til det virker på den anden side er sikkert at error_reporting niveauet er sat lavere der. Du kan undgå fejlmeddelelsen ved at tjekke med isset() istedet:
if (!isset($_SESSION['user']) || !isset($_SESSION['pass'])) {
Eller du kan ændre på niveauet i error_reporting [1]. Normalt sætter jeg error_reporting til 0 (alle warnings etc bliver vist) når jeg arbejder på i et testmiljø. Når jeg går live med noget sætter jeg den normalt til 16 eller deromkring.
tanzaweb> Under alle omstændigheder er det ikke normalt i programmerssprog at du kan undersøge variabler så let. Det er meget sundt hvis du tænker i typer selvom PHP er et typesvagt sprog. Linien
if (!$_SESSION['user'] || !$_SESSION['pass']) {
kan nedbrydes rimelig simpelt. If forventer en sandhedsværdi. Denne sandhedsværdi er i dette tilfælde opbygget som "a || b", hvilket vil sige at a og b bør være sandhedsværdier. Idet ! egentlig er en funktion der tager en sandhedsværdi og retunerer den modsatte sandhedsværdi bør $_SESSION['user'] og $_SESSION['pass'] også være sandhedsværdier. Det er netop her din kode fejler idet det er strenge. Derfor giver det mening at køre den igennem en funktion der undersøger længden af strengen og retunerer en sandhedsværdi alt efter om længden er 0 eller ej. Det er jo netop det empty() og isset() gør.
bromer, Forkert. Han får fejlen fordi array'et $_SESSION ikke indeholder nøglen 'user' eller 'pass' - Det har intet at gøre med typer ;) isset checker om en variabel *findes* - empty checker om den findes OG om den er null/0/tom.
coderdk> Det er rigtigt, jeg så lige forkert. Men det har bestemt noget med typer af gøre, ídet hvis man tænkte i type-stærke sprog ville man vide at man ikke kunne lave en ! foran et array-element.. hvorefter man ville lede efter en funktion der kunne undersøge hvorvidt nøglen fantes.
Og jeg er klar på forskellen mellem empty og isset :)
Tak for hjælpen det hjalp, men nu siger den det samme om denne linje: $_POST['user'] = addslashes($_POST['user']); Notice: Undefined index: user in \netAdmin\login.php on line 6 og denne password='$_POST[pass]
Og jeg har prøvet at ændre den på flere måder bl.a. med : !isset($_POST['user']) = addslashes($_POST['user']); og andre men lige lidt hjælper det.
Men for det ovenstående svar var det detox som kom med det første svar som virkede
Normalt vil du lave en if betingelse der tjekker om der er postet nogle variabler i den her stil:
if (isset($_POST['user'])) { //eller et andet felt; 'submit' eller fx et hidden felt //Her kan du så undersøge om de postede variabler indeholder noget og evt. skal tilføjes addslashes }
Men pas på med at bruge addslashes(), da der i mange tilfælde køres med: magic_quotes_gpc. Derfor bør du gøre det i den her stil:
Jeg har lige et spørgsmål mere. Alt dette er fordi at error_reporting er sat til 0, af webhotel udbyderen? da, den ikke gør alt dette på min gamle server.
hvor kan jeg læse mere om at løse dette for det tyder på at jeg skal have omdefineret hele siden ad den kommer op med dette for hver eneste variable, array, og ikke bare ved sessions. og jeg er egentlig lidt træt af det da jeg troede jeg var ved at have noget jeg var ved at lære
Du kan vælge at omstrukturere dine sider (anbefales), men hvis det er et alt for stort arbejde kan du forsøge at sænke error reporting level ved at sætte:
error_reporting(E_ALL ^ E_NOTICE); // øverst på dine sider.
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.