Just nu i M3-nätverket
Jump to content

php-script vill inte exekveras


AP-Micke

Recommended Posts

Hallå allihop!

 

Har problem med en sida jag administrerar.

Efter att ha bytt från ett webhotell till en egen server vill inte mina php-script fungera som dom ska.

 

På min news sida (news.php) finns en länk till admin login. Länken refererar till samma script (news.php) med tillägget pg=admin (som är en funktion i scriptet som ska göra så att ett inloggningsformulär visas).

 

När jag klickar på admin login-länken laddas bara sidan om utan att jag får upp login-formuläret. Har aldrig haft detta problem på förra webhotellet.

 

Det märkliga är att scriptet i övrigt funkar, dvs den hämtar poster från databasen som den ska och så vidare.

 

Kan det vara nåt fel i apache/php-inställningarna?

Apache körs i virtual host läge och NAT:as genom en brandvägg från en extern ip-adress till en klass C adress (192.168.x.x)

Jag är förvirrad.... hjälp!

 

Link to comment
Share on other sites

På min news sida (news.php) finns en länk till admin login. Länken refererar till samma script (news.php) med tillägget pg=admin (som är en funktion i scriptet som ska göra så att ett inloggningsformulär visas).

 

När jag klickar på admin login-länken laddas bara sidan om utan att jag får upp login-formuläret. Har aldrig haft detta problem på förra webhotellet.

 

Låt mig gissa: Funktionen som skall visa loginsidan har en if-sats (eller liknande) som ser ut något som:

 

[color="#0000ff"]if[/color]($pg == "admin")

 

Testa att ändra den till:

 

[color="#0000ff"]if[/color]([color="#0000ff"]$[/color]_POST["pg"] == "admin")

 

eller vice versa. Är det så att skriptet har den nedersta raden så bör du nog överväga att slå på register globals istället för att ändra. Läs mer på: http://se.php.net/register_globals

 

 

 

.dune.

----------------------------------------------

- "I find this a nice feature but it is not according to the documentation.

Or is it a BUG?"

- "Let´s call it an accidental feature. :-)"

 

Link to comment
Share on other sites

Det är en switch-sats som kollar om parametern är satt till admin:

