[PHP] Array geeft kopzorgen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mensen,

Ik ben bezig met mijn site en daar zit een functie op dat iedereen zo'n avatar kan nemen. Als je over een nickname gaat dan krijg je de avatar te zien. Dit popt dan up. Dat werkt allemaal en dat is glukkig het probleem niet.

PHP echter wel. Ik krijg helemaal geen foutmelding maar de PHP parser stopt er halverwege gewoon mee.

Hieronder de 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
28
29
function navAvatarToevoegen($gebruikerID) {
    global $navAvatar;

    if(isset($navAvatar) == false) {
                                // even ranzige oplossing om een array te declareren, anders
                                // geeft array_push een foutmelding dat 't geen array is
        $navAvatar[0] = 0;
    }

    for($i = 0; $i < count($navAvatar); $i++) {
        if($navAvatar[$i] == $gebruikerID) {
            exit;
        }
    }

    array_push($navAvatar, $gebruikerID);

}

function navAvatarLinkToevoegen($gebruikerID) {
    global $navAvatar;

    navAvatarToevoegen($gebruikerID);

    $query = mysql_query("select nick from gebruiker where ID=".$gebruikerID);
    $data = mysql_fetch_array($query);

    echo "<a href='leden_detail.php?id=".$gebruikerID."' onMouseMove='beweegpopup(avatar_".$gebruikerID.");' onMouseOut='verbergpopup(avatar_".$gebruikerID.");' class='comment'>".$data["nick"]."</a>";
}


Als ik de 1e keer een avatar toevoeg dan gaat 't goed. Doe ik dat een 2e keer dan stopt PHP er gewoon mee.... Het zit 'm in de regel "array_push($navAvatar, $gebruikerID);". Als die dus een 2e keer wordt uitgevoerd... boem... niets meer...

Kent iemand dit probleem? suggesties? oplossingen voor dit probleem?

[ Voor 8% gewijzigd door Verwijderd op 06-06-2003 15:03 ]


Acties:
  • 0 Henk 'm!

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 12:00

Pelle

🚴‍♂️

Meer iets voor de buren dit :)

Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Als je wat echo's in je code zet (na elk statement/commando één) dan weet je precies waar hij er gewoon uitknalt..

(dat noemen ze debuggen!)

[ Voor 4% gewijzigd door thomaske op 06-06-2003 13:39 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
euh die exit? moet vast return zijn?

Acties:
  • 0 Henk 'm!

Verwijderd

Ja die exit staat daar wel creatief :). Als de avatar gevonden is : exit...
'k Zou sowieso eens naar je code kijken.. dit is idd meer iets voor de buren

[ Voor 35% gewijzigd door Verwijderd op 06-06-2003 13:49 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Verder nog wat kleine opmerkingen over je code:

PHP:
1
2
3
4
5
6
7
8
9
if(isset($navAvatar) == false) {
   // even ranzige oplossing om een array te declareren, anders
   // geeft array_push een foutmelding dat 't geen array is
   $navAvatar[0] = 0;
}

//---> dit is beter:
if (!isset($navAvatar) || !is_array($navAvatar)) {
   $navAvatar = array();


en

PHP:
1
2
3
4
5
for($i = 0; $i < count($navAvatar); $i++) {
    if($navAvatar[$i] == $gebruikerID) {
        exit; # lijkt me trouwens dat het hier niet goed gaat..
    }
}

Je gaat hier blindelings vanuit dat de index van je array opeenlopend is, beter is om gewoon het array door te lopen:

PHP:
1
2
3
4
5
foreach ($navAvatar as $avatar_item) {
    if ($avatar_item == $gebruikerID) {
        exit(); 
    }
}


en eigenlijk nog beter is:
PHP:
1
2
3
if (in_array($gebruikerID, $navAvatar)) {
    return;
}

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Er zitten wel wat rare en foute dingen in je code. Ten eerst zou je de [php][/php] tag kunnen gebruiken, zodat het wat beter leesbaar is voor ons.

Waarvoor gebruik je $navAvatar, ik zie dat het een array zou moeten zijn, maar hij hoeft blijkbaar niet perse te bestaan.

offtopic:
Paar rare constructies verder, maar dat terzijde
* isset($navAvatar) == false ==> !isset($navAvatar)
* $navAvatar[0] = 0 ==> $navAvatar = array();
* exit ==> exit();

[ Voor 10% gewijzigd door Verwijderd op 06-06-2003 14:21 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

LOL! Great minds, think alike.. :)

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die opmerking over dat debuggen. Dat heb ik al gedaan. Over die exit. Ik moet op een gegeven moment een array hebben met allemaal unieke avatars. Dus als gebruiker 10, 5 keer op de pagina komt, dan hoef ik 'm maar een keertje te hebben.

Enfin, 't klinkt allemaal leuk en aardig de kritiek op mijn manier van coden, toegegeven het is niet de meest galante, maar werken doet 't nog steeds niet! :-s Het gaat nog steeds om het array probleem. Waarom knalt die parser er daar nou gewoon spontaan uit zonder het genereren van een foutmelding?

Btw: bedankt voor de code tips, ik zal ze meenemen ;) Je merkt al dat ik nog niet heel veel ervaring met goede php code heb.

[ Voor 58% gewijzigd door Verwijderd op 06-06-2003 15:01 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Verwijderd schreef op 06 juni 2003 @ 14:56:
Die opmerking over dat debuggen. Dat heb ik al gedaan. Enfin, 't klinkt allemaal leuk en aardig de kritiek op mijn manier van coden, toegegeven het is niet de meest galante, maar werken doet 't nog steeds niet! :-s
Erg vervelend voor je, maar m'n glazen bol is nog steeds niet gemaakt.
Iets meer info is gewenst. hoe heb je gedebugged, etc. En hb je die exit al veranderd in een return?

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thomaske, ook jammer voor je dat je glazenbol nog steeds kapot is.
Als ik de 1e keer een avatar toevoeg dan gaat 't goed. Doe ik dat een 2e keer dan stopt PHP er gewoon mee.... Het zit 'm in de regel "array_push($navAvatar, $gebruikerID);". Als die dus een 2e keer wordt uitgevoerd... boem... niets meer...
Return heeft ook geen zin btw.

[ Voor 11% gewijzigd door Verwijderd op 06-06-2003 15:04 ]


Acties:
  • 0 Henk 'm!

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Maak van die exit eens een break; . Voor de rest zou ik willen weten wat en hoe die $navAvatar in elkaar zit. :)

.edit: waarom loop je eigenlijk door die array als je verder toch niks doet in die loop :?

.edit2: ah ik snap m al. Gewoon in_array() gebruiken daarvoor en inderdaad returnen voor de array_push, dan ben je klaar.

.edit3: De reden dat hij er de 2e keer uitknalt moet dan zijn dat je de tweede keer dezelfde $gebruikersID meegeeft aan de functie navAvatarToevoegen(). Daar moet je dus even kijken.

[ Voor 76% gewijzigd door RedRose op 06-06-2003 15:22 ]

Sundown Circus


Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Verwijderd schreef op 06 June 2003 @ 15:03:
Return heeft ook geen zin btw.
Maar waarom gebruik je niet de functie in_array voor het bekijken of ie wel of niet in de array al staat? Dan hoef je er zelf iig niet meer doorheen te lopen. :)
PHP:
1
2
if (!in_array($gebruikerID, $navAvatar))
   array_push($navAvatar, $gebruikerID);

[ Voor 9% gewijzigd door Banpei op 06-06-2003 15:56 ]

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Sla de manual er maar eens op na, exit betekend onmiddelijk beeindiging van je script!
Een vrij ongebruikelijke call tenzij je aan het debuggen bent.
array_push wordt dus nooit bereikt wanneer er een match is.

Zoals al eerder gemeld, dat moet een break zijn.

Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

stekkel schreef op 06 juni 2003 @ 16:14:
Een vrij ongebruikelijke call tenzij je aan het debuggen bent.
array_push wordt dus nooit bereikt wanneer er een match is.

Zoals al eerder gemeld, dat moet een break zijn.
Wat ik uit zijn code begrijp is dat als er geen match is het ID in de array gestopt moet worden, dus als er wel een match is moet de loop onderbroken worden (break dus), maar als je een break neerzet breekt ie de loop af en gaat ie het ID alsnog aan de array toevoegen.

Maw: in_array. O-)

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.

Pagina: 1