[php] if commando werkt niet?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Elect
  • Registratie: Mei 2000
  • Niet online
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<? $HTTP_COOKIE_VARS["lidnaam, passgecodeerd"]; include('config/config.php');
           
mysql_connect("$hostname","$username","$password");
mysql_select_db("$database");
           
$select = "SELECT * FROM leden WHERE lidnaam='$lidnaam'";
$query = mysql_query($select);

while ($list = mysql_fetch_object($query)) {
if ( ($list->status == 'Administrator') || ($list->status == 'Moderator') ) {
    echo "";
    }
else {
    exit;
    }
}
               
?>


Ik ben al een half uur bezig aan dit stomme stukje, maar ik zie niet waarom hij niet werkt.

Als ik niet ben ingelogd heb ik geen cookie, en nog laat hij me toe tot de pagina. Oftwel hij moet me nog herkennen als Administrator of Moderator? :?
Zie ik nu iets cruciaals over het hoofd of?

[ Voor 12% gewijzigd door Elect op 11-10-2003 15:54 ]

HelmChat.eu - Free Motorcycle Group Chats


Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
Zoek eens op superglobals
hint: ($_COOKIE['lidnaam'])

Icons are overrated


Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

Iets anders:
Je hoeft geen " en " te zetten om $databse (dit geldt ook voor de regel er boven
PHP:
1
2
mysql_connect($hostname, $username, $password); 
mysql_select_db($database);
PHP:
1
$select = "SELECT * FROM leden WHERE lidnaam=".$_COOKIE['lidnaam'];

[ Voor 30% gewijzigd door dArtagnan op 11-10-2003 16:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Koraalduivel schreef op 11 October 2003 @ 16:00:
PHP:
1
$select = "SELECT * FROM leden WHERE lidnaam=".$_COOKIE['lidnaam'];
Ik mag aannemen dat je $_COOKIE['lidnaam'] als String wil behandelen en dat je niet zomaar aanneemt dat de waarde van het cookie veilig is, dus:
PHP:
1
$select = "SELECT * FROM leden WHERE lidnaam = '" . mysql_escape_string($_COOKIE['lidnaam']) . "'";

Daarnaast is het gebruik van * niet erg netjes. Selecteer alleen de velden die je nodig hebt, en als je ze allemaal nodig hebt kun je ze het beste ook gewoon volledig specificeren.

Acties:
  • 0 Henk 'm!

  • Elect
  • Registratie: Mei 2000
  • Niet online
Bedankt voor de reacties alvast, hij is wel beter beveiligd :)
alleen krijg ik nogsteeds dat ik gewoon kan inloggen op de pagina. Oftewel hij exit nogsteeds niet als ik niet ingelogd ben (en dus geen cookie heb).

HelmChat.eu - Free Motorcycle Group Chats


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Dat komt doordat de while lus niet wordt uitgevoerd.

[ Voor 4% gewijzigd door Olaf van der Spek op 11-10-2003 18:38 ]


Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

Je krijgt toch maar één resultaat (lijkt me wel de bedoeling) dus je kunt net zo goed het volgende doen:
PHP:
1
2
3
4
5
6
7
8
$list = mysql_fetch_object($query);
if ( ($list->status == 'Administrator') || ($list->status == 'Moderator') ) { 
    echo ""; 
    } 
else { 
    exit; 
    } 
}

Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
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
28
29
30
31
32
33
34
35
36
37
<? 
include('config/config.php');

/* de volgende 2 regels zou ik in config.php zetten */
mysql_connect("$hostname","$username","$password");
mysql_select_db("$database");



$lidnaam = $HTTP_COOKIE_VARS["lidnaam"];

           
/* $select is een beetje overbodig */
$query = mysql_query("SELECT [benodigde velden] FROM leden WHERE lidnaam='$lidnaam'") or die("[regel vd query]: ". $mysql_error());
/* 
regel vd query is wel makkelijk als een script hebt dat veel queries uit voert.
Verder moet je alleen de benodige velden in je query zetten aangezien dat een kan schelen in de tijd dat je quey word uitgevoerd

passgecodeerd wordt helemaal niet gebruikt, kun je beter wel doen

mysql_query("SELECT [benodigde velden] FROM leden WHERE lidnaam =' $lidnaam AND pass = 'passgecodeerd'
*/


while ($list = mysql_fetch_object($query)) 
{
    if ( ($list->status == 'Administrator') || ($list->status == 'Moderator') ) 
    {
        echo "";
    }
    else 
    {
        exit;
    }
}
               
?>


Verder mag je wel iets aan je coding style doen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
if ()
{
    doe_iets();
     
    if(iets_anders()
    {
         doe_nog_iets();
    }
else
{
    doe_iets_anders();
}

ipv extreem voorbeeld

PHP:
1
2
3
4
5
6
7
if (){
doe_iets();    
if(iets_anders() {
 doe_nog_iets();
}else{
doe_iets_anders();
}


Het eerste wat ik heb geleerd toen ik ging programeren voor een werkgever.
Het maakt je code een stuk leesbaarder.

Kijk verder eens naar de cooies die je zet.

Kleine tip:
Zet slechts een cookie met alle waarden die nodig hebt.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$value = $naam.":".$pass.":".$nog_iets;
setcookie($naam, $value, $expire, $domain, $sucure);



/* om je cookie terug te halen: */

$cookie = $_COOKIE[$naam];
$cookie = expolode(":", $cookie);

/* Nu heb je al alle waarden in een array,
Persoonlijk vind ik dit mooier als een aparte cookie zetten voor elke waarde die nodig hebt */

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Suepahfly schreef op 11 October 2003 @ 22:50:

PHP:
1
2
3
4
5
6
7
if (){
doe_iets();    
if(iets_anders() {
 doe_nog_iets();
}else{
doe_iets_anders();
}
die gaat een parse error geven. :P je mist namelijk een haakje
Pagina: 1