Data uit database naar variable
Nu mijn vorige probleem is opgelost en het login systeem werkt zit ik met een nieuw probleem.
Ik wil een sessie variabele punten maken, en die vullen met de waarde in database kolom Punten van de gebruiker die inlogt.
In login.php heb ik dat als volgt opgelost:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$sql="SELECT * FROM $tbl_name WHERE Gebruikersnaam='$naam' and Wachtwoord='$wachtwoord' and Recht=0";
$result=mysql_query($sql);
$punten = $result['Punten'];
$count=mysql_num_rows($result);
if($count==1)
{
$_SESSION['naam'] = $naam;
$_SESSION['recht'] = $recht;
$_SESSION['punten'] = $punten;
?>
$sql="SELECT * FROM $tbl_name WHERE Gebruikersnaam='$naam' and Wachtwoord='$wachtwoord' and Recht=0";
$result=mysql_query($sql);
$punten = $result['Punten'];
$count=mysql_num_rows($result);
if($count==1)
{
$_SESSION['naam'] = $naam;
$_SESSION['recht'] = $recht;
$_SESSION['punten'] = $punten;
?>
Het script loopt foutloos, maar dan gaat het door naar de volgende pagina, waar dit staat:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
session_start();
ini_set('display_errors', 1);
error_reporting(E_ALL);
if(!isset($_SESSION['naam']))
{
header("location:spel.php");
}
$user = $_SESSION['naam'];
$recht = $_SESSION['recht'];
$punten = $_SESSION['punten'];
?>
session_start();
ini_set('display_errors', 1);
error_reporting(E_ALL);
if(!isset($_SESSION['naam']))
{
header("location:spel.php");
}
$user = $_SESSION['naam'];
$recht = $_SESSION['recht'];
$punten = $_SESSION['punten'];
?>
...
<p></p>
De output is slechts:
"Je hebt punten."
Dus totaal zonder variabele..
Iemand enig idee?
Gewijzigd op 01/11/2010 12:58:24 door Mark Tielemans
Als je geen error of notice krijgt dan zal de var leeg zijn.
Ik heb het nu net opgelost =)
Ik had een regel uit dat script van internet, waar stond dat ie werkte, maar ik heb er nog wat aan toegevoegd:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
$punten = $row['Punten'];
?>
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
$punten = $row['Punten'];
?>
Nu werkt het wel =)
Thanks voor het meedenken in elk geval!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$sql = 'SELECT *
FROM '. $tbl_name .'
WHERE Gebruikersnaam='. mysql_real_escape_string($naam) .'
AND Wachtwoord='. mysql_real_escape_string($wachtwoord) .'
AND Recht=0';
$query = mysql_query($sql);
$result = mysql_fetch_assoc($query);
$punten = $result['Punten'];
$count = mysql_num_rows($result);
if($count == 1) {
$_SESSION['naam'] = $naam;
$_SESSION['recht'] = $recht;
$_SESSION['punten'] = $punten;
}
?>
$sql = 'SELECT *
FROM '. $tbl_name .'
WHERE Gebruikersnaam='. mysql_real_escape_string($naam) .'
AND Wachtwoord='. mysql_real_escape_string($wachtwoord) .'
AND Recht=0';
$query = mysql_query($sql);
$result = mysql_fetch_assoc($query);
$punten = $result['Punten'];
$count = mysql_num_rows($result);
if($count == 1) {
$_SESSION['naam'] = $naam;
$_SESSION['recht'] = $recht;
$_SESSION['punten'] = $punten;
}
?>
Ja dat in een array zetten is wat ik inmiddels met die regel heb gedaan =) Maar ik snap niet waarom dat moet? Wat is een array eigenlijk precies?
Even Googlen en je zult waarschijnlijk het antwoord vinden. Komt erop neer dat een array een rij met waardes is, dus je zult het in die format moeten plaatsen wil je er dus zo mee omgaan.
nu heb ik nog precies zo'n zelfde regel met nieuwe variabelen:
maar dat werkt weer niet...
Mark Tielemans op 01/11/2010 14:04:26:
De resultaten vanuit de query zijn gerelateerd aan de naam die ze dus hebben in de database. En vanuit je query neem ik dan aan dat het veld dat je bedoeld dus 'Gebruikersnaam' zou moeten heten in plaats van 'Naam'.
Nee, er zijn de velden Gebruikersnaam, Naam, Tussenvoegsel en Achternaam (en natuurlijk Punten).. Dus hij zou gewoon moeten werken.. Ook Achternaam doet t niet.. Zelfde fout als punten in eerste instantie gaf, de variabele verschijnt gewoon niet, zelfs geen php error..
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql="SELECT * FROM $tbl_name WHERE Gebruikersnaam='$naam' and Wachtwoord='$wachtwoord' and Recht=0";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
$punten = $row['Punten'];
$achternaam = $row['Achternaam'];
?>
$sql="SELECT * FROM $tbl_name WHERE Gebruikersnaam='$naam' and Wachtwoord='$wachtwoord' and Recht=0";
$result=mysql_query($sql);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
$punten = $row['Punten'];
$achternaam = $row['Achternaam'];
?>
En dat wil niet werken...
Ja dat staat in al mn scripts al bovenin......
- Selecteer de velden die je wilt hebben, gebruik niet *.
- Gebruik mysql_fetch_assoc.
Als je een foutmelding o.i.d. krijgt geef ons dan de melding.
Welke variabelen bedoel je? Want volgens mij staan ze allemaal buiten quotes(a)
mysql_fetch_assoc zit er al in... Vanuit de link:
"mysql_fetch_assoc() is equivalent to calling mysql_fetch_array() with MYSQL_ASSOC for the optional second parameter. It only returns an associative array. " Dat doe ik al..
Als laatste, dat zou toch niet moeten uitmaken? Ik gebruik * omdat ik dan aanzienlijk minder kans heb op spelfouten + ik test mijn query's altijd op de database zelf en dit werkt, ook met alleen inloggen en het recht meegeven werkt ie.....
Toevoeging op 01/11/2010 19:02:35:
Ik heb het ook met mysql_fetch_assoc geprobeert:
Het stomme is dat van het volgende:
Alleen het deel Punten werkt. De referenties naar de database kloppen. Maar anders gezegd, werkt van de Varchar en de int alleen de int. Kan het daar aan liggen?
Mark Tielemans op 01/11/2010 18:19:23:
hai=)
Welke variabelen bedoel je? Want volgens mij staan ze allemaal buiten quotes(a)
mysql_fetch_assoc zit er al in... Vanuit de link:
"mysql_fetch_assoc() is equivalent to calling mysql_fetch_array() with MYSQL_ASSOC for the optional second parameter. It only returns an associative array. " Dat doe ik al..
Als laatste, dat zou toch niet moeten uitmaken? Ik gebruik * omdat ik dan aanzienlijk minder kans heb op spelfouten + ik test mijn query's altijd op de database zelf en dit werkt, ook met alleen inloggen en het recht meegeven werkt ie.....
Welke variabelen bedoel je? Want volgens mij staan ze allemaal buiten quotes(a)
mysql_fetch_assoc zit er al in... Vanuit de link:
"mysql_fetch_assoc() is equivalent to calling mysql_fetch_array() with MYSQL_ASSOC for the optional second parameter. It only returns an associative array. " Dat doe ik al..
Als laatste, dat zou toch niet moeten uitmaken? Ik gebruik * omdat ik dan aanzienlijk minder kans heb op spelfouten + ik test mijn query's altijd op de database zelf en dit werkt, ook met alleen inloggen en het recht meegeven werkt ie.....
$sql="SELECT * FROM $tbl_name WHERE Gebruikersnaam='$naam' and Wachtwoord='$wachtwoord' and Recht=0"; <- Alle variabelen zitten daar binnen quotes.
Als fetch_array met nog een tweede parameter hetzelfde is als fetch_assoc, waarom gebruik je die dan niet? Dat is veel handiger.
Neen, je moet juist alle velden opnoemen die je wilt hebben want daaraan kan je zien dat je query correct is. Ook is SQL self documenting, dus door naar de query te kijken weet je wat er gebeurd. Verder is het ook nog zo dat * een wildcard is dus in principe hoeft de database niet alle kolommen terug te geven.
Verder raad ik je aan om je SQL in hoofdletters te doen en alle kolommen e.d. in kleine letters. Dus niet Recht, maar recht.
En je kunt ook nog de query tijdens debuggen echo'en om te kijken wat de query precies was.
Fetch assoc heb ik inmiddels ingevoegd, wist niet van het bestaan af.
Ik weet dat het niet aan de query ligt.
Heb je op de login.php pagina wel session_start gedaan?
Toevoeging op 02/11/2010 00:36:29:
Ik heb het inmiddels op een andere manier opgelost :D
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$sql="SELECT Gebruikersnaam, Naam, Punten, Klas, Groep FROM $tbl_name WHERE Gebruikersnaam='$naam' and Wachtwoord='$wachtwoord' and Recht=0";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
$i=0;
while ($i < $count)
{
$vnaam=mysql_result($result,$i,"Naam");
$pts=mysql_result($result,$i,"Punten");
$kls=mysql_result($result,$i,"Klas");
$i++;
}
if($count==1)
{
$_SESSION['naam'] = $naam;
$_SESSION['recht'] = $recht;
$_SESSION['punten'] = $pts;
$_SESSION['klas'] = $kls;
$_SESSION['voornaam'] = $vnaam;
?>
$sql="SELECT Gebruikersnaam, Naam, Punten, Klas, Groep FROM $tbl_name WHERE Gebruikersnaam='$naam' and Wachtwoord='$wachtwoord' and Recht=0";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
$i=0;
while ($i < $count)
{
$vnaam=mysql_result($result,$i,"Naam");
$pts=mysql_result($result,$i,"Punten");
$kls=mysql_result($result,$i,"Klas");
$i++;
}
if($count==1)
{
$_SESSION['naam'] = $naam;
$_SESSION['recht'] = $recht;
$_SESSION['punten'] = $pts;
$_SESSION['klas'] = $kls;
$_SESSION['voornaam'] = $vnaam;
?>
Werkt perfecto! =)
Bedankt voor het meedenken!