langbein Nybegynder
21. august 2004 - 15:45 Der er 11 kommentarer og
1 løsning

Liten PHP online editor virker ikke.

Forsøker å kjøre gjennom eksemplene i boken "Beginning PHP" utgitt på Wrox. I kap 10 så er det et en PHP online editor, men denne virker ikke. Den html kode som genereres ut er den under, og den kan ikke lagre innholdet av det som man skriver inn. Noen som ser åpenbare feil ?

<HTML>
<HEAD><TITLE>Welcome to Web Text Editor</TITLE></HEAD>
<BODY>
<CENTER><STRONG>Editing a new file</STRONG></CENTER>
<CENTER>
<FORM NAME="edit_form" METHOD="POST" action="">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="save_file">
<INPUT TYPE="HIDDEN" NAME="dir" VALUE="/var/www/html/phptest/wrox/ch10/docs">
<TEXTAREA ROWS="25" NAME="filebody"
      COLS="80" WRAP="soft">
</TEXTAREA><BR>
Filename: <STRONG>/var/www/html/phptest/wrox/ch10/docs/</STRONG><INPUT TYPE="TEXT" NAME="filename" VALUE="new.txt"
                              SIZE="30">
<INPUT TYPE="SUBMIT" VALUE="Save" NAME="Submit">
</FORM>
</CENTER>

</BODY>
</HTML>
 
Ellers link til samme spørsmål lagt inn hos Wrox:
http://p2p.wrox.com/topic.asp?TOPIC_ID=17949

(Har egentlig litt bedre tro på eksperten .. he, he :)
detox Nybegynder
21. august 2004 - 15:52 #1
Hvordan ser php koden ud?
langbein Nybegynder
21. august 2004 - 16:13 #2
Den ser ikke ut. Bokens dårlige side, synes jeg, det er at de lager for komplisert kode for selv enkle eksempler. Jeg legger ut hele koden for dette eksemplet, for da går det jo eventuelt ann å lage copy/past for testkjøring.

Scriptet editor.php:

<?php
//editor.php
//include "./common.inc";

function editor_form($dir, $filename, $is_new) {
  global $PHP_SELF, $edit_form_cols, $edit_form_rows;
  $filepath = "$dir/$filename";
  if(!$is_new) $filebody = implode("",file($filepath));
  $file_info_array = file_info("$filepath");
  $editable = 1; 
  if($file_info_array["filetype"] != "text") {
      $filebody = $filepath . " is not a text file.
                    You had better not edit it.";
      $editable = 0;
  }
  if($editable) {
?>
<CENTER>
<FORM NAME="edit_form" METHOD="POST" action="<?php echo $PHP_SELF ?>">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="save_file">
<INPUT TYPE="HIDDEN" NAME="dir" VALUE="<?php echo "$dir" ?>">
<TEXTAREA ROWS="<?php echo $edit_form_rows ?>" NAME="filebody"
      COLS="<?php echo $edit_form_cols ?>" WRAP="soft">
<?php echo "$filebody"; ?>
</TEXTAREA><BR>
Filename: <?php echo "<STRONG>$dir/</STRONG>"; ?>
<INPUT TYPE="TEXT" NAME="filename" VALUE="<?php echo $filename ?>"
                              SIZE="30">
<INPUT TYPE="SUBMIT" VALUE="Save" NAME="Submit">
</FORM>
</CENTER>

<?php
  }
  else {
      echo "<CENTER><STRONG><FONT COLOR=\"RED\">$filebody</FONT></STRONG></CENTER>\n";
  }
}


function edit_new_form() {
  global $PHP_SELF, $default_dir, $dir;
?>

<CENTER><FORM METHOD="POST" ACTION="<?php echo $PHP_SELF ?>">
<INPUT TYPE="HIDDEN" NAME="action" VALUE="editor_page">
<INPUT TYPE="HIDDEN" NAME="dir" VALUE="<?php echo $dir ?>">
<INPUT TYPE="SUBMIT" VALUE="Edit New"></FORM></CENTER>

<?php
}

function save_file() {
  global $filename, $filebody, $dir, $PHP_SELF, $new_file;
  if(file_exists("$dir/$filename")) {
    if($new_file=0){
      echo "<SCRIPT>result=confirm(\"Overwrite '$dir/$filename'?\");     
      if(!result) history.go(-1);</SCRIPT>";
    }
    else{
      $new_file=0;
    }
  }
  if($file = fopen("$dir/$filename", "w")) {
      fputs($file, $filebody);
      fclose($file);
  if(file_exists("$dir/$filename")) echo " file now exists...";
  }
  else {
      error_message("Can't save file $dir/$filename.");
  }
echo "<SCRIPT>parent.location.href='$PHP_SELF?action=dir_page\&dir=$dir';</SCRIPT>";
echo "<SCRIPT>self.location.href='$PHP_SELF?action=editor_page\&dir=$dir\&filename=$filename';</SCRIPT>";
}

