webForumDet fria alternativet

Parse error: Unexpected \

14 svar · 252 visningar · startad av aasah

aasahMedlem sedan mars 20033 451 inlägg
#1

Jag kör ett babyskript ... och det funkar inte. Följande tjusiga felmeddelande dyker upp:

servern skrev:

Parse error: parse error, unexpected '\"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/aasah/www/SimpleQuiz.php on line 81

  1. Vad innebär detta fel egentligen (allmänt sett)?
  2. Och i detta fall, (del av koden) :
<?php 

$me = $_SERVER['PHP_SELF'];

//....

<form name = "simpleQ" action="$me" method="POST">
<pre>
Your name, please:  <input type="text" name="challenger" />

//....
<input type="submit" value="Test me!">

</pre>
</form>
//...

   if (!isSet($_POST["challenger"]) || $_POST["challenger"] == "")
      echo "<h1>The result of the quiz:</h1>";
   else echo "<h1>$_POST["challenger"]! The result of the quiz: </h1>";   //line 81

   echo "rate($correct["0"], $points)";
}

?>

Kan posta mer kod om det behövs... Jag fattar ingenting... :x

LarsGMedlem sedan dec. 200012 465 inlägg
#2
echo "<h1>" . $_POST["challenger"] . "! The result of the quiz: </h1>";

Du verkar ju ha flera fel av den typen.

MeleaMedlem sedan juli 20032 667 inlägg
#3

Antar att felet ligger här:

echo "<h1>$_POST["challenger"]! ...

Du kan inte ha "-tecken inute en echo som skrivs ut med ".
Skriv såhär:

echo "<h1>".$_POST["challenger"]."

Så borde det funka.

aasahMedlem sedan mars 20033 451 inlägg
#4

Ah! Tusen tack! :) Jag uppskattar förklaringen Melea! :birp

Är det alltid problem med echo-strängar om detta fel dyker upp eller vad är det man allmänt sett ska hålla utkik efter ifall man stöter på det fler gånger? :q

MeleaMedlem sedan juli 20032 667 inlägg
#5

Parse error får man när man skrivit fel i t.ex. en echo/ifsats eller dyl.

tydalMedlem sedan juni 20033 788 inlägg
#6

Rent allmänt betyder parse error att php inte fattar vad du menar :-)

När du börjar en sträng med " så kom ihåg att vid nästa " så slutar den!

echo "<h1>$_POST["challenger"]

Detta ovan skriver alltså ut:
<h1>$_POST[

För där kommer nästa " och då slutar strängen. Sedan kommer challenger från ingenstans och det begriper inte php vad det är, så där tar det stopp.

Enkla variabler kan man ha inuti strängar, som $test, $tjo och $hej, men inte $_POST["challenger"] utan den måste du ha utanför strängen.

Flera strängar kan dock sättas ihop till en med hjälp av tecknet . (punkt)

$namn = "Test";
$test = "Hej " . "på dig " . $namn;
echo($test); // Skriver ut: Hej på dig Test

kobranturreMedlem sedan maj 2004602 inlägg
#7

du kan också skriva så här

echo "<h1>{$_POST["challenger"]}! The result of the quiz: </h1>";
MeleaMedlem sedan juli 20032 667 inlägg
#8

Tänkte just skriva ett citat från just dig tydal från en annan post där någon frågade vad parse error betydde. ;)

tydal skrev:

Parse error är alltid ett skrivfel, dvs du har med ett ogiltigt tecken eller så har du glömt ett tecken som är nödvändigt.

Med tanke på det du skrev i ditt senaste inlägg går det ju faktiskt att skriva både

echo '$test';

Och

echo '$_POST[challenger]';

Det går alltså att skriva utan fnuttar i POST, GET, SESSION, COOKIE osv.

tydalMedlem sedan juni 20033 788 inlägg
#9

aasah skrev:

Är det alltid problem med echo-strängar om detta fel dyker upp eller vad är det man allmänt sett ska hålla utkik efter ifall man stöter på det fler gånger? :q

Det kan vara problem var som helst, men det är alltid något problem med språket. Du kan ha stavat fel, glömt ett tecken eller satt dit ett tecken för mycket. Php tar i allmänhet om vilket tecken det gäller och alltid vilken rad det är, så det är bara att titta noga tills du ser den lilla missen.

Det kan vara svårt att se den i sin egen kod som man nyss har skrivit, men om du låter någon annan titta på den (här t.ex.) eller gör något annat en liten stund och sen går tillbaka så ser man det lättare.

Även med många års erfarenhet kan man stirra sig blind på såna här saker...

tydalMedlem sedan juni 20033 788 inlägg
#10

Melea skrev:

echo '$test';

Fast det där skriver ut $test och inte variabelns innehåll.

aasahMedlem sedan mars 20033 451 inlägg
#11

tydal skrev:

... När du börjar en sträng med " så kom ihåg att vid nästa " så slutar den!

echo "<h1>$_POST["challenger"]

Detta ovan skriver alltså ut:
<h1>$_POST[

För där kommer nästa " och då slutar strängen. Sedan kommer challenger från ingenstans och det begriper inte php vad det är, så där tar det stopp.....

Herregud vad jag är dum! :r Självklart!! Det är ju därför man behöver \ för att "escapea" vissa tecken...

Glöm denna tråd, tack.... :r

MeleaMedlem sedan juli 20032 667 inlägg
#12

tydal skrev:

Melea skrev:

echo '$test';

Fast det där skriver ut $test och inte variabelns innehåll.

Jo, jag skrev fel, jag menade

echo "$test";

Då skrivs $test:s värde ut och inte bara $test.

tydalMedlem sedan juni 20033 788 inlägg
#13

aasah skrev:

Glöm denna tråd, tack.... :r

Det är sånt här man lär sig på. Jag glömmer aldrig när en klasskompis till mig på högskolan (jo, en tjej faktiskt) ville ha lite hjälp med programmeringen. Hon lyckades inte få sitt program att fungera och hon sa att det blev just parse error. Jag sa att det måste vara något litet tecken som är fel, kanske nåt semikolon. Men nej då, det var det inte, sa hon, för hon hade kollat jättenoga och hon hade inte glömt något semikolon. Hon var säker på att det var något fel på datorn. Så jag följde ju med henne till datorsalen för att kolla på hennes kod, och det visade sig vara en intressant upplevelse. Hon hade faktiskt inte glömt något semikolon. Verkligen inte. Snarare tvärtom...

if (a == 2);
  printf("Nu minns jag inte vad som stod här...");
else if (a == 3);
  printf("... och jag har för dålig fantasi...");
else;
  printif("... men ni förstår principen.");
Gislaved.netMedlem sedan juni 20001 274 inlägg
#14

Du kommer även få samma fel på rad 83.

echo "rate($correct["0"], $points)";
aasahMedlem sedan mars 20033 451 inlägg
#15

Gislaved.net skrev:

Du kommer även få samma fel på rad 83.

echo "rate($correct["0"], $points)";

Jo, jag vet... :r

Genererad på 361 ms · cache AV · v20260730165559-full.f96bc7eb