mboost-dp1

php + forms


Gå til bund
Gravatar #1 - BurningShadow
2. jan. 2006 00:17
Jo altså, jeg har et lille problem, der er ved at drive mig til vanvid.

Hvordan smider jeg en parameter fra en URL ind i en form?
Hvis vi forestiller os URL'en "http://www.domæne.tld/index.php?HelloWorld" så vil jeg gerne have en "HelloWorld" smidt ind som en del af en form.
Problemet er bare at det kan jeg åbenbart ikke gøre på denne måde:
<?php
$msg = $PHP_SELF." \n ".$_SERVER['QUERY_STRING'];
?>
<form method="post" action="handle.php">
[snip]
<input type=hidden name=myform value="another-index.php?$msg">
[/snip]</form>



Hvis jeg smider formen inde i et sæt "<?php ?>" så for jeg bare en tom side, ellers havd det jo være løsningen.

Jeg ved ikke helt om det var smart at stille et spørgsmål jeg ikke selv forstår, imens jeg er træt, så det kan være at jeg omskriver det imorgen, hvis der ikke er nogen der ved hvad jeg mener (hvilket jeg ikke er sikker på at jeg selv gør).
Gravatar #2 - The-Lone-Gunman
2. jan. 2006 00:41
Hvis jeg forstår det rigtigt...

Du skal jo starte PHP igen, inden du printer din variable, ellers bliver det jo ikke fortolket af serveren.

Derfor:
<input type=hidden name=myform value="another-index.php?<?php echo $msg; ?>">

Man kan starte og slutte PHP som man har lyst til.
Gravatar #3 - Simm
2. jan. 2006 08:00
#2 "Man kan starte og slutte PHP som man har lyst til."

Korrekt. Det er bare noget man skal undgå, har jeg læst mig til, for det påvirker ydelsen når man gør det. Det er ikke sikkert det er noget man ser tydelige tegn på. Men det kommer helt an på den opgave man nu sidder med.
Gravatar #4 - BurningShadow
2. jan. 2006 10:13
Takker, og så løste det faktisk lige et andet problem også :-)
Jeg vidste ikke at man sådan bare kunne starte of slutte PHP efter behag, men det er da behageligt.
Gravatar #5 - amokk
2. jan. 2006 18:01
#3 For at undgå dette problem (performance ved for mange PHP-brudstykker i samme script), i miljøer hvor det kan have betydning, kan man jo vælge at installere ét af de systemer på serveren, som sørger for at kompilere PHP filerne, så de ikke skal parses hver gang et script køres...
Gravatar #6 - Simm
2. jan. 2006 18:45
#5: Yes .. :) Problemet er bare at encoders som Zend og IonCube koster mere end mange har lyst til at bruge. Men ja det er et must hvis man laver store PHP-baserede systemer
Gravatar #7 - The-Lone-Gunman
2. jan. 2006 20:06
Hvis man laver en så stor side, at den minimale forskel i preformance betyder noget, så ville man nok alligevel holde sig fra at blande HTML og PHP sammen, så jeg tror ikke det er et problem at starte og stoppe som man har lyst til.

Det er vel maksimalt et par millisekunder vi snakker om.
Gravatar #8 - ZOPTIKEREN
2. jan. 2006 22:06
Det er jo principelt rigtigt nok, men det er jo at kode dårligt i første omgang, og det straffer kun en selv senere hvis man ikke ved hvordan man gør det rigtigt (på den mest hensigtmæssige måde).

Et par millisekunders tab, ved slamkodescripting her og der, gør altså også noget hvis man sætter ens computer til at regne et eller andet slam ud, hvor den skal køre ens script igennem et par millioner gange før den giver et resultat.
Gravatar #9 - amokk
2. jan. 2006 22:40
#8 nu tror jeg et par millioner gange er LIDT overdrevet hvis vi taler almindelig parsing af PHP scripts...

Men generelt, hvis man laver et site med et så stort load at det giver problemer, må man da formode at kunne finde knasterne til et par optimeringer også...

Men det er ganske normalt at store sites med meget "statisk" indhold cacher de mest brugte ting, især for at lette trykket på databasen - newz bruger også caching af f.eks. forside mv.
det samme de sites jeg roder med på arbejdet, på deres semi-statiske dele (avisartikler mv) mens andre ting (bruger-specifikke sider osv) kører dynamisk
Gravatar #10 - nerddk
3. jan. 2006 04:01
<?php
$msg = $PHP_SELF." \n ".$_SERVER['QUERY_STRING'];
?>
<form method="post" action="handle.php">
<input type=hidden name=myform value="another-index.php?<?=$msg?>">
</form>

så skulle den være der
Gravatar #11 - BurningShadow
3. jan. 2006 10:43
#10

Det var det The-Lone-Gunman skrev ;-)
Gravatar #12 - NFX
3. jan. 2006 19:23
#11:
Ikke helt.
nerd-alert.dk's måde er endnu kortere. TLG startede PHP, brugte echo, og lukkede php igen. nerd-alert's metode er en anden funktion, hvor <?= er en forkortelse for <? echo. Jeg mener også den kræver at man har allow_short_tags i php.ini (dvs at man vist ikke kan bruge <?php=), men det kan jeg ikke helt huske.
Gravatar #13 - Simm
3. jan. 2006 19:44
#12: Joeh.. jeg mener den er slået til pr. default.. men jeg kan ikke helt huske det.. altså så du kan bruge <?= $variabel ?>
Gravatar #14 - The-Lone-Gunman
3. jan. 2006 19:46
Short tags er til for dovne svindlere :-P
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login