Waar moet ik de else statement plaatsen?
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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>";
}
?>
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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>";
}
?>
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.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 25/06/2019 17:03:14 door - Ariën -
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.
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 :).
Adoptive Solution op 25/06/2019 17:05:16:
Even de handleiding raadplegen.
https://www.w3schools.com/php7/php7_if_else.asp
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:
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.
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 :).
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!