Avatar billede bb_maze Nybegynder
27. maj 2004 - 17:50 Der er 12 kommentarer og
1 løsning

Problemer med omprogramering af fil

Hejsa

Jeg skal have skrevet denne fil om så den kan bruges på en server der har register:_globals off.

Det driller bare, og der kommer hele tiden en eller anden lille fejl.

Er der en af jer der kan hjælpe?

Filen indeholder følgende:

--------------------
<body bgcolor="#E9E9E2"><?php
function head() {
include('config.php');
echo "<table width=\"120\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\">
<tr><td bgcolor=\"$tableborder\">
<table width=\"120\" border=\"0\" cellpadding=\"0\" cellspacing=\"\" align=\"center\">
<tr><td bgcolor=\"$bgcolor\">";
}
function foot () {
echo "</td></tr></table></td></tr></table>";
}
function record($REMOTE_ADDR) {
include('config.php');
$fp=fopen("$ip_file", "a+");
fputs ($fp,$REMOTE_ADDR."][".time()."\n");
fclose($fp);
}
function check($REMOTE_ADDR) {
include('config.php');
global $valid;
$ip=$REMOTE_ADDR;
$data=file("$ip_file");
$now=time();
foreach ($data as $record) {
$subdata=explode("][",$record);
if ($now < ($subdata[1]+3600*$timeout)) {
if ($ip == $subdata[0]) {
$valid=0;
break;
}}}}
//##################### Save data ##############################
function save($answer){
global $answer;
include('config.php');
$data=file($datafile);
$subdata=explode("][",$data[$answer]);
$subdata[2]+=1;
$data[$answer]=implode("][", $subdata);
$data[$answer]=$data[$answer]."\n";
$fp=fopen($datafile,"w+");
$a=0;
do{
fputs($fp,$data[$a]);
$a++;
}while($a<count($data));
fclose($fp);
}
//########################## Show Form ############################
function form($PHP_SELF){
include('config.php');
head();
echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><form method=\"post\" action=\"$PHP_SELF\"><p align=\"center\">";
$data=file($datafile);
$question=$data[0];
$nb_options=count($data)-1;
echo "$question</p>";
for($nb=1;$nb <= $nb_options; $nb++){
$option=explode("][","$data[$nb]");
echo "<input type=\"radio\" name=\"answer\" value=\"$nb\"> ";
echo "$option[0]<br>";
}
echo "<input type=\"hidden\" name=\"save\" value=\"yes\">";
echo "<p align=\"center\"><input type=\"submit\" name=\"Submit\" value=\"Submit\"></form></font>";
echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><a href=\""; echo $PHP_SELF; echo "?action=results\">Vis resultat</font></p>";
foot();
}
//################## Function to show results ########################
function results(){
include('config.php');
head();
$data=file($datafile);
$nb_answers=count($data);
$votes=0;
$a=1;
do{
$subdata=explode("][",$data[$a]);
$votes += $subdata[2];
$a++;
}while($a < $nb_answers);
$a=1;
$b="answerv";
$v=100/$votes;
echo "<p align=\"center\"><font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\">$data[0] ($votes stemmer)<br><br>";
do{
$subdata=explode("][",$data[$a]);
$av = $subdata[2] * $v;
echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\">$subdata[0]"; printf(" %01.1f", $av); echo"%<br>";
$p2v = 100-$av;
echo "<img src=\"$subdata[1]\" width=\"$av\" height=\"10\"><img src=\"$image\" width=\"$p2v\" height=\"10\"><br>";
$a++;
} while ($a < $nb_answers);
echo "<br>";
foot();
}
//###################### Engine ####################################
check($REMOTE_ADDR);
if ($valid=="0"){ results();}
elseif ($action=="results") { results(); }
elseif ($save=="yes" && $valid!="0") { save($Answer); record($REMOTE_ADDR); results();}
elseif ($action=="save" && !empty($valid)) { results(); }
elseif ($action!="save" && $valid!="0"){ form($PHP_SELF); }
?>

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

På forhånd tak for hjælpen!

Hygge
Avatar billede lillebror Nybegynder
27. maj 2004 - 17:58 #1
Jeg tror ikke folk har lyst til at gætte sig frem til hvilke variable du henter fra adresselinien....
Avatar billede bb_maze Nybegynder
27. maj 2004 - 18:11 #2
Jamen skal du bruge dem når den bare skal skrives om så den virker med register_globals off? Scriptet virker jo fint nok når register_globals er on.

Hygge
Avatar billede detox Nybegynder
27. maj 2004 - 18:17 #3
Du kan som en nødløsning prøve at insætte dette i starten af scriptet:

foreach($_REQUEST as $key => $val) {
    $$key = $val;
}
foreach($_SERVER as $key => $val) {
    $$key = $val;
}
Avatar billede bb_maze Nybegynder
27. maj 2004 - 18:21 #4
Detox, nødløsning? Er det da en dårlig løsning?

Mads
Avatar billede coderdk Praktikant
27. maj 2004 - 18:27 #5
detox, ikke en god løsning - Desuden kan det samme opnås ved extract($_REQUEST);

bb_maze: erstat:
$PHP_SELF -> $_SERVER['PHP_SELF']
$REMOTE_ADDR -> $_SERVER['REMOTE_ADDR']

Alle form post varible skal hedde $_POST['variabelnavn'] og variable i URL'en skal hedde $_GET['variabelnavn']
Avatar billede bb_maze Nybegynder
27. maj 2004 - 18:31 #6
Coderdk, kan du ikke komme med et eksempel på en udskiftning af de to sidste ting?
Altså:
"Alle form post varible skal hedde $_POST['variabelnavn'] og variable i URL'en skal hedde $_GET['variabelnavn']"

Hygge
Avatar billede coderdk Praktikant
27. maj 2004 - 18:47 #7
Eeerh, hvis du har et input felt, "alder", i en form som har METHOD="POST" skal du tilgå den med $_POST['alder'] hvis du har alder i URL'en som: http://www.example.dk/script.php?alder=2245 skal du tilgå den med: $_GET['alder'] - du kan dog bruge $_REQUEST['alder'] til begge...
Avatar billede bb_maze Nybegynder
27. maj 2004 - 21:00 #8
Hmm... Kan godt ordne de to første ting, de er såmænd næmme nok, men de to sidste detaljer, dem kan jeg altså ikke lige greje :( :/ Kan du komme med et eksempel fra koden?

Hygge
Avatar billede bb_maze Nybegynder
27. maj 2004 - 21:03 #9
Har fået en til at kigge på det, og han fik følgende, men det virker ikke... Er der nogle fejl?

<body bgcolor="#E9E9E2"><?php
function head() {
include('config.php');
echo "<table width=\"120\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\">
<tr><td bgcolor=\"$tableborder\">
<table width=\"120\" border=\"0\" cellpadding=\"0\" cellspacing=\"\" align=\"center\">
<tr><td bgcolor=\"$bgcolor\">";
}
function foot () {
echo "</td></tr></table></td></tr></table>";
}
function record($_SERVER[REMOTE_ADDR]) {
include('config.php');
$fp=fopen("$ip_file", "a+");
fputs ($fp,$REMOTE_ADDR."][".time()."\n");
fclose($fp);
}
function check($_SERVER[REMOTE_ADDR]) {
include('config.php');
global $valid;
$ip=$_SERVER['REMOTE_ADDR'];
$data=file("$ip_file");
$now=time();
foreach ($data as $record) {
$subdata=explode("][",$record);
if ($now < ($subdata[1]+3600*$timeout)) {
if ($ip == $subdata[0]) {
$valid=0;
break;
}}}}
//##################### Save data ##############################
function save($answer){
global $answer;
include('config.php');
$data=file($datafile);
$subdata=explode("][",$data[$answer]);
$subdata[2]+=1;
$data[$answer]=implode("][", $subdata);
$data[$answer]=$data[$answer]."\n";
$fp=fopen($datafile,"w+");
$a=0;
do{
fputs($fp,$data[$a]);
$a++;
}while($a<count($data));
fclose($fp);
}
//########################## Show Form ############################
function form($PHP_SELF){
include('config.php');
head();
echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><form method=\"post\" action=\"index.php?side=vote\"><p align=\"center\">";
$data=file($datafile);
$question=$data[0];
$nb_options=count($data)-1;
echo "$question</p>";
for($nb=1;$nb <= $nb_options; $nb++){
$option=explode("][","$data[$nb]");
echo "<input type=\"radio\" name=\"answer\" value=\"$nb\"> ";
echo "$option[0]<br>";
}
echo "<input type=\"hidden\" name=\"save\" value=\"yes\">";
echo "<p align=\"center\"><input type=\"submit\" name=\"Submit\" value=\"Submit\"></form></font>";
echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\"><a href=\""; echo "index.php?side=vote"; echo "&action=results\">Vis resultat</font></p>";
foot();
}
//################## Function to show results ########################
function results(){
include('config.php');
head();
$data=file($datafile);
$nb_answers=count($data);
$votes=0;
$a=1;
do{
$subdata=explode("][",$data[$a]);
$votes += $subdata[2];
$a++;
}while($a < $nb_answers);
$a=1;
$b="answerv";
$v=100/$votes;
echo "<p align=\"center\"><font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\">$data[0] ($votes stemmer)<br><br>";
do{
$subdata=explode("][",$data[$a]);
$av = $subdata[2] * $v;
echo "<font size=\"$fontsize\" face=\"$font\" color=\"$textcolor\">$subdata[0]"; printf(" %01.1f", $av); echo"%<br>";
$p2v = 100-$av;
echo "<img src=\"$subdata[1]\" width=\"$av\" height=\"10\"><img src=\"$image\" width=\"$p2v\" height=\"10\"><br>";
$a++;
} while ($a < $nb_answers);
echo "<br>";
foot();
}
//###################### Engine ####################################
check($_SERVER[REMOTE_ADDR]);
if ($valid=="0"){ results();}
elseif ($_GET[action]=="results") { results(); }
elseif ($_POST[save]=="yes" && $valid!="0") { save($Answer); record($_SERVER[REMOTE_ADDR]); results();}
elseif ($_GET[$action]=="save" && !empty($valid)) { results(); }
elseif ($_GET[$action]!="save" && $valid!="0"){ form($PHP_SELF); }
?>

Hygge
Avatar billede coderdk Praktikant
27. maj 2004 - 23:10 #10
Ja du har en form der submitter med post - den har et felt "answer", så du skal erstatte $answer med $_POST['answer'] eller $_REQUEST['answer']
Avatar billede bb_maze Nybegynder
26. juni 2004 - 14:22 #11
coderdk: Smider du et svar? Så får du point. Tak for hjælpen!

Hygge
Avatar billede coderdk Praktikant
26. juni 2004 - 15:07 #12
Selvfølgelig :)
Avatar billede bb_maze Nybegynder
26. juni 2004 - 17:38 #13
Tak for hjælpen :)

Hygge
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester