/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Udskrift fra MySql - administrationsmodul
Fra : Erik Ginnerskov


Dato : 25-12-06 16:00

Hej NG
Jeg sidder og bøvler med at strikke et administrationsmodul sammen til en
MySql-database. Modulet skal læse i en tabel 'users' hvori er tre felter
'id', brugernavn' og PASSWORD'.

Jeg er kommet så langt, at scriptet læser i tabellen og oplister alle
poster. Jeg kan også uden problemer tilføje nye poster (funktionen indgår
ikke i aktuelle script).

Men i udskriften af poster bliver indholdet af feltet 'PASSWORD' ved hver
enkelt post kopieret til udskriftlinjen for 'id'. jeg kan ikke se, hvor i
scriptet det halter. Det skulle gerne være indholdet af feltet 'id', der
blev sat i udskriftlinjen for 'id'.

http://hjemmesideskolen.dk/usenet/mysqlread-inc.txt

--
Fortsat god jul
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



 
 
Leonard (25-12-2006)
Kommentar
Fra : Leonard


Dato : 25-12-06 16:08

"Erik Ginnerskov" <erik@donotspammeplease.invalid> wrote:

>Men i udskriften af poster bliver indholdet af feltet 'PASSWORD' ved hver
>enkelt post kopieret til udskriftlinjen for 'id'. jeg kan ikke se, hvor i
>scriptet det halter. Det skulle gerne være indholdet af feltet 'id', der
>blev sat i udskriftlinjen for 'id'.

Sæt var_dump($variabel); ind i dit script og følg dine variablers
ændringer undervejs.
Jeg ville begynde nede ved udskriftsdelen og udskrive de 2 variabler
$id og $password og så arbejde mig baglæns op i scriptet indtil jeg
finder der hvor det går galt.

--
Leonard
http:/leonard.dk/hjemmeside/

Min nye hobby: http://oy-blu.dk/

Erik Ginnerskov (25-12-2006)
Kommentar
Fra : Erik Ginnerskov


Dato : 25-12-06 20:27

Leonard wrote:

> Sæt var_dump($variabel); ind i dit script og følg dine variablers
> ændringer undervejs.

Der er da ikke lå lang, jeg kan gå baglæns med at trace de to variabler. De
er netop blevet kaldt i loopet, inden jeg udskriver dem.

Jeg indsatte lige efter :

for($i=0;$i<count($resultat);$i++) { # linje 76
extract($resultat[$i]);

- som er starten på loopet, og dermed første sted de to variabler kan have
indhold - dette:

var_dump($id); # linje 81
var_dump($password);

og fik så lige over hver postudskrift noget lignende dette vist:

string(9) "elmerfjot" string(9) "elmerfjot"

hvor tallene i parentesen refererer til antallet af karakterer i det
registrerede password ved den post.

Umiddelbart derefter følger udskriften:

<div style=".... # linje 86

Det siger stadig ikke noget om, hvorfor indholdet i feltet 'id' bliver
overskrevet af indholdet i feltet 'password'.

http://hjemmesideskolen.dk/usenet/mysqlread-inc.txt

--
Fortsat god jul
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



Leonard (26-12-2006)
Kommentar
Fra : Leonard


Dato : 26-12-06 13:54

"Erik Ginnerskov" <erik@donotspammeplease.invalid> wrote:

>Det siger stadig ikke noget om, hvorfor indholdet i feltet 'id' bliver
>overskrevet af indholdet i feltet 'password'.

Så må du jo tilbage i din funktion hvor $resultat får indhold og finde
det.

--
Leonard
http:/leonard.dk/hjemmeside/

Min nye hobby: http://oy-blu.dk/

Martin Mouritzen (25-12-2006)
Kommentar
Fra : Martin Mouritzen


Dato : 25-12-06 20:54

On Mon, 25 Dec 2006 15:59:58 +0100, "Erik Ginnerskov"
<erik@donotspammeplease.invalid> wrote:

>Hej NG
>Jeg sidder og bøvler med at strikke et administrationsmodul sammen til en
>MySql-database. Modulet skal læse i en tabel 'users' hvori er tre felter
>'id', brugernavn' og PASSWORD'.
>
>Jeg er kommet så langt, at scriptet læser i tabellen og oplister alle
>poster. Jeg kan også uden problemer tilføje nye poster (funktionen indgår
>ikke i aktuelle script).
>
>Men i udskriften af poster bliver indholdet af feltet 'PASSWORD' ved hver
>enkelt post kopieret til udskriftlinjen for 'id'. jeg kan ikke se, hvor i
>scriptet det halter. Det skulle gerne være indholdet af feltet 'id', der
>blev sat i udskriftlinjen for 'id'.
>
>http://hjemmesideskolen.dk/usenet/mysqlread-inc.txt

Jeg kiggede lige på din SQL:
$sql = "select id, brugernavn, PASSWORD as id, brugernavn, password
from users order by id desc limit $start_nr, $antal_ad_gangen";

Prøv at lav det om til

$sql = "
select
   id AS id,
   brugernavn AS brugernavn,
   PASSWORD AS password
FROM
   users
ORDER BY
   id
DESC
LIMIT $start_nr, $antal_ad_gangen";

Altså, hav en AS efter hver kolonnenavn, og ikke til sidst, da jeg
tror det er det der giver dig problemet.

(Altså, tabsne er ligegyldige, jeg syntes bare at det gør
forespørgsler nemmere at læse).

--
Med venlig hilsen,
Martin Mouritzen.
http://www.siteloom.dk

Martin Mouritzen (25-12-2006)
Kommentar
Fra : Martin Mouritzen


Dato : 25-12-06 21:03

On Mon, 25 Dec 2006 20:53:46 +0100, Martin Mouritzen
<martin@siteloom.dk> wrote:

>Jeg kiggede lige på din SQL:
>$sql = "select id, brugernavn, PASSWORD as id, brugernavn, password
>from users order by id desc limit $start_nr, $antal_ad_gangen";

For lige at skære ud i pap, så er det følgende der sker i queriet.

: select id,
id bliver hentet som variabel id

: brugernavn,
brugernavn bliver hentet som variabel brugernavn

: PASSWORD as id,
PASSWORD bliver hentet og overskriver variablen id

: brugernavn,
brugernavn bliver hentet og overskriver variablen brugernavn (som
indeholder det samme)

: password,
password bliver hentet igen, denne gang i en variabel password (MySQL
er case-insensitive ved tabelnavne.)

: from users order by id desc limit $start_nr, $antal_ad_gangen
resten af queriet virker fint nok.

Alt i alt er det bare fordi du bruger AS forkert (Jeg har ihvertfald
aldrig stødt på at det kunne bruges sådan som du gør, og jeg kunne
ikke lige se det i manualen). Normalt ville du jo så få en
fejlmeddelelse, men dit query er lige nøjagtigt validt.

--
Med venlig hilsen,
Martin Mouritzen.
http://www.siteloom.dk

Erik Ginnerskov (25-12-2006)
Kommentar
Fra : Erik Ginnerskov


Dato : 25-12-06 21:56

Martin Mouritzen wrote:
> Jeg kiggede lige på din SQL:
> $sql = "select id, brugernavn, PASSWORD as id, brugernavn, password
> from users order by id desc limit $start_nr, $antal_ad_gangen";
>
> Prøv at lav det om til
>
> $sql = "
> select
> id AS id,
> brugernavn AS brugernavn,
> PASSWORD AS password
> FROM
> users
> ORDER BY
> id
> DESC
> LIMIT $start_nr, $antal_ad_gangen";

Det var lige de vise ord, der fik det til at fungere. Tak for det, nu kan
jeg komme videre med projektet - der skal sættes passwordbeskyttelse på (en
ny tabel defineret i MySql) og jeg skal have kigget på at forebygge
cross-brug af login fra de almindligt password-beskyttede sider (forskellige
session-navne?).

Jeg vender frygteligt tilbage.

> Alt i alt er det bare fordi du bruger AS forkert (Jeg har ihvertfald
> aldrig stødt på at det kunne bruges sådan som du gør, og jeg kunne
> ikke lige se det i manualen).

Det er såmænd hentet fra en administrationsside til en gæstebog - og der
fungerer det upåklageligt. Det var derfor, jeg ikke fattede en meter:

$sql = "select id, navn, epost, date_format(tid, '%e/%c %Y, %H:%i') as
tiden, subject, besked from gaestebog order by tid desc limit $start_nr,
$antal_ad_gangen";

--
Fortsat god jul
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



Martin Mouritzen (26-12-2006)
Kommentar
Fra : Martin Mouritzen


Dato : 26-12-06 01:37

On Mon, 25 Dec 2006 21:56:04 +0100, "Erik Ginnerskov"
<erik@donotspammeplease.invalid> wrote:

>Det var lige de vise ord, der fik det til at fungere. Tak for det, nu kan
>jeg komme videre med projektet - der skal sættes passwordbeskyttelse på (en
>ny tabel defineret i MySql) og jeg skal have kigget på at forebygge
>cross-brug af login fra de almindligt password-beskyttede sider (forskellige
>session-navne?).

Her forstår jeg ikke lige helt hvad du mener? - Altså sider på dit
eget website?

Der kan det nok være en idé at bruge forskellige sessionsnavne, ja.
Det er vist den nemmeste og mest portable vej, alternativt ville du
måske kunne lege med session_set_cookie_params, og gøre så de
session-cookies du bruger kun eksisterer på dén sti du specificerer.
(Men alt i alt vil jeg foreslå bare at benytte nogen unikke
variabler).

>Det er såmænd hentet fra en administrationsside til en gæstebog - og der
>fungerer det upåklageligt. Det var derfor, jeg ikke fattede en meter:
>
>$sql = "select id, navn, epost, date_format(tid, '%e/%c %Y, %H:%i') as
>tiden, subject, besked from gaestebog order by tid desc limit $start_nr,
>$antal_ad_gangen";

Okay, jeg må som sagt indrømme at jeg aldrig har set det før. Grunden
til at det ikke virker i dette tilfælde må jo så være at din
forespørgsel ligner tilpas meget en normal forespørgsel til at MySQLs
parser ikke kan gætte om du mener det ene eller det andet.

Hvis jeg forresten lige må komme med mit eget input til dit
brugersystem, så har jeg erfaret at det er enormt brugbart at have
følgende rækker: lastlogintime, lastloginip, lastloginhostname.
Lige pludselig står du i en situation hvor den slags er rart at vide.


--
Med venlig hilsen,
Martin Mouritzen.
http://www.siteloom.dk

Erik Ginnerskov (26-12-2006)
Kommentar
Fra : Erik Ginnerskov


Dato : 26-12-06 23:48

Martin Mouritzen wrote:

> Her forstår jeg ikke lige helt hvad du mener? - Altså sider på dit
> eget website?

Ja. Meningen er at præsentere en løsning på en passwordfunktion (inklusive
en demo af login). Løsningen skal også indeholde et administrationsmodul,
som kun ejeren skal kunne tilgå. Derfor skal der naturligvis være
forskellige session-navne og det har jeg også fået fikset.

Når man er logget ind på demosiderne, kan man (jeg) ikke gå direkte til
administrationen, da session hedder noget forkert.

Det er også meningen, at login-data til administrationen skal ligge i en
anden tabel i MySql-basen end data for testlogin til demosiderne.

Det sidste har jeg ikke helt fået til at fungere korrekt endnu, men jeg
abejder på sagen.

> (Men alt i alt vil jeg foreslå bare at benytte nogen unikke
> variabler).

Jeg har haft i tankerne at omdøbe felterne med Bruger-ID og Password i den
nye tabel og tilsvarende rette i login-scriptet.

> Hvis jeg forresten lige må komme med mit eget input til dit
> brugersystem, så har jeg erfaret at det er enormt brugbart at have
> følgende rækker: lastlogintime, lastloginip, lastloginhostname.
> Lige pludselig står du i en situation hvor den slags er rart at vide.

Det kunne da lyde som fornuftige parametre at registrere, i tilfælde af at
nogen laver små julenumre. Det skal vel så lagres i en ny, dertil oprettet
tabel?

Det vil jeg kigge på, når det andet fungerer tilfredsstillende - sikkert.

--
Fortsat god jul
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



Erik Ginnerskov (27-12-2006)
Kommentar
Fra : Erik Ginnerskov


Dato : 27-12-06 00:04

Erik Ginnerskov wrote:

> Det sidste har jeg ikke helt fået til at fungere korrekt endnu, men
> jeg abejder på sagen.

Ha, når man tjekker brugernavn og password i den rigtige tabel, så virker
det som forventet på den front også.

--
Fortsat god jul
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



Erik Ginnerskov (27-12-2006)
Kommentar
Fra : Erik Ginnerskov


Dato : 27-12-06 15:30

Erik Ginnerskov wrote:

> Ha, når man tjekker brugernavn og password i den rigtige tabel, så
> virker det som forventet på den front også.

Når jeg logger ind på administrationen, får jeg en (underlig) advarsel
nederst på siden:

Warning: Unknown: Your script possibly relies on a session side-effect
which existed until PHP 4.2.3. Please be advised that the session
extension does not consider global variables as a source of data, unless
register_globals is enabled. You can disable this functionality and this
warning by setting session.bug_compat_42 or
session.bug_compat_warn to off, respectively. in Unknown on line 0

Mit vebhotel kører med php 5.1.6

Men hvis jeg laver en version af administrationssiden uden passwordkontrol,
får jeg ingen advarsel. Logger jeg ind på demosiderne, får jeg heller ikke
nogen advarsel - teknisk set samme login-script, bare ændrede data.

Det ligner en uheldig kombination af login-scriptet og det script, som
udlæser data fra basen? Men hvor ligger det og hvordan kan det moderniseres.

Genindlæser jeg administrationen (den med login), forsvinder advarslen.

http://hjemmesideskolen.dk/usenet/login-php.txt
http://hjemmesideskolen.dk/usenet/admin-php.txt
http://hjemmesideskolen.dk/usenet/mysqlread-inc.txt

--
Godt nytår
Erik Ginnerskov
http://hjemmesideskolen.dk/ - http://ginnerskov.dk/
http://html-faq.dk



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste