/ 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
mysql_num - rigtige ting at bruge?
Fra : Christoffer


Dato : 30-04-05 18:20

Hej, jeg har tidligere fået hjælp ang. at gemme en værdi fra mysql i
variabel. Problmet ligger i at værdien fra mysql ikke er en tekst streng,
men et tal, som ikke har en fastværdi men en værdi mellem 1 og 3.

/* Database forbindelse */
$userlevel = mysql_query("SELECT count(*) as userlevel FROM bruger WHERE
brugernavn = '$_SESSION[brugernavn]'");
$userlevel = mysql_fetch_array($userlevel, MYSQL_NUM);

if($userlevel[0] == "1") {
require("../com/levels/level1.php");
}

Har forsøgt mig på følgende måde, men det virker som ikke at den ikke gemmer
nogen værdi i userlevel.
-Er jeg gået galt i byen ved at forsøge mig på den måde??

Har tidligere brugt
$userlevel = mysql_query("SELECT count(*) as userlevel FROM bruger WHERE
brugernavn = '$_SESSION[brugernavn]'");
men når jeg skal bruge variblen flere gange på een side, så er det dumt at
hente den flere gange..

--
Christoffer



 
 
Bent Stigsen (01-05-2005)
Kommentar
Fra : Bent Stigsen


Dato : 01-05-05 20:50

Christoffer wrote:
> Hej, jeg har tidligere fået hjælp ang. at gemme en værdi fra mysql i
> variabel. Problmet ligger i at værdien fra mysql ikke er en tekst streng,
> men et tal, som ikke har en fastværdi men en værdi mellem 1 og 3.

Tal og strenge omsætter php selv efter hvad den synes er passende, så
det er ofte ikke noget du behøver spekulere over. (Der kan dog være
specielle tilfælde.)


> /* Database forbindelse */
> $userlevel = mysql_query("SELECT count(*) as userlevel FROM bruger WHERE
> brugernavn = '$_SESSION[brugernavn]'");

skriv hellere
brugernavn = '{$_SESSION['brugernavn']}'");

Når noget ikke virker, så check på hvad du får tilbage fra de
forskellige funktioner, også mysql_query.
Kan gå galt hvis værdien af $_SESSION['brugernavn'] indeholder et ' .

Hvis "brugernavn" er noget den enkelte bruger selv kan vælge, bør det få
en tur igennem "mysql_real_escape_string()" inden du bruger det i en
forespørgsel.


> $userlevel = mysql_fetch_array($userlevel, MYSQL_NUM);

At genbruge en variabel på den måde, er ikke specielt kønt, og gør også
at du ikke umiddelbart kan kopiere kode og bruge det et andet sted. Kig
på eksemplerne i php-manualen. Fx. her:
http://www.php.net/manual/en/function.mysql-query.php


> if($userlevel[0] == "1") {
> require("../com/levels/level1.php");
> }
>
> Har forsøgt mig på følgende måde, men det virker som ikke at den ikke gemmer
> nogen værdi i userlevel.
> -Er jeg gået galt i byen ved at forsøge mig på den måde??

Bortset fra at jeg ikke forstår meningen med "count(*) as userlevel", så
ser det ikke helt galt ud.

prøv at print $userlevel ud (fx. med print_r($userlevel) )


> Har tidligere brugt
> $userlevel = mysql_query("SELECT count(*) as userlevel FROM bruger WHERE
> brugernavn = '$_SESSION[brugernavn]'");
> men når jeg skal bruge variblen flere gange på een side, så er det dumt at
> hente den flere gange..

Øhm, ja. Sålænge du ikke overskriver eller smider en værdi væk, behøver
du ikke hente den igen. Eller er det noget andet du henviser til?


/Bent

Christoffer (01-05-2005)
Kommentar
Fra : Christoffer


Dato : 01-05-05 21:14

>> $userlevel = mysql_fetch_array($userlevel, MYSQL_NUM);
>
> At genbruge en variabel på den måde, er ikke specielt kønt, og gør også at
> du ikke umiddelbart kan kopiere kode og bruge det et andet sted. Kig på
> eksemplerne i php-manualen. Fx. her:
> http://www.php.net/manual/en/function.mysql-query.php
Virker som ren volapyk hos mig... men fandt også selv hurtigt ud af at
genbruge variablen ikke var det smarteste :)

> Bortset fra at jeg ikke forstår meningen med "count(*) as userlevel", så
> ser det ikke helt galt ud.
Bare den eneste måde jeg kan finde ud af det på (sådan nogen lunde)
> prøv at print $userlevel ud (fx. med print_r($userlevel) )
har prøvet med
$userlevel = mysql_query("SELECT count(*) as userlevel FROM bruger WHERE
brugernavn = {'$_SESSION[brugernavn]'}");
Print "$userlevel";

Den udskriver så ikke noget...

>> men når jeg skal bruge variblen flere gange på een side, så er det dumt
>> at hente den flere gange..
>
> Øhm, ja. Sålænge du ikke overskriver eller smider en værdi væk, behøver du
> ikke hente den igen. Eller er det noget andet du henviser til?
Det er hvad jeg mener..



Bent Stigsen (01-05-2005)
Kommentar
Fra : Bent Stigsen


Dato : 01-05-05 22:35

Christoffer wrote:
[snip]
>>Bortset fra at jeg ikke forstår meningen med "count(*) as userlevel", så
>>ser det ikke helt galt ud.
>
> Bare den eneste måde jeg kan finde ud af det på (sådan nogen lunde)

Jeg undrer bare over associationen, "et antal rækker" og "userlevel".


>>prøv at print $userlevel ud (fx. med print_r($userlevel) )
>
> har prøvet med
> $userlevel = mysql_query("SELECT count(*) as userlevel FROM bruger WHERE
> brugernavn = {'$_SESSION[brugernavn]'}");
> Print "$userlevel";
>
> Den udskriver så ikke noget...

Tuborgtegnene skal indenfor apostrof'erne. Og jeg mente den sidste
"version" af $userlevel.

Prøv sæt det her ind istedet:
//---
$query = "SELECT count(*) as userlevel FROM bruger WHERE brugernavn =
'{$_SESSION['brugernavn']}'";
$result = mysql_query($query);

if (!$result) {
print("Forespørgsel fejlede:\n$query\n");
print(mysql_error());
exit;
}

$row = mysql_fetch_array($result);
$userlevel = row[0];

print_r($row);
print("\nuserlevel = $userlevel\n");
//---

/Bent

Christoffer (02-05-2005)
Kommentar
Fra : Christoffer


Dato : 02-05-05 15:36

>>>Bortset fra at jeg ikke forstår meningen med "count(*) as userlevel", så
>>>ser det ikke helt galt ud.
>> Bare den eneste måde jeg kan finde ud af det på (sådan nogen lunde)
> Jeg undrer bare over associationen, "et antal rækker" og "userlevel".
Kan sagtens se hvad du mener, men mine evner rækker bare ikke længere til at
jeg kan finde ud af at lave det om..

> Prøv sæt det her ind istedet:
> //---
> $query = "SELECT count(*) as userlevel FROM bruger WHERE brugernavn =
> '{$_SESSION['brugernavn']}'";
> $result = mysql_query($query);
>
> if (!$result) {
> print("Forespørgsel fejlede:\n$query\n");
> print(mysql_error());
> exit;
> }
>
> $row = mysql_fetch_array($result);
> $userlevel = row[0];
>
> print_r($row);
> print("\nuserlevel = $userlevel\n");
Har prøvet ( dog ændret $userlevel = row[0] til $userlevel = $row[0] )

Resultatet er så:
Array ( [0] => 1 [userlevel] => 1 ) userlevel = 1 Hvilket ikke er helt
rigtigt, da den skulle være 2 for brugeren
http://www.buur.info/mdk/site - Bruger/Pass = test/test

Kan det evt. skyldes min database opsætning?
den er (sql)
`userlevel` int(1) NOT NULL default '1',

--
Christoffer



Bent Stigsen (02-05-2005)
Kommentar
Fra : Bent Stigsen


Dato : 02-05-05 16:10

Christoffer wrote:
[snip]
> Kan det evt. skyldes min database opsætning?
> den er (sql)
> `userlevel` int(1) NOT NULL default '1',

Det hjælper en hel del. Det betyder at du ikke skal bruge "count(*) as
userlevel", men bare "userlevel".

For en sikkerheds skyld er bør man bruge "mysql_real_escape_string" på
input som kommer fra en bruger (specielt hvis dele af koden har været
til offentlig skue).

En gang mere (vist nok uden rtykfejl denne gang)
//---
$brugernavn = mysql_real_escape_string($_SESSION['brugernavn']);
$query = "SELECT userlevel FROM bruger WHERE brugernavn = '$brugernavn'";
$result = mysql_query($query);

$row = mysql_fetch_array($result);
$userlevel = $row[0];

print("\nuserlevel = $userlevel\n");
//---

/Bent

Christoffer (02-05-2005)
Kommentar
Fra : Christoffer


Dato : 02-05-05 16:40

> En gang mere (vist nok uden rtykfejl denne gang)
> //---
> $brugernavn = mysql_real_escape_string($_SESSION['brugernavn']);
> $query = "SELECT userlevel FROM bruger WHERE brugernavn = '$brugernavn'";
> $result = mysql_query($query);
>
> $row = mysql_fetch_array($result);
> $userlevel = $row[0];
>
> print("\nuserlevel = $userlevel\n");
> //---
Du er min nye gud! Tusind tak for hjælpen, har rodet med det her problem har
over 1 uge nu!

--
Christoffer



Peter Brodersen (02-05-2005)
Kommentar
Fra : Peter Brodersen


Dato : 02-05-05 09:08

On Sun, 01 May 2005 21:50:28 +0200, Bent Stigsen <ngap@thevoid.dk>
wrote:

>skriv hellere
> brugernavn = '{$_SESSION['brugernavn']}'");

Den notation har jeg også selv tendens til at bruge, men for en god
ordens skyld bør det nok nævnes, at der ikke er nogen forskel på
"$_SESSION[brugernavn]" og "{$_SESSION['brugernavn']}".

Årsagen er, at konstanter ikke bliver ekstrapoleret i quoted strings
(hvilket først for alvor kunne give mærkelige resultater) - og det er
det, der er årsag til at det i øvrigt er uhensigtsmæssigt udenfor
quoted strings blot at angive en string uden quotes - fordi det kan
fortolkes som en konstant.

Det er også et helt bevidst design, at der ikke fremkommer nogen
notice ved fx "$_SESSION[brugernavn]"

--
- Peter Brodersen

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

Månedens bedste
Årets bedste
Sidste års bedste