Waar moet ik de else statement plaatsen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gijs Beusekom

Gijs Beusekom

25/06/2019 17:00:22
Quote Anchor link
Dag allemaal.

Aan de hand van Wordpress ben ik bezig een website te bouwen en heb besloten php te willen gaan leren. Ik ben er net een paar dagen mee bezig. Ik kan alles dat ik leer direct op de website toepassen, dus dat ik mooi handig.

Om mensen via een link naar hun profiel te leiden heb ik de volgende snippet gevonden op Github:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
add_shortcode( 'CUSER-PROFILE-OVERMIJ', 'cuser_profile_shortocode_handler' );
function
cuser_profile_shortocode_handler( $atts ){
    $atts = shortcode_atts( array(
        'text'        => 'my profile',
    ),
$atts );
    
    if( !is_user_logged_in() )
        return '';
    
    $link = home_url( '/leden/' . bp_core_get_username( get_current_user_id() ) . '/profile/edit' );
    return "<a href='". esc_attr( $link ) ."'>" . $atts['text'] . "</a>";
}

?>


Het probleem is dat mensen die niet zijn ingelogd in de website naar de 404-pagina worden gestuurd omdat de link naar hun profiel niet bestaat. Ik wil graag een else-statement toevoegen aan de code, zodat mensen die niet zijn ingelogd worden doorverwezen naar een specifieke pagina (de pagina moet nog worden gemaakt, dus in eerste instantie wil uitgelogde mensen die klikken op de link doorsturen naar home).

Ik heb geprobeerd een else toe te voegen op de volgende manier:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
add_shortcode( 'CUSER-PROFILE-OVERMIJ', 'cuser_profile_shortocode_handler' );
function
cuser_profile_shortocode_handler( $atts ){
    $atts = shortcode_atts( array(
        'text'        => 'my profile',
    ),
$atts );
    
    if( !is_user_logged_in() )
        return '';
    
    $link = home_url( '/leden/' . bp_core_get_username( get_current_user_id() ) . '/profile/edit' );
    return "<a href='". esc_attr( $link ) ."'>" . $atts['text'] . "</a>";

        else( !is_user_logged_out() )
        return '';
    
    $link2 = home_url;
    return "<a href='". esc_attr( $link2 ) ."'>" . $atts['text'] . "</a>";
}

?>


Ik krijg dan een foutmelding dat de else onverwacht is (syntax error, unexpected 'else' (T_ELSE)).

Hoe kan de else op een goede manier invoegen in de code, zodat uitgelogde gebruikers naar de home worden verwezen?

Bedankt en groet,

Gijs

Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 25/06/2019 17:03:14 door - Ariën -
 
PHP hulp

PHP hulp

28/03/2024 09:07:04
 
Adoptive Solution

Adoptive Solution

25/06/2019 17:05:16
Quote Anchor link
Even de handleiding raadplegen.
https://www.w3schools.com/php7/php7_if_else.asp
 
- Ariën  -
Beheerder

- Ariën -

25/06/2019 17:06:22
Quote Anchor link
Ik zelf raad altijd aan om accolades te gebruiken. Dus dan krijg je zoiets als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if($iets == 'dit') {
    // $iets is gelijk aan 'dit'
} elseif($iets == 'dat') {
    // $iets is gelijk aan 'dat'

} else {
    // $iets is niet gelijk aan 'dit' of 'dat'
}
?>
 
Rob Doemaarwat

Rob Doemaarwat

25/06/2019 17:15:02
Quote Anchor link
Even inhakend op Ariën hierboven: In jouw stukje code worden *geen* accolades gebruikt. Dan valt alleen het volgende statement onder de if. De if op regel 8 heeft dus alleen controle over regel 9. Niet wat op regel 11 en 12 volgt.

Ander belangrijk ding: "return" betekent "toedeledokie ik ben er klaar mee - hier zul je het mee moeten doen". Na regel 12 wordt iedereen er dus uit gebonjourd en alles *na* regel 12 wordt nooit uitgevoerd (omdat er geen if conditie van toepassing is). Je toevoeging vanaf regel 14 zal dus - ook als ie wel werkt - nooit worden uitgevoerd.

Dan op die else: die hoort altijd bij een if. Als je de if van regel 8 bedoelt moet je regel 11 en 12 dus even verwijderen (anders "horen ze niet meer bij elkaar").

Maarrr: voordat je zomaar blind gaat lopen rommelen "net zolang tot het werkt" is het misschien wel handig om toch heel even een beetje door de handleiding te grutten om in ieder geval een paar basale vaardigheden op te doen.
 
