[PHP] Loops?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Leon-
  • Registratie: Juli 2005
  • Laatst online: 17-09 20:30
Ik zit al 2 dagen vast met het volgende probleem, en kom er niet uit. Hopelijk kan ik wat advies van jullie krijgen.

Het volledige script is een script om je ergens voor in te schrijven (voor de belangstellenden, een inschrijf systeem voor raids van World of Warcraft) en dit stukje script zou moeten checken of je je al in hebt geschreven.

Heb je je ingeschreven dat geeft hij weer "Signed for this raid" wanneer je je niet hebt ingeschreven zou het script "Not Signed for this raid" moeten weergeven. Alleen doet het script het maar gedeeltelijk. Als mij char_id 2 keer in de database staat (ingeschreven voor 2 verschillende raids) geeft het script het volgende weer als ik 1 van de 2 raids aanklik: Signed for this raid!Not Signed for this raid.

Hieruit blijkt dus dat het script dmv de while loop de if en de else uitvoert, met loops ben ik niet heel erg bekend.

Hopelijk heb ik het probleem een beetje duidelijk uitgelegd en kunnen jullie mij wat tips geven waar ik aan zou kunnen denken.


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                     if(isset($_GET['id'])) 


{                                                           
                    
                    $query = "SELECT * FROM tyranical_signup WHERE char_id = '$_SESSION[gebruiker]'";
                    $result = mysql_query($query);
                    while ($row = mysql_fetch_array($result))
 {
                    
                    if($row['raid_id'] == $_GET['id']) 
                    {
                        echo "Signed for this raid!";
                        
                    }
                    else
                    {
                        echo "Not Signed for this raid";
                    }
                        
    }
}


Tabel:

PHP:
1
2
3
4
5
6
7
CREATE TABLE `tyranical_signup` (
  `id` int(11) NOT NULL auto_increment,
  `char_id` text NOT NULL,
  `raid_id` int(11) NOT NULL default '0',
  `comments` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=8 ;

Acties:
  • 0 Henk 'm!

  • Tux
  • Registratie: Augustus 2001
  • Laatst online: 18-09 21:53

Tux

Je haalt nu alle records op waarvoor geldt dat die hoort bij een bepaald char_id. Het is ook mogelijk om de query uit te breiden met een extra item bij WHERE:

code:
1
$query = "SELECT * FROM tyranical_signup WHERE char_id = 'gebruiker' AND raid_id = '" . intval($_GET['id']) . "'";


Als je dan het volgende doet:

code:
1
2
3
4
5
if (mysql_num_rows($result) == 1) {
//hier is iemand dus aangemeld
} else {
//hier dus niet
}


Werkt het wel als het goed is

The NS has launched a new space transportation service, using German trains which were upgraded into spaceships.


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Je kan sowieso je query aanpassen door 'm uit te breiden met "AND raid_id = $_GET['ID']"
Als je geen resultaten terug krijgt is ie niet ingeschreven, anders wel.

Je houdt op dit moment overigens nog geen rekening met sql injection

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 10:08

Spockz

Live and Let Live

Je vraagt nu in feite alle aanmeldingen voor een bepaalde character op. Dit komt uiteindelijk in een result terecht waar je doorheen wandelt. Dit wandelen doe je totdat er geen rows (inschrijvingen) meer zijn.

Je krijgt nu dus terecht de melding dat je ingeschreven bent voor het ID dat is meegegeven in de GET. En voor al je andere inschrijvingen krijg je de melding dat je niet bent ingeschreven omdat dat in de else staat.

Als je dit op zou willen lossen zou je een andere query moeten gebruiken:
PHP:
1
2
  $q = 'SELECT raid_id FROM tyranical_signup WHERE char_id = "%s" AND raid_id = "%s"';
  $q = sprintf ($q, addslashes($_SESSION['gebruiker']), (int) $_GET['id']);


En als je vervolgens hiermee kijkt wat je terugkrijgt als je die query uitvoert moet je wel verderkomen denk ik.

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • ikke007
  • Registratie: Juni 2001
  • Laatst online: 18-09 14:10
zie vorige reacties, was te laat

[ Voor 99% gewijzigd door ikke007 op 27-06-2007 15:11 . Reden: the others got on me ]

Lets remove all security labels and let the problem of stupidity solve itself


Acties:
  • 0 Henk 'm!

  • Leon-
  • Registratie: Juli 2005
  • Laatst online: 17-09 20:30
Tux schreef op woensdag 27 juni 2007 @ 15:06:
Je haalt nu alle records op waarvoor geldt dat die hoort bij een bepaald char_id. Het is ook mogelijk om de query uit te breiden met een extra item bij WHERE:

code:
1
$query = "SELECT * FROM tyranical_signup WHERE char_id = 'gebruiker' AND raid_id = '" . intval($_GET['id']) . "'";


Als je dan het volgende doet:

code:
1
2
3
4
5
if (mysql_num_rows($result) == 1) {
//hier is iemand dus aangemeld
} else {
//hier dus niet
}


Werkt het wel als het goed is
Wanneer ik deze manier gebruik (alles even geanalyseerd dmv php.net anders leer je er nooit wat van :)) en hij moet echoën dat $_SESSION['user'] aangemeld is crasht het script? ik krijg een ontzettende lange laad tijd .. ik heb hem niet laten uitladen, ben bang dat de serverload er erg hoog door wordt?!

Acties:
  • 0 Henk 'm!

  • KatirZan
  • Registratie: September 2001
  • Laatst online: 18-09 12:53

KatirZan

Wandelende orgaanzak

serverload zal niet hoog worden daardoor, maar hij zou in principe (bij een niet al te grote database) er geen minuten over mogen doen, enkele seconden zou al voldoende moeten zijn...

als ik een lijst van leden inc. mailadressen opzoek bij onze community (16.000 leden) dan staat dit binnen 15 seconden op mijn scherm...

Wabbawabbawabbawabba


Acties:
  • 0 Henk 'm!

  • elmer25
  • Registratie: Februari 2002
  • Laatst online: 01-12-2021

elmer25

ooit was ik 25

Leon- schreef op woensdag 27 juni 2007 @ 16:38:
[...]


Wanneer ik deze manier gebruik (alles even geanalyseerd dmv php.net anders leer je er nooit wat van :)) en hij moet echoën dat $_SESSION['user'] aangemeld is crasht het script? ik krijg een ontzettende lange laad tijd .. ik heb hem niet laten uitladen, ben bang dat de serverload er erg hoog door wordt?!
En met welke foutmelding crashed je script dan?

Acties:
  • 0 Henk 'm!

  • Leon-
  • Registratie: Juli 2005
  • Laatst online: 17-09 20:30
elmer25 schreef op woensdag 27 juni 2007 @ 16:53:
[...]

En met welke foutmelding crashed je script dan?
Naja hij "crasht" niet met een foutmelding, hij blijft oneindig laden wat resulteert in een enorme hoge cpu en geheugen load op mn eigen pc.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15:14

Creepy

Tactical Espionage Splatterer

Misschien eens tijd om zelf aan het debuggen te slaan? Zie ook Programming FAQ - Algemeen - Tips bij debuggen. We verwachen hier van je dat je in eerste instantie zelf aan de slag gaat om je probleem op te lossen. Nu dump je je probleem met min of meer de vraag "wie fixt het voor me" wat hier niet de bedoeling is.

Dus: wat heb je nu zelf geprobeerd om je vragen op te lossen en wat lukte daar dan niet mee?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1