Permalänk
Medlem

Problem med PHP-Script

Hejsan jag skulle behöva veta vad problemet är:

PHP-kod:

<?php session_start(); if (!isset($_SESSION['sess_user'])) { header("Location: index.php"); exit; } ?> <form action="submit_edit.php" method="post"> <textarea rows="15" cols="50" name="content"> <? $fn = "user/<?=$_SESSION['sess_user'] ?>/about.txt"; print htmlspecialchars(implode("",file($fn))); ?> </textarea><br> <input type="submit" value="Ändra"> </form>

När jag går in på sidan står det:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/a7520450/public_html/edit-profile.php on line 9

Jag är nybörjare och inte så erfaren inom php

Tacksam för svar

Permalänk
Medlem
Skrivet av hampuz13:

Hejsan jag skulle behöva veta vad problemet är:

PHP-kod: <?php session_start(); if (!isset($_SESSION['sess_user'])) { header("Location: index.php"); exit; } ?> <form action="submit_edit.php" method="post"> <textarea rows="15" cols="50" name="content"> <? $fn = "user/<?=$_SESSION['sess_user'] ?>/about.txt"; print htmlspecialchars(implode("",file($fn))); ?> </textarea><br> <input type="submit" value="Ändra"> </form>

När jag går in på sidan står det:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/a7520450/public_html/edit-profile.php on line 9

Jag är nybörjare och inte så erfaren inom php

Tacksam för svar

Det fetstilade ser lite lurigt ut.
Vad står det annars på rad 9 i koden?

Visa signatur

Asus P8P67 Pro | Core i7 2600 | Sapphire Radeon R9 290 | A-DATA SSD 510

Permalänk
Medlem

Ändra rad 9 till följande: $fn = 'user/'.$_SESSION['sess_user'].'/about.txt';

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem
Skrivet av Airikr:

Ändra rad 9 till följande: $fn = 'user/'.$_SESSION['sess_user'].'/about.txt';

Precis! För att förklara vad som var fel (iom att @hampuz13 enligt egen utsago inte är speciellt bevandrad inom PHP) så har du i din kod satt variabeln fn till en string (d.v.s. kommer programmet tolka det som ren text snarare än programkod). Det edgren istället har gjort är att dela upp sökvägen i 3 delar; en sträng ('user/') följt av sessionsvariabeln sess_user och slutligen en sträng ('/about.txt'). Dessa delar har sedan kombinerats genom konkatenering (punkterna mellan de olika delarna), vilket är en inbyggd string operator i PHP.

Visa signatur

Citera för svar!

Stationär: Fractal Design Define R6 | Asus Z370-P | Intel i7 8700k @ 3.7 Ghz | Corsair Vengeance LPX 32GB CL15 @ 3000 Mhz | Asus STRIX GTX960 4GB | Fractal Design Celsius S24 | 5 TB HDD | 250GB SSD (Samsung 850 EVO), 128GB SSD (Crucial M4) | Corsair HX 850W | W10
Bärbar: Sony Vaio Pro 13.3" | i7-4500U | 8GB RAM | 256GB SSD | Ubuntu

Permalänk
Medlem
Permalänk
Medlem

@Airikr: Tack Fungerar perfekt nu

Permalänk
Medlem
Skrivet av hampuz13:

@edgren: Tack Fungerar perfekt nu

Suveränt Och varsågod.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem
Skrivet av RedRetro:

Precis! För att förklara vad som var fel (iom att @hampuz13 enligt egen utsago inte är speciellt bevandrad inom PHP) så har du i din kod satt variabeln fn till en string (d.v.s. kommer programmet tolka det som ren text snarare än programkod). Det edgren istället har gjort är att dela upp sökvägen i 3 delar; en sträng ('user/') följt av sessionsvariabeln sess_user och slutligen en sträng ('/about.txt'). Dessa delar har sedan kombinerats genom konkatenering (punkterna mellan de olika delarna), vilket är en inbyggd string operator i PHP.

Skrivet av Airikr:

Suveränt Och varsågod.

Vet ni varför detta inte fungerar ?

