Avatar billede pumpin Nybegynder
06. august 2005 - 19:02 Der er 19 kommentarer

login script som driller

heysan jeg har rodet lidt med et login script i PHP og det burde sku virke men et eller andet gør at den slet ikke tjekker databasen

selve PHP koden:
<?php
session_start();

mysql_connect("localhost","","");
mysql_select_db("tartuhus");

if($_POST['sub_login'])
{
    $getSQL = mysql_query("SELECT id, kodeord FROM bruger WHERE navn='".$_POST['name']."' ");
    $row = mysql_fetch_array($getSQL);
        if($row['kodeord'] == $_POST['password'])
        {

            $_SESSION['bruger'] = $_POST['name'];
            $_SESSION['brugerID'] = $row['id'];
            header("location: admin.php");
        }
       
}
?>

min HTML form:
<form name="login_form" id="login_form" method="post" action="">
<table>
<tr>
                    <td style="padding-left:5px;"><input type="text" name="name" id="name" value=""></td>
                </tr>
                <tr>
                    <td><img src="billeder/pointer_1.gif"> Password:</td>
                </tr>
                <tr>
                    <td style="padding-left:5px;"><input type="password" name="password" id="password" value=""></td>
                </tr>
                <tr>
                    <td style="padding-left:5px; padding-top:4px;"><input type="submit" name="sub_login" id="sub_login" value="Login"></td>
                </tr>
                <tr>
                    <td id="subnav"><img src="billeder/index_10.gif"></td>
                </tr>               
            </table>
            </form>

min DB:
-- Vært: localhost
-- Genereringstid: 06/08 2005 kl. 18:56:16
-- Serverversion: 4.1.10
-- PHP version: 5.0.4
--
-- Database: `tartuhus`
--

-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `bruger`
--

CREATE TABLE `bruger` (
  `id` tinyint(4) NOT NULL auto_increment,
  `navn` varchar(16) NOT NULL default '',
  `kodeord` varchar(16) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

--
-- Data dump for tabellen `bruger`
--

håber der er en klog og venlig sjæld som kan se min fejl jeg er sikker på det er en lille noob fejl som jeg har stiret mig blind på
Avatar billede busschou Praktikant
06. august 2005 - 19:05 #1
plejer man ikke sådan her i php?
if(isset($_POST['sub_login']))
Avatar billede busschou Praktikant
06. august 2005 - 19:07 #2
anyway kan du jo ihvert fald i princippet lige så godt tjekke på om brugernavn og kodeord findes samtidig
$getSQL = mysql_query("SELECT id, kodeord FROM bruger WHERE navn='".$_POST['name']."' And kodeord='".$_POST['password']."'");
og så teste på num_rows og se om der er en, du kan også selecte med en Count(*) og se om der er en
Bare en ide :o)
Avatar billede pumpin Nybegynder
06. august 2005 - 19:09 #3
retunere den ikke bare true eller false hvis variablen findes ??
Avatar billede busschou Praktikant
06. august 2005 - 19:11 #4
har du prøvet at rette det`?
Avatar billede busschou Praktikant
06. august 2005 - 19:11 #5
variablen indeholder jo ikke en sandhedsværdi som True og False
Den indeholder jo "Login"
Avatar billede pumpin Nybegynder
06. august 2005 - 19:32 #6
det virker heller ikke selvom jeg sætter isset ind forand post og det virker stadig ikke selv om jeg tjekker både pass og brugernavn på samme tid
Avatar billede ksoren Nybegynder
06. august 2005 - 19:33 #7
Prøv at få den til at udskrive en fejlbesked

$getSQL = mysql_query("SELECT id, kodeord FROM bruger WHERE navn='".$_POST['name']."' ") or die(mysql_error());

isset() er pænere at bruge. Afhængigt af error_reporting, vil det give en grim notice hvis sub_login ikke eksisterer.

Et udefineret index returnerer null, som evaluerer til false. En ikke-tom streng evaluerer til true
Avatar billede ksoren Nybegynder
06. august 2005 - 19:42 #8
og du skal også have styr på om magic quotes er aktiveret på serveren. Hvis ikke, skal du køre dit input igennem addslashes(), ellers er dit login hullet som en si :o
Avatar billede pumpin Nybegynder
06. august 2005 - 19:51 #9
det sidste kommer lige over min forstand!! med selv om jeg sætter or die ind så lukker den mig igennem selvom jeg indtaster wollapyk..  jeg tror ikke helt at det er i min PHP kode at der er en fejl måske er det noget så dumt som et name på et input felt som jeg har stiret mig blind på
Avatar billede pumpin Nybegynder
06. august 2005 - 19:52 #10
eller også er det fordi jeg har session'en men den burde da stadig ikke lukke mig ind når taster noget forkert ind
Avatar billede busschou Praktikant
06. august 2005 - 19:55 #11
sessionen kører jo indtil du "ødelægger den" enten i php eller ved at lukke browseren
Så er du een gang lukket ind og  ikke logger ud, så kan du skrive hvad som helst og stadig have adgang :o)
Avatar billede ksoren Nybegynder
06. august 2005 - 19:57 #12
if($row['kodeord'] == $_POST['password'])

hvis der ingen rækker er, vil $row være false. Du skal skrive den sådan:

if($row !== false && $row['kodeord'] == $_POST['password'])
Avatar billede pumpin Nybegynder
06. august 2005 - 20:14 #13
hvis jeg sætter det ind så kommer den med fejl!!
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\wamp\www\Tartuhus.dk\index.php on line 10

PT kommr den ikke med fejl den lukker bare alle ind
Avatar billede ksoren Nybegynder
06. august 2005 - 20:30 #14
Jeg håber da ikke du får den fejl, fordi du sætter et ekstra udtryk ind i din if-sætning

Den fejl får du, fordi din sql-sætning ikke er gyldig.
Avatar billede pumpin Nybegynder
06. august 2005 - 21:12 #15
jamen jeg gloede også noget.. men PHP har jo som reglt ret.. har jeg lært den er bare dum til at fortælle det :)

if($row !== false && $row['kodeord'] == $_POST['password'])
!== blev lige ændret til != så virkedet det
Avatar billede pumpin Nybegynder
06. august 2005 - 21:18 #16
hvis du lige kaster et svar ks0r3n så har du lidt points... men gider du udybe det her lidt.... Et udefineret index returnerer null, som evaluerer til false. En ikke-tom streng evaluerer til true

eller har jeg forstået det rigtigt at hvis man ikke indtaster noget så leder den efter værdien null i min DN og efter so der ikke er noget i min DB finder den det, og lukke rfolk vidre ??
Avatar billede ksoren Nybegynder
06. august 2005 - 22:48 #17
$a = array('index' => 'value');
$b = $a['po'];
echo gettype($b);

po er ikke et gyldigt index i arrayet, og $b vil nu være null. Når null indgår i et boolsk udtryk (f.eks. i en if-sætning), vil null autoamtisk blive omdannet til false

$streng = "hello world";

if($streng){
  // bliver udført, da strengen ikke er tom
}

Mere her: http://docs.php.net/en/language.types.html#language.types.boolean.casting
Avatar billede kastermester Nybegynder
07. august 2005 - 20:23 #18
Det vil nok også være en god ide at køre addslashes på $_POST["name"] når du kører den ind i din sql query, da man ellers kan angive følgende som navn

' or '1' = '1

og så vil din query se sådan ud:
SELECT id, kodeord FROM bruger WHERE navn='' or '1' = '1'

Som så vil returnere sandt, hver gang, hvorimod addslashes vil sætte \ foran hver ' og " tegn som der måtte blive indtastet.
Avatar billede kastermester Nybegynder
07. august 2005 - 20:24 #19
En helt anden ting man også kan gøre er at eksekvere sql queries, ved at indsætte

'; insert into.... osv.
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