[color="#0000ff"]switch[/color]($pg) {
  [color="#0000ff"]case[/color] "admin":
  [color="#0000ff"]if[/color] (snsverify() == "[color="#ff8C00"]TRUE[/color]") {
 [color="#0000ff"]echo[/color] '<big><b>News Administration</b></big><br><br><a href="'.[color="#0000ff"]$[/color][color="#0000ff"]php[/color]_SELF.'?p$  }
  [color="#0000ff"]break[/color];

 

Är det nåt där som kan påverkas av register_globals inställningen?

 

Link to comment
Share on other sites

Skriv så här för att kolla om variablen fått nått värde och i så fall vilket:

 

[color="#0000ff"]echo[/color] "<$pg><br>\n";
[color="#0000ff"]switch[/color]($pg) {
  [color="#0000ff"]case[/color] "admin":
  [color="#0000ff"]if[/color] (snsverify() == "[color="#ff8C00"]TRUE[/color]") {
 [color="#0000ff"]echo[/color] '<big><b>News Administration</b></big><br><br><a href="'.[color="#0000ff"]$[/color][color="#0000ff"]php[/color]_SELF.'?p$ }
  [color="#0000ff"]break[/color];

 

Link to comment
Share on other sites

Är det nåt där som kan påverkas av register_globals inställningen?

 

Det är exakt det som påverkas av register globals. Testa nedanstående istället:

 

[color="#0000ff"]switch[/color]([color="#0000ff"]$[/color]_POST["pg"])

 

 

.dune.

----------------------------------------------

- "I find this a nice feature but it is not according to the documentation.

Or is it a BUG?"

- "Let´s call it an accidental feature. :-)"

 

Link to comment
Share on other sites

Hm... verkar inte göra nån skillnad om jag skriver

[color="#0000ff"]switch[/color]($post["pg"])

eller

[color="#0000ff"]switch[/color]($pg)

 

Nåt annat förslag?

Kan iofs testa att starta om Apache och testa att ändra register_globals från OFF till ON och se om det gör nån skillnad.

 

Nån som vet nåt enkelt sätt i linux att starta om httpd?

 

/Micke

 

Link to comment
Share on other sites

switch($post["pg"])

...

Nåt annat förslag?

Samma förslag en gång till:

[color="#0000ff"]switch[/color]([color="#0000ff"]$[/color]_POST["pg"])

 

 

Link to comment
Share on other sites

Nåt annat förslag?

Kan iofs testa att starta om Apache och testa att ändra register_globals från OFF till ON och se om det gör nån skillnad.

 

Det skall vara med ett "_" i variabeln, och den skall skrivas med stora bokstäver dvs den skall vara precis såhär:

[color="#0000ff"]$[/color]_POST["pg"]

 

Ptja, det kan du ju testa, fast det borde ju verkligen fungera...

 

 

Nån som vet nåt enkelt sätt i linux att starta om httpd?

Det är lite beroende på distribution men lokalisera apachectl och kör

apachectl reload

 

så skall apache läsa om konfigurationsfilerna.

 

 

.dune.

----------------------------------------------

- "I find this a nice feature but it is not according to the documentation.

Or is it a BUG?"

- "Let´s call it an accidental feature. :-)"

 

Link to comment
Share on other sites

Okej... var inte observant på varken _ eller versaler...

 

En liten fråga... ska register_globals vara av eller på när man använder

$_POST["pg"] eller spelar det ingen roll?

 

 

 

 

Link to comment
Share on other sites

En liten fråga... ska register_globals vara av eller på när man använder

$_POST["pg"] eller spelar det ingen roll?

 

Off!

 

Läs http://se.php.net/register_globals så förstår du varför!

 

 

.dune.

----------------------------------------------

- "I find this a nice feature but it is not according to the documentation.

Or is it a BUG?"

- "Let´s call it an accidental feature. :-)"

 

Link to comment
Share on other sites

Okej....

 

Sätter den till OFF.

 

Ska skriva om scriptet lite. Återkommer om jag får mer problem.

 

Tack Dune för alla bra tips.

Tack alla andra för era tips.

 

Link to comment
Share on other sites

refererar till samma script (news.php) med tillägget pg=admin

if($_POST["pg"] == "admin")

 

Det ska nog vara $_GET['pg], då variabeln är av typen GET och inte POST.

 

_________

TicoRoman - Anfall är bästa försvar

 

Link to comment
Share on other sites

Hur ska man veta vilka variablar som ska ändras till $_GET (eller $_POST)? Om man har ett skript med massa variablar är det bara de variablar som skickas från formuläret som behöver ändras?

 

Hur är det med formulärdata som ska in i en databas?

 

Till exempel:

[color="#ff0000"]mysql_query[/color]("insert into news values('','$title','$author','$email','$content','$[color="#ff0000"]date[/color]')");

Där i princip alla variablar kommer från formulärdata utom $date.

 

/Micke

 

Link to comment
Share on other sites

Hur ska man veta vilka variablar som ska ändras till $_GET (eller $_POST)? Om man har ett skript med massa variablar är det bara de variablar som skickas från formuläret som behöver ändras?

 

Variablerna $_GET och $_POST innehåller alltid den data som skickats till skriptet. Vilken av dem du skall använda beror på hur skriptet har anropats.

 

Om det anropas genom en hyperlänk, tex:

<a href="test.[color="#0000ff"]php[/color]?alfa=beta">länk</a>

 

så kommer $_GET["alfa"] ha värdet beta.

 

Oftast när du har ett formulär så använder du dig oftast av POST (det går att använda GET här med), tex:

<form action="test.[color="#0000ff"]php[/color]" method="POST">

 

 

Lite läsning: http://www.edstud.chalmers.se/support/cgi/programmera.shtml

 

 

.dune.

----------------------------------------------

- "I find this a nice feature but it is not according to the documentation.

Or is it a BUG?"

- "Let´s call it an accidental feature. :-)"

 

Link to comment
Share on other sites

Hur ska man veta vilka variablar som ska ändras till $_GET (eller $_POST)?

De variabler du skickar med ett forumer som har metoden POST kommer du åt genom att plocka dem ur $_POST och de variabler som du skickar med en GET eller direkt i URL:en kommer du åt med $_GET. De är inga variabler utan just formulärdata som är samlade i variabeln $_POST eller $_GET beroende på om det var just en POST eller GET.

 

Variabler förblir variabler.

 

Hur är det med formulärdata som ska in i en databas?

Framförallt ska sådant data ABSOLUT INTE skickas rakt in i databasen, läs mer här:

http://www.sqlsecurity.com/DesktopDefault.aspx?tabid=23

I just php och mysql är det rätt bra att använda mysql_escape_string (http://se2.php.net/manual/sv/function.mysql-escape-string.php) innan man skickar in saker i sin databas.

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...