function editor_page() {
  global $dir, $filename, $default_filename;
  $is_new = 0;
 
  if($filename == '') {
      $filename = $default_filename;
      $is_new = 1;
  }

  if(!file_exists("$dir/$filename")) $is_new = 1;

  if(!$is_new) {

  edit_new_form();
  ?>
  <TABLE BORDER="1" WIDTH="100%">
  <TR><TH WIDTH="100%" COLSPAN="2">
  <CENTER><STRONG>Stats for <?php echo "$dir/$filename" ?>
  </TD></TR>

  <?php
  $file_info_array = file_info("$dir/$filename");
  foreach($file_info_array as $key=>$val) {
      echo "<TR><TH WIDTH=\"30%\">". ucfirst($key) .
          "</TD><TD WIDTH=\"70%\">" . $val .
          "</TD></TR>\n";
  }
?>
</TABLE>
<?php

  } else {

      echo "<CENTER><STRONG>Editing a new file</STRONG></CENTER>\n";
  }
  editor_form($dir, $filename, $is_new);
}

$def_length=strlen($default_dir);
if(!empty($dir)) $dir_test=substr($dir, 0, $def_length);

if(empty($dir) || ($dir_test!=$default_dir)) {
  $dir = $default_dir;
}

?>
langbein Nybegynder
21. august 2004 - 16:14 #3
Og så skjøter den vel inn en slags hjelpefil, common.inc:

<?php

// $default_dir = "./docs";

$default_dir = "/var/www/html/phptest/wrox/ch10/docs";
$default_filename = "new.txt";
$edit_form_cols = 80;
$edit_form_rows = 25;
$text_file_array = array( "txt", "htm", "html", "php", "inc", "dat" );
$image_file_array = array("gif", "jpeg", "jpg", "png");

function html_header() {
  ?>
  <HTML>
  <HEAD><TITLE>Welcome to Web Text Editor</TITLE></HEAD>
  <BODY>
  <?php
}

function html_footer() {
  ?>
  </BODY>
  </HTML>
  <?php
}

function error_message($msg) {
  html_header();
  echo "<SCRIPT>alert(\"$msg\"); history.go(-1)</SCRIPT>";
  html_footer();
  exit;
}

function date_str($timestamp) {
  $date_str = getdate($timestamp);
  $year = $date_str["year"];
  $mon = $date_str["mon"];
  $mday = $date_str["mday"];
  $hours = $date_str["hours"];
  $minutes = $date_str["minutes"];
  $seconds = $date_str["seconds"];
 
  return "$hours:$minutes:$seconds $mday/$mon/$year";
}

function file_info($file) {
  global $text_file_array, $WINDIR;

  $file_info_array["filesize"] =
                  number_format(filesize($file)) . " bytes.";
 
  $file_info_array["filectime"] = date_str(filectime($file));
  $file_info_array["filemtime"] = date_str(filemtime($file));
  if(!isset($WINDIR)) {
      $file_info_array["fileatime"] = date_str(fileatime($file));
      $file_info_array["filegroup"] = filegroup($file);
      $file_info_array["fileowner"] = fileowner($file);
  } else {
      $file_info_array["fileatime"] = "not available";
      $file_info_array["filegroup"] = "not available";
      $file_info_array["fileowner"] = "not available";
  }

  $extension = array_pop(explode(".", $file));

  if(in_array($extension, $text_file_array))
              $file_info_array["filetype"] = "text";
  else $file_info_array["filetype"] = "binary";

  return $file_info_array;
}

?>
langbein Nybegynder
21. august 2004 - 16:15 #4
Men Apachen min gjenkjenner nok ikke .inc som en php fil. Mon det skulle ligge noe der ??
langbein Nybegynder
21. august 2004 - 16:17 #5
Jeg har ellers redigert inn directory navn slik at det skal passe med min server. Passer nok ikke inn noen andre steder:

$default_dir = "/var/www/html/phptest/wrox/ch10/docs";
langbein Nybegynder
21. august 2004 - 16:36 #6
Forsøkte å endre php.conf slik at den skulle kjennei igjen .inc som php fil. Dette hjalp ikke.
detox Nybegynder
21. august 2004 - 16:48 #7
Det er rigtig nok meget indviklet lavet og samtidig på flere måder en gammel kode.
Det ser ud til at scriptet bl.a. er afhængig af register_globals = On. Ligesom der oose er mange forældede html tags. Jeg tror det bliver for besværligt at rette til og du vil få mere ud af at lave et helt nyt.
Jeg kan heller ikke se at funktionen: save_file() overhovedet bliver kaldt på noget tidspunkt.
detox Nybegynder
21. august 2004 - 17:48 #8
Det er nærmest som om der mangler en del til at kalde nogle af de forskellige funktioner.
langbein Nybegynder
21. august 2004 - 20:48 #9
Jo, jeg har heller ikke blitt helt klok på den.

Har inntrykk av at det er flere PHP bøker som gjør akkurat dette, nemlig å blåse opp det som egentlig skulle vært en rimelig enkel kode til noe nesten uoverskuelig. Av de eksemplene som jeg har fått til å fungere, så har jeg skrevet flesteparten om til ca 30 % av den opprinnelige kode. 70 % har blitt redigert bort, og fremdeles så har scriptet gjort det samme, men da på en rimelig overskuelig måte. Sikkerhet og slike ting har sikkert blitt dårligere, men i det minste så er det mulig å forstå sånn noenlunde hvordan det fungerer.

Vil forsøke å sjekke på dette med register_globals (uten at jeg egentlig vet hva dette er :)
langbein Nybegynder
21. august 2004 - 21:13 #10
Nå vet jeg hva register_globals er !!

Dette står dokumentert inne i php.ini filen:

; You should do your best to write your scripts so that they do not require
; register_globals to be on;  Using form variables as globals can easily lead
; to possible security problems, if the code is not very well thought of.
register_globals = On

Jeg satte registerglobals til "On" også kjørtebåde dette og noen andre script som et skudd !  Læreboken hører tydeligvis ikke til de aller beste ..

detox -> Takker for hjelpen - dette hadde jeg aldri funnet ut av på egen hånd !!

Har du ellers noe forslag til en PHP bok som er "god" og "passe moderne" (For PHP 5 er vel ikke særlig mye i bruk ennå .. Eventuelt adresse til en web side med gode eksempler, for det er helt klart at de PHP bøkene som jeg harstående ikke holder mål ut fra "dagens standard".

Kan du legge et "svar" !? Du løste faktisk hele problemet !
langbein Nybegynder
21. august 2004 - 21:21 #11
detox Nybegynder
21. august 2004 - 21:37 #12
Godt du fik det løst. Jeg vil råde dig til at sætte: register_globals = Off og lære at programmere ud fra det. Et andet godt råd der hjælper til at kode korrekt er at sætte: error_reporting  =  E_ALL, ligeledes i php.ini.
Jeg kender ikke nogen bøger om php, men der findes en masse gode websider.
Først og fremmest online-manualen:
http://dk2.php.net/manual/da/index.php

Eksempler på sider med mange tutorials:

http://www.phpfreaks.com/
http://www.oxyscripts.com/
http://www.devshed.com/
http://www.zend.com/zend/tut/index.php
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

Opret Preview

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





Premium
ATP har bygget it-system til udbetaling af feriepenge på tre måneder: "Mange har arbejdet nat og weekender for at nå det"
Interview: ATP-medarbejdere har måttet droppe sommerferien og arbejde om natten, men nu er løsningen til udbetaling af danskernes indefrosne feriemidler klar. "Lige nu har vi 300.000 i kø, og der er en ventetid på omkring to timer," siger ATP-underdirektør Jesper Juel-Helwig. Bliv klogere på, hvordan ATP har skabt den nye løsning på tre måneder.
Computerworld
Elon Musk præsenterede fremtidens Tesla-batteri - og straks styrtdykkede aktien
Tesla-stifteren Elon Musk præsenterede tirsdag selskabets visioner og strategier inden for fremtidens elbils-batteri. Men nyhederne - eller mangel på samme - fik investorerne til sende aktien ned med 5,6 procent.
CIO
Torben Fabrin og Arla måtte på få dage omstille hele deres produktion da coronaen ramte
Da coronaen ramte verden måtte mejerigiganten Arla på få dage omstille sin produktion. Samtidig voksede salget massivt til supermarkeder mens institutioner og restauranter gik næsten i stå. Hør hvordan Arla kom gennem krisen ved blandt andet være klar med realtime analytics.
Job & Karriere
På jagt efter et it-job i Jylland? Her er 10 stillinger fra Aabenraa til Aalborg, der ledige netop nu
Vi har fundet en række spændende stillinger til dig, der jagter et it-job. Her kan du vælge og vrage mellem ledige stillinger lige fra Aabenraa til Aalborg.
White paper
Sådan sikrer du hovednøglen til jeres data
80% af alle ransomwareangreb skyldes misbrug af privilegerede brugeradgange. Ved at begrænse og overvåge adfærden på de privilegerede konti samt kontrollere mængden af tildelte rettigheder kan du mindske skaden ved hackerangreb mod din virksomhed og i visse tilfælde helt blokere dem. Internt kan du bruge kontrollen med brugeradgange til at dokumentere, hvem der bevæger sig i hvilke systemer, og hvad der foregår derinde. Privilegeret brugerstyring har de seneste to år stået øverst på Gartners Top10-liste over it-sikkerhedsprojekter, der bør få højeste prioritet. Alligevel er teknologien kun så småt ved at finde fodfæste i Danmark. Det kan viden om åbenlyse gevinster, relativ kort implementeringstid og yderst rimeligt budget være med til at ændre på. I dette whitepaper folder vi temaet privilegeret brugerstyring ud og placerer teknologien i det væld af prioriteringer, som CISO’en hver dag skal foretage.