[PHP] Can't use function return value in write context

Pagina: 1
Acties:

Vraag


  • virtualite
  • Registratie: September 2011
  • Laatst online: 08-10 07:13
Ik loop tegen een probleem aan in een script. Ik krijg de melding "[PHP] Can't use function return value in write context". Ik vermoed dat ik verderop in mijn php script ook nog tegen problemen aan ga lopen.

Het gaat om dit stuk php.
code:
1
if(empty(trim($_POST["username"]))){


De code heeft betrekking tot onderstaande stuk php.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if($_SERVER["REQUEST_METHOD"] == "POST"){

    if(empty(trim($_POST["username"]))){

        $username_err = 'Please enter username.';

    } else{

        $username = trim($_POST["username"]);

    }

     if(empty(trim($_POST['password']))){

        $password_err = 'Please enter your password.';

    } else{

        $password = trim($_POST['password']);

    }

Nu heb ik gekeken en een kleine aanpassing gedaan, echter resulteerd dit weer in een andere fout, namelijk: Syntax error, unexpected 'if' (T_IF)

De onderstaande code heb ik gebruikt.
code:
1
2
$trim_post = trim($_POST["username"]
if (!empty($trim_post)) {

Ik hoop dat jullie me kunnen helpen bij het oplossen van deze error(s) en me vertellen wat ik precies verkeerd doe.

[ Voor 3% gewijzigd door virtualite op 27-09-2017 14:35 ]

Beste antwoord (via virtualite op 27-09-2017 14:49)


  • hellfighter87
  • Registratie: Mei 2008
  • Laatst online: 07:42
$trim_post = trim($_POST["username"]); <= zowel een `;` vergeten als een `)`

Alle reacties


  • nIghtorius
  • Registratie: Juli 2002
  • Laatst online: 28-09 18:50

nIghtorius

Poef!

je bent een ; vergeten achter trim($_POST["username"]

Ryzen 9 5900X @ 5.1Ghz | MPG B550 GAMING CARBON | 96GB DDR4-3200 | RTX 4070TI | 2TB + 1TB m.2 SSD | 3x 1TB HDD | 1x 2TB SATA SSD | 32" G3223Q (4K/144Hz)


  • virtualite
  • Registratie: September 2011
  • Laatst online: 08-10 07:13
nIghtorius schreef op woensdag 27 september 2017 @ 14:36:
je bent een ; vergeten achter trim($_POST["username"]
Aangepast, maar krijg dan de melding syntax error, unexpected ';'.

Acties:
  • +2 Henk 'm!

  • Sadieka
  • Registratie: Oktober 2006
  • Laatst online: 07-10 10:32
je hebt de functie ook niet gesloten:
trim($_POST["username"]);

Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • hellfighter87
  • Registratie: Mei 2008
  • Laatst online: 07:42
$trim_post = trim($_POST["username"]); <= zowel een `;` vergeten als een `)`

Acties:
  • +1 Henk 'm!

  • juiced01
  • Registratie: December 2009
  • Laatst online: 00:43
@nIghtorius bedoelt dat je de ; bent vergeten in je laatste code voorbeeld.
virtualite schreef op woensdag 27 september 2017 @ 14:33:
code:
1
2
$trim_post = trim($_POST["username"]
if (!empty($trim_post)) {
Er mist een puntkomma en sluitend haakje achter trim($_POST["username"].

[ Voor 2% gewijzigd door juiced01 op 27-09-2017 14:42 . Reden: hellfighter87 was me voor :) ]


Acties:
  • +1 Henk 'm!

  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 08-10 16:51

NeFoRcE

Hallo? Bent u daar?

Sinds PHP wat stricter is geworden, loop je tegen dit soort fouten aan.

Je moet eerst de 'TRIM' in een variabele zetten. Die vervolgens op empty controleren, dus:

$trim = trim($_POST["username"]);

if (empty($trim)) {
blabla
}

Professioneel Heftruck Syndroom


Acties:
  • +3 Henk 'm!

  • 0stone0
  • Registratie: Maart 2015
  • Laatst online: 02-10 11:36

0stone0

01000010 01101111 01100101 !

Waarom check je of iets leeg is met behulp van trim?

Als iemand een 'spatie' in zn wachtwoord heeft staan, filter je deze eruit.

Ik zal trim pas gebruiken nadat je checkt of het empty is;

code:
1
2
3
4
5
6
7
8
9
10
11
if($_SERVER["REQUEST_METHOD"] == "POST"){

    if(empty($_POST["username"])) {

        $username_err = 'Please enter username.';

    } else{

        $username = trim($_POST["username"]);

    }

"~~Linux is only free if your time has no value"


  • virtualite
  • Registratie: September 2011
  • Laatst online: 08-10 07:13
0stone0 schreef op woensdag 27 september 2017 @ 14:46:
Waarom check je of iets leeg is met behulp van trim?

Als iemand een 'spatie' in zn wachtwoord heeft staan, filter je deze eruit.

Ik zal trim pas gebruiken nadat je checkt of het empty is;

code:
1
2
3
4
5
6
7
8
9
10
11
if($_SERVER["REQUEST_METHOD"] == "POST"){

    if(empty($_POST["username"])) {

        $username_err = 'Please enter username.';

    } else{

        $username = trim($_POST["username"]);

    }
Goede tip, zal hier naar gaan kijken. Bedankt.
NeFoRcE schreef op woensdag 27 september 2017 @ 14:42:
Sinds PHP wat stricter is geworden, loop je tegen dit soort fouten aan.

Je moet eerst de 'TRIM' in een variabele zetten. Die vervolgens op empty controleren, dus:

$trim = trim($_POST["username"]);

if (empty($trim)) {
blabla
}
Klopt, dit had ik gelezen.

Bedankt allemaal voor het corrigeren. Voel me stom dat ik over ); heen heb gekeken.

[ Voor 40% gewijzigd door virtualite op 27-09-2017 14:49 ]


Acties:
  • +1 Henk 'm!

  • TERW_DAN
  • Registratie: Juni 2001
  • Niet online

TERW_DAN

Met een hamer past alles.

virtualite schreef op woensdag 27 september 2017 @ 14:46:
Bedankt allemaal voor het corrigeren. Voel me stom dat ik over ); heen heb gekeken.
Een goede IDE kan daarbij helpen. Dit soort suffe dingen over 't hoofd zien gebeurt iedereen, dus iets met goede syntaxhighlighting e.d. werkt erg prettig.

  • juiced01
  • Registratie: December 2009
  • Laatst online: 00:43
Overigens zou ik je willen aanraden om te lezen op php.net wanneer je niet zeker weet wat eea doet. Dan leer je echt wat en waarom je aan kan gebruiken :). Er is nog zo veel te leren!

Als je bijvoorbeeld op de pagina over empty kijkt, zie je de note staan:
Note:
Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words, the following will not work: empty(trim($name)). Instead, use trim($name) == false.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je de foutmelding letterlijk in Google stopt is dit de tweede hit met exact hetzelfde probleem dat jij had én de bijbehorende oplossing. Bovendien zijn syntaxfouten vrijwel altijd vergeten puntkomma's of haakjes (of zoals hier beide) en dus altijd makkelijk door je zelf op te lossen. Een klein beetje meer zelfredzaamheid is in dit geval wel welkom. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • virtualite
  • Registratie: September 2011
  • Laatst online: 08-10 07:13
juiced01 schreef op woensdag 27 september 2017 @ 14:49:
Overigens zou ik je willen aanraden om te lezen op php.net wanneer je niet zeker weet wat eea doet. Dan leer je echt wat en waarom je aan kan gebruiken :). Er is nog zo veel te leren!

Als je bijvoorbeeld op de pagina over empty kijkt, zie je de note staan:


[...]
Ik ben pas twee weken bezig met het leren van PHP (en programmeren in geheel). Ik zal die site zeker gaan raadplegen.
NMe schreef op woensdag 27 september 2017 @ 14:51:
Als je de foutmelding letterlijk in Google stopt is dit de tweede hit met exact hetzelfde probleem dat jij had én de bijbehorende oplossing. Bovendien zijn syntaxfouten vrijwel altijd vergeten puntkomma's of haakjes (of zoals hier beide) en dus altijd makkelijk door je zelf op te lossen. Een klein beetje meer zelfredzaamheid is in dit geval wel welkom. :)
Klopt, hier had ik ook mijn aangepaste stuk vandaan. Echter inderdaad stom van mij dat ik de puntkomma en haakje vergat.

[ Voor 39% gewijzigd door virtualite op 27-09-2017 14:53 ]


  • juiced01
  • Registratie: December 2009
  • Laatst online: 00:43
Zoals hierboven al gemeld, kijk eens naar een goede IDE (Integrated Development Environment). Deze tools hebben o.a. goeie syntax highlighting (en veul meer handige/essentiële tools), en daarmee zie je direct/snel of je iets verkeerd doet in je syntax. Kijk bijvoorbeeld in deze lijst en probeer er een paar uit.

Acties:
  • +1 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Als je wat verder had gelezen geeft empty() ook true bij '0'.
Nou begrijp ik dat je geen username wil hebben die '0' heet.
Maar de gebruiker '1' kan dan weer wel.

Gebruik gewoon http://php.net/mb_strlen
PHP:
1
2
3
4
5
6
    $username = trim($_POST["username"]);
    // username minimaal 4 karakters
    // geen strlen() omdat dit in Kanji één UTF-8 karakter is (4 bytes)
    if (4 > mb_strlen($username)) {
        $username_err = 'Please enter username.';
    }

[ Voor 7% gewijzigd door DJMaze op 27-09-2017 15:08 ]

Maak je niet druk, dat doet de compressor maar


  • Harrie_
  • Registratie: Juli 2003
  • Niet online

Harrie_

⠀                  🔴 🔴 🔴 🔴 🔴

NeFoRcE schreef op woensdag 27 september 2017 @ 14:42:
Sinds PHP wat stricter is geworden, loop je tegen dit soort fouten aan.

Je moet eerst de 'TRIM' in een variabele zetten. Die vervolgens op empty controleren, dus:

$trim = trim($_POST["username"]);

if (empty($trim)) {
blabla
}
Sorry maar je comment rommelt van alle kanten.

Dit is de code van TS:

PHP:
1
2
3
if(empty(trim($_POST["username"]))){
    $username_err = 'Please enter username.';
}


• 100% correct, geen errors, geen notices. Of het de meest geschikte oplossing is voor wat TS wil is een ander verhaal, maar feitelijk is er niets mis mee.
• Je geeft zelf een voorbeeld waarbij je zelf de var $trim gebruikt. Ik denk dat er geen enkele coding convention is waarbij dat een goed idee lijkt dus leer het alsjeblieft ook niet zo aan TS aan.
• Je hebt een +1 voor die post gekregen, ik vermoed van TS. Wie het ook is geweest, ik vind het jammer, want dat betekent dat tenminste 1 persoon nu waarheid ziet in iets wat absoluut niet klopt.

Edit:
NeFoRcE schreef op woensdag 27 september 2017 @ 15:30:
Het was dan ook meer als een rap 'pseudo' voorbeeld bedoeld :+
Dat snap ik en dat je je var in de vluggigheid zo'n brakke naam geeft is 1 ding maar de opmerking erboven dat die string modifier niet in je if-clause mag staan en eerst naar een andere var geduwd moet worden dat slaat echt helemaal nergens op en heeft bovendien ook niets te maken met zaken die tegenwoordig in PHP stricter zijn dan voorheen. Gevalletje klok/klepel

[ Voor 32% gewijzigd door Harrie_ op 27-09-2017 15:48 ]

Hoeder van het Noord-Meierijse dialect


  • NeFoRcE
  • Registratie: Mei 2004
  • Laatst online: 08-10 16:51

NeFoRcE

Hallo? Bent u daar?

Harrie_ schreef op woensdag 27 september 2017 @ 15:26:
[...]


Sorry maar je comment rommelt van alle kanten.

Dit is de code van TS:

PHP:
1
2
3
if(empty(trim($_POST["username"]))){
    $username_err = 'Please enter username.';
}


• 100% correct, geen errors, geen notices. Of het de meest geschikte oplossing is voor wat TS wil is een ander verhaal, maar feitelijk is er niets mis mee.
• Je geeft zelf een voorbeeld waarbij je zelf de var $trim gebruikt. Ik denk dat er geen enkele coding convention is waarbij dat een goed idee lijkt dus leer het alsjeblieft ook niet zo aan TS aan.
• Je hebt een +1 voor die post gekregen, ik vermoed van TS. Wie het ook is geweest, ik vind het jammer, want dat betekent dat tenminste 1 persoon nu waar ziet in iets wat absoluut niet klopt.
Het was dan ook meer als een rap 'pseudo' voorbeeld bedoeld :+
Harrie_ schreef op woensdag 27 september 2017 @ 15:26:

Dat snap ik en dat je je var in de vluggigheid zo'n brakke naam geeft is 1 ding maar de opmerking erboven dat die string modifier niet in je if-clause mag staan en eerst naar een andere var geduwd moet worden dat slaat echt helemaal nergens op en heeft bovendien ook niets te maken met zaken die tegenwoordig in PHP stricter zijn dan voorheen. Gevalletje klok/klepel
Heuu, zeker weten? Ik meen te toch echt te herinneren dat er meer(dere) functies in php zijn nu, die niet meer genest aangeroepen mogen worden, maar eerst in een variabele gestopt moeten worden voor er weer iets mee gedaan kan worden?

[ Voor 28% gewijzigd door NeFoRcE op 27-09-2017 15:50 ]

Professioneel Heftruck Syndroom


Acties:
  • +3 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

[quote]Harrie_ schreef op woensdag 27 september 2017 @ 15:26:
• 100% correct, geen errors, geen notices. Of het de meest geschikte oplossing is voor wat TS wil is een ander verhaal, maar feitelijk is er niets mis mee.
Dat is dus wel zo, in PHP 5.4 of ouder. En dat wordt stiekem nog best veel gebruikt.
[quote]• Je geeft zelf een voorbeeld waarbij je zelf de var $trim gebruikt. Ik denk dat er geen enkele coding convention is waarbij dat een goed idee lijkt dus leer het alsjeblieft ook niet zo aan TS aan.
• Je hebt een +1 voor die post gekregen, ik vermoed van TS. Wie het ook is geweest, ik vind het jammer, want dat betekent dat tenminste 1 persoon nu waarheid ziet in iets wat absoluut niet klopt.
Ik vind dat je nogal hard van stapel loopt vanwege een simpele naamgevingissue.
Dat snap ik en dat je je var in de vluggigheid zo'n brakke naam geeft is 1 ding maar de opmerking erboven dat die string modifier niet in je if-clause mag staan en eerst naar een andere var geduwd moet worden dat slaat echt helemaal nergens op en heeft bovendien ook niets te maken met zaken die tegenwoordig in PHP stricter zijn dan voorheen. Gevalletje klok/klepel
Het gevalletje klok/klepel zit er eerder bij jou, want hij zegt niks over wat wel en niet in een if mag staan. Hij zegt wel dat empty in bepaalde PHP-versies alleen variabelen accepteert en dat is een waarheid als een koe. Het enige dat hij verkeerd ziet is dat PHP juist soepeler is geworden op dit vlak: het werkt vanaf 5.5 juist wel op de manier die de TS gebruikt.
NeFoRcE schreef op woensdag 27 september 2017 @ 15:30:
Heuu, zeker weten? Ik meen te toch echt te herinneren dat er meer(dere) functies in php zijn nu, die niet meer genest aangeroepen mogen worden, maar eerst in een variabele gestopt moeten worden voor er weer iets mee gedaan kan worden?
Empty is geen functie maar een language construct. ;) En language constructs hebben inderdaad dit soort restricties. Zelfde geldt voor isset en dergelijken.

[ Voor 14% gewijzigd door NMe op 27-09-2017 16:41 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Morax
  • Registratie: Mei 2002
  • Laatst online: 20:34
NeFoRcE schreef op woensdag 27 september 2017 @ 15:30:
[...]

Heuu, zeker weten? Ik meen te toch echt te herinneren dat er meer(dere) functies in php zijn nu, die niet meer genest aangeroepen mogen worden, maar eerst in een variabele gestopt moeten worden voor er weer iets mee gedaan kan worden?
Die zijn er zeker weten, maar gaan dan vooral over array modifiers zoals "array_pop" en "array_shift" :)

What do you mean I have no life? I am a gamer, I got millions!

Pagina: 1