<?php
$file = 'user/'.$_SESSION['sess_user'].'/index.php';
$myfile = fopen("$file", "w") or die("Kunde inte öppna fil!");
$txt = "HTML-";
fwrite($myfile, $txt);
$txt = "kod här";
fwrite($myfile, $txt);
fclose($myfile);
?>

Permalänk
Medlem
Skrivet av hampuz13:

Vet ni varför detta inte fungerar ?

<?php
$file = 'user/'.$_SESSION['sess_user'].'/index.php';
$myfile = fopen("$file", "w") or die("Kunde inte öppna fil!");
$txt = "HTML-";
fwrite($myfile, $txt);
$txt = "kod här";
fwrite($myfile, $txt);
fclose($myfile);
?>

Prova byt ut det fetstilta till endast $file, nu har du gjort samma misstag som tidigare, där PHP kommer tolka "$file" som en string istället för att hämta värdet i variabeln $file. Kan kanske vara mer som knasar också, beroende på om skrivbehörighet finns etc. Men hojta till om det är något mer som strular

EDIT: Läs nedanstående inlägg.

Visa signatur

Citera för svar!

Stationär: Fractal Design Define R6 | Asus Z370-P | Intel i7 8700k @ 3.7 Ghz | Corsair Vengeance LPX 32GB CL15 @ 3000 Mhz | Asus STRIX GTX960 4GB | Fractal Design Celsius S24 | 5 TB HDD | 250GB SSD (Samsung 850 EVO), 128GB SSD (Crucial M4) | Corsair HX 850W | W10
Bärbar: Sony Vaio Pro 13.3" | i7-4500U | 8GB RAM | 256GB SSD | Ubuntu

Permalänk
Medlem
Skrivet av RedRetro:

Prova byt ut det fetstilta till endast $file, nu har du gjort samma misstag som tidigare, där PHP kommer tolka "$file" som en string istället för att hämta värdet i variabeln $file. Kan kanske vara mer som knasar också, beroende på om skrivbehörighet finns etc. Men hojta till om det är något mer som strular

Detta blir lite av ett sidospår, men i strängar som omges av dubbla citationstecken tillåts så kallad string interpolation, vilket innebär att variabler och uttryck infogas där det anges.

Dessa rader ger samma resultat:

$imagePath = "$basePath/$userHome/images/$image.$extension";

$imagePath = $basePath.'/'.$userHome.'/images/'.$image.'.'.$extension;

Jag försöker använda den första formen så ofta det går. Subjektivt tycker jag det ökar läsbarheten och gör raden enklare att jobba med.

I fallet ovan expanderas därmed "$file" till variabelns innehåll. Interpolation är här meningslöst och lite missvisande, men det kommer fungera.

edit: regler för stränginterpolation i PHP

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Detta blir lite av ett sidospår, men i strängar som omges av dubbla citationstecken tillåts så kallad string interpolation, vilket innebär att variabler och uttryck infogas där det anges.

Dessa rader ger samma resultat:

$imagePath = "$basePath/$userHome/images/$image.$extension";

$imagePath = $basePath.'/'.$userHome.'/images/'.$image.'.'.$extension;

Jag försöker använda den första formen så ofta det går. Subjektivt tycker jag det ökar läsbarheten och gör raden enklare att jobba med.

I fallet ovan expanderas därmed "$file" till variabelns innehåll. Interpolation är här meningslöst och lite missvisande, men det kommer fungera.

edit: regler för stränginterpolation i PHP

Som jag skrev innan är jag nybörjare och inte så erfaren, skulle du kunna visa hur koden skulle se ut?

Permalänk
Medlem
Skrivet av hampuz13:

Som jag skrev innan är jag nybörjare och inte så erfaren, skulle du kunna visa hur koden skulle se ut?

Jag svarade på inlägget innan. Om du menar din ursprungliga kod skulle jag ha skrivit den så här:

<?php session_start(); if (!isset($_SESSION['sess_user'])) { header("Location: index.php"); exit; } $fn = "user/$_SESSION[sess_user]/about.txt"; $content = implode('', file($fn)); ?> <form action="submit_edit.php" method="post"> <textarea rows="15" cols="50" name="content"><?= $content ?></textarea><br> <input type="submit" value="Ändra"> </form>

Visa signatur

Kom-pa-TI-bilitet