Thomas van den Heuvel

Thomas van den Heuvel

25/06/2019 17:41:49
Quote Anchor link
En naast het gebruik van accolades, ook al heeft het if-( en eventuele else(if)-)statement(s) maar betrekking op één regel code, is het ook handig om die passages (stukken code of "code blokken") eenzelfde inspring te geven zodat je kunt zien dat deze bij elkaar horen, zoals @Ariën hierboven ook doet.

In sommige programmeertalen (Python?) heeft deze inspring zelfs syntactische betekenis, die taal kent geen accolades (geloof ik?) maar bepaalt de inspring tot welk blok de code behoort. Met eenzelfde voorzichtigheid, ook al werk je met accolades, zou je met PHP-code om moeten gaan, het is namelijk nogal belangrijk voor de juiste werking dat code in de juiste gevallen wordt uitgevoerd :).
 
Gijs Beusekom

Gijs Beusekom

26/06/2019 14:23:51
Quote Anchor link
Adoptive Solution op 25/06/2019 17:05:16:
Even de handleiding raadplegen.
https://www.w3schools.com/php7/php7_if_else.asp


Ik heb inderdaad naar een andere handleiding gekeken, maar door de stortcode wordt het denk ik allemaal wat anders dat in de standaard tekst staat beschreven. Ik kom er aan de hand van de handleiding nog niet helemaal uit.

Toevoeging op 26/06/2019 14:24:14:

- Ariën - op 25/06/2019 17:06:22:
Ik zelf raad altijd aan om accolades te gebruiken. Dus dan krijg je zoiets als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if($iets == 'dit') {
    // $iets is gelijk aan 'dit'
} elseif($iets == 'dat') {
    // $iets is gelijk aan 'dat'



} else {
    // $iets is niet gelijk aan 'dit' of 'dat'
}
?>




Toevoeging op 26/06/2019 14:28:14:

Rob Doemaarwat op 25/06/2019 17:15:02:
Even inhakend op Ariën hierboven: In jouw stukje code worden *geen* accolades gebruikt. Dan valt alleen het volgende statement onder de if. De if op regel 8 heeft dus alleen controle over regel 9. Niet wat op regel 11 en 12 volgt.

Ander belangrijk ding: "return" betekent "toedeledokie ik ben er klaar mee - hier zul je het mee moeten doen". Na regel 12 wordt iedereen er dus uit gebonjourd en alles *na* regel 12 wordt nooit uitgevoerd (omdat er geen if conditie van toepassing is). Je toevoeging vanaf regel 14 zal dus - ook als ie wel werkt - nooit worden uitgevoerd.

Dan op die else: die hoort altijd bij een if. Als je de if van regel 8 bedoelt moet je regel 11 en 12 dus even verwijderen (anders "horen ze niet meer bij elkaar").

Maarrr: voordat je zomaar blind gaat lopen rommelen "net zolang tot het werkt" is het misschien wel handig om toch heel even een beetje door de handleiding te grutten om in ieder geval een paar basale vaardigheden op te doen.


Ik zal in het vervolg accolades gebruiken. Bedankt voor de tip.

De orginele code werkt wel goed voor ingelogde gebruikers, dus als de terurn onder de if zou betekenen dat de ingelogde bezoekers de stortcode niet zouden kunnen zien klopt er iets niet (ze kunnen de stortcode wel zien).

Als ik de else onder 12 zet veranderd de shortcodel-link naar de code onder else, terwijl wel aan de if-voorwaarde wordt voldaan. Heel vreemd (voor mij). Ik begrijp er al met al nog niet veel van.



Toevoeging op 26/06/2019 14:28:47:

Thomas van den Heuvel op 25/06/2019 17:41:49:
En naast het gebruik van accolades, ook al heeft het if-( en eventuele else(if)-)statement(s) maar betrekking op één regel code, is het ook handig om die passages (stukken code of "code blokken") eenzelfde inspring te geven zodat je kunt zien dat deze bij elkaar horen, zoals @Ariën hierboven ook doet.

In sommige programmeertalen (Python?) heeft deze inspring zelfs syntactische betekenis, die taal kent geen accolades (geloof ik?) maar bepaalt de inspring tot welk blok de code behoort. Met eenzelfde voorzichtigheid, ook al werk je met accolades, zou je met PHP-code om moeten gaan, het is namelijk nogal belangrijk voor de juiste werking dat code in de juiste gevallen wordt uitgevoerd :).


Bedankt voor de tip!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.