hvad er der galt med min kode

Tags:    php

<< < 12 > >>
jeg er ved at lave et brugerlogin på mit php login der skal være 3 rettigheds tyber bruger admin super admin men kan ikke få min kode til at virke den viser bare hvid skærm håber i kan hjælpe

<?php
$host="localhost"; // Host name
$username="***"; // Mysql username
$password="***"; // Mysql password
$db_name="****"; // Database name
$tbl_name="****"; // Table name

// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or
die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and
password='$mypassword'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);
if($count==1 && $row['role'] == "Administrator"){
session_register("myusername");
session_register("mypassword");
$_SESSION['user'] = $myusername;
$_SESSION['name'] = $row['name'];
// Remember login if checked
if (isset($_POST["remember"])) {
setcookie('username', $myusername, time()+3600*168, '/');
setcookie('password', $mypassword, time()+3600*168, '/');
}
else {
setcookie('username', "", time()-3600, '/');
setcookie('password', "", time()-3600, '/');
}
header("location:admin.php");

}

else if($count==1 && $row['role'] == "Superadmin"){
session_register("myusername");
session_register("mypassword");
$_SESSION['user'] = $myusername;
$_SESSION['name'] = $row['name'];
// Remember login if checked
if (isset($_POST["remember"])) {
setcookie('username', $myusername, time()+3600*168, '/');
setcookie('password', $mypassword, time()+3600*168, '/');
}
else {
setcookie('username', "", time()-3600, '/');
setcookie('password', "", time()-3600, '/');
}
header("location:super.php");

}
?>



20 svar postet i denne tråd vises herunder
11 indlæg har modtaget i alt 25 karma
Sorter efter stemmer Sorter efter dato
får du ikke en warning når du connecter til din database ??, hvis du ikke gør har du enten en tusse gammel installation af PHP eller eler slået error_repporting og display errors fra
http://php.net/manual/en/function.error-reporting.php

læg venligs dette ind i toppen af din fil
Fold kodeboks ind/udKode 


så burde du få denne besked ref http://php.net/mysql_connect

Warning
This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
mysqli_connect()
PDO::__construct()


der skal ikke plinger om dine variabler, da de så opfattes som text, så du burde også få en fejl med at du ikke kan connecte
(utested)
Fold kodeboks ind/udKode 


du burde have en separat role tabel, da flere brugere godt kan have sammen role, og du undgår stavefejl, hos enkelte brugere




lagde du mærke til dette

jeg har omdøbt din role til role_id

så jeg tester ikke på en string men på et nummer, se database tabellen tbl_udv og sammenlign med din brugertabel


og så ved jeg ikke om det bare er mig men dette
if ($row['role_id'] == 2){
if ($row['role_id'] == 1){

det kalder på en switch
Fold kodeboks ind/udKode 




Arh, kan det være
session_register("myusername");
session_register("mypassword");
$_SESSION['user'] = $myusername;
$_SESSION['name'] = $row['name'];


Session register er deprecated antaget at du kører php 5.5 eller højere: http://php.net/manual/en/function.session-register.php

Du kan i stedet bare fjern register og bruge følgende:

$_SESSION['user'] = $myusername;
$_SESSION['name'] = $row['name'];

Og husk at give Ronny lidt credit for hans hjælp ;)



Indlæg senest redigeret d. 03.12.2014 15:02 af Bruger #17368

Session register er deprecated antaget at du kører php 5.5 eller højere: http://php.net/manual/en/function.session-register.php
Du kan i stedet bare fjern register og bruge følgende:

ja burde give en warning.
og huske at indsætte session-start i toppen af filen
http://php.net/manual/en/function.session-start.php


<form name="form1" method="post" action="Login//check_login.php">

jeg kan ikke lide dem dobbelte skråstreg Login//
jeg vil lave det om til en enkelt skråstreg





Notice: Undefined variable: row in /home/gardfvex/public_html/check_login.php on line 38


du får aldrig fetchet dit result

$result = mysql_query($sql);
http://php.net/manual/en/function.mysql-fetch-assoc.php



Notice: Undefined index: myusername


Er du sikker på at du har defineret name="myusername" på det inputfelt i formen hvori username indtastes?



Hvis du går op til ronnys post, så er der et grønt felt, med pil op/ned. Hvis man er glad for indlægget givet man en pil op ;)



kig på eks 1 http://php.net/manual/en/function.mysql-fetch-assoc.php


$sql = "SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
$row = mysql_fetch_assoc($result);

og så er der vel ikke nogle grund til at teste om count er lig med 1 flere gange

nåde ala dette
jeg har omdøbt din role til role_id
(utested)
Fold kodeboks ind/udKode 


forslag til base
(utested)
Fold kodeboks ind/udKode 


tilføjet
dersom der havde været flere rækker der skulle hentes ud skulle fetch_assoc selvføgelig være i en while løkke som der også er vist i eks 1 på php.net




Indlæg senest redigeret d. 03.12.2014 15:55 af Bruger #16075

stadig problemmer

hvor henne ??


jeg har omskrevet din code lidt som du kan lade dig inspirarer af
jeg har mod min vilje tested det kortvarigt da det er det gamle API

test database
Fold kodeboks ind/udKode 


html
Fold kodeboks ind/udKode 


check_login.php
Fold kodeboks ind/udKode 


jeg syntes ikke jeg ser din checkbox i din form, til en remember, så den functionalitet vil ikke virke, og er derfor udkommenteret





hvad bruger du $rand til ??
kan du ikke lige dumpe din databse ??
din insert i tbl_udv, og update login stinker af redundant data
af disse data name='$name', username='$username', password='$password', role='$role_id'
i givet fald så skal du have kigget på normalicering af din database

det er også muligt af tabellerne tbl_udv og login er sammen tabel


$test = mysql_query(...
her vil du formindelig finde ud af om brugeren er opretet i forvejen, og er han ikke oprettet opretter du han. OK
men hvorfor lave en update på han i en anden tabel med de sammen data





<< < 12 > >>
t