Rasmus
-
Innlegg
238 -
Ble med
-
Besøkte siden sist
Innholdstype
Profiler
Forum
Hendelser
Blogger
Om forumet
Innlegg skrevet av Rasmus
-
-
Når det gjelder selve HTML-koden kan du sette name atributten på input-taggen til å være et array.
Eksempel
<input name="bilder_array[]" .. /> <input name="bilder_array[]" .. /> osv..
Da vil du kunne lese ut alle bildene i fra arrayet når du har postet skjemaet. Da kan du ha så mange input bilder du vil, selv om dette neppe er lurt. Det finnes begrensninger for filopplasting og eksekveringstid for post-requester i php.ini (og i konfigurasjonsfila til webtjeneren (f.eks. Apache)).
For å unngå problemet med å spesifisere antall bilder på forhånd, kan du implementere JavaScript (klientside-scripting). Du bør da ha 1 eller flere inputbokser som default, og lage en knapp for å legge til flere input-bokser. Du bør ha en øvre begrensning på antall inputbokser, i tillegg til en submit knapp.
<script type="text/javascript"> //lag en funksjon her som skriver ut input-taggen ved en onclick event på en eller annen knapp document.write('<input name="bilder_array[]" .. />'); </script>
Dersom antall filer som postes (sjekk størrelsen på bilder_array) er lik øvre begrensning for inputbokser, så kan du (etter å ha lagret filene) spørre brukeren om han vil legge inn flere bilder.
Når brukeren har postet alle bildene, kan du f.eks. kjøre ut thumbnail-visning med ekstra data som skal inn per bilde. (F.eks. beskrivelse). Dette forutsetter at programmet ditt husker hvilke bilder som ble lastet opp gjennom flere steg (hvis det var flere steg). Bruk sessions til dette.
Slik kan du få et mer brukervennlig system, men det finns sikkert mange andre muligheter.
-
Prøv funksjonen preg_replace.
Problemstillingen virker forresten litt unødvendig, men nå er jeg ikke helt sikker på hvilken kodestruktur du kjører. En lur ting er å skille mellom innhold og kode, da kunne du ungått dette problemet.
Hva er URL?
-
Når det gjelder koden din studerte jeg den ikke så nøye, så feiltolkninger kan forekommer. Det jeg imidlertid la merke til, er måten du beregner filnavnet på. Denne teknikken vil ikke fungere for filnavn som f.eks. "dette.er.en.fil.med.mange.punktum.txt", da vil nemlig filnavnet bli "dette".
Bortsett fra det er det bare et par småting i HTML-koden.
Så til en løsning på problemet.
Alternativ 1
Legg inn i et array og bruk funksjonen array_multisort. Da kan du sortere på forskjellige nøkler(keys).
Alternativ 2
Dersom du benytter PHP5 kan det være interessant å se på scandir. Den kan gjøre nøyaktig det du ber etter. Den sorterer alfabetisk i stigende rekkefølge (som standard). Det eneste du trenger å kode er løkka for å iterere gjennom arrayet.
oi, kom i fare for å kode det selv. Denne skal gjøre sånn ca. det du er ute etter.
<?php //PHP5 $mappe = "poetry"; $filer = scandir($mappe); $this_filename = $_SERVER['PHP_SELF']; foreach($filer as $fil){ if(!is_dir($fil)){ $filetternavn=substr($fil,strrpos($fil,".")+1); $filnavn=substr($fil,0,(strlen($fil)-strlen($filetternavn)-1)); echo('<a href="'.$this_filename.'?action=show_poetry&name='.$fil.'">'.$filnavn.' ('.$filetternavn.')</a><br />'."\n"); } } ?>
Her lister jeg ut alle filer og kataloger til et array. Deretter kjører jeg en foreach-løkke for å skrive ut filene.
Her sjekker jeg først at det ikke er en katalog, deretter finner jeg $filetternavn og $filnavn (basert på lengden til $filetternavn). Deretter skriver jeg ut ca. det samme som du ønsket (filetternavn kan du fjerne, men det må fortsatt beregnes). Har modifisert HTML-koden slik at den er gyldig (forutsatt at den plasseres i f.eks. en paragraf <p>).
Til slutt. Vær ops på at ikke alle filer har filetternavn. (Kod selv )
-
Det beste hadde vært å ikke brukt frames, men det lar seg gjøre. Søk litt på forumet etter include evt. include-script.
-
-
bruk crontab
Et kjapt søk avslører at dette har vært diskutert før!
-
Siden dere er en stor familie, så bør dere heller kjøpe dere flere pc'er.
Å kjøpe en pc til 50 000 - 100 000 er bortkastet - alle pc'er blir utdatert.
Om jeg måtte bruke så mye penger ville jeg investert i bl.a. UPS,filserver,backuptjener, gode skjermer og diverse programvare.
-
Når initialiserer du objektet $DB?
-
1. Før hadde en av sidene et eget stilark ( et bildegalleri, med bl.a annet verdien display:none; for menyen, for å få bedre plass). Går det an å angi et eget stilark for en av .inc filene? (uten å ha noe <head> i .inc åpenbart)
lag en <div id="incfilene"> ...includescript... </div>
deretter endre css-fila til å gjelde kun for div#incfilene
2. Har et meget enkelt mailskjema i php. Før lå det på som en egen fil "mail.php", men nå som det er i blant de andre .inc filene (lar forøvrig endelsen .php være) hvordan skal jeg refere til scriptet i html'en til skjemaet? Før var det <form method="post" action="svar.php">...Hvis du skal poste til samme fil kan du prøve følgende
<form method="post" action="<?php echo $_SERVER['PHP_SELF']."?".$_SERVER["QUERY_STRING"]; ?>">
Hvis ikke må du poste til en url som inkluderer svar.php
ÆØÅ-problemet er jeg ikke sikker på. Bruker du vanlig include()?
-
går det ikke an å få reslutatene fra søkene i ren tekst?
dersom du bare vil ha tekst, kan du bruke strip_tags
-
Prøv å legg til litt html kode i head
<base href="http://www.hardware.no/">
Da spesifiserer man baseadressen for alle relative linker i dokumentet.
-
tv-guiden til nettavisen burde være rimelig enkel å parse
-
Du tenker vel på en RSS-leser?
Se om du finner noe nyttig her
http://www.hotscripts.com/PHP/Scripts_and_...ms/XML_and_PHP/
-
Jepp, jeg vil tilføye at jeg liker å bruke mysql_result eller list for å unngå den ekstra kodelinjen. (små-irriterende )
eks:
list($antall) = mysql_fetch_row(...
Hehe, ikke dumt
Kort summert
function mysql_count($tabell){ list($antall) = mysql_fetch_row(mysql_query('SELECT COUNT(*) FROM '.$tabell.'')); return $antall; }
Hvem trenger vel feilhåndtering
-
For å finne antall rader kan man jo bruke COUNT.
mysql
SELECT COUNT(*) FROM tabell;
php
$sql = 'SELECT COUNT(*) FROM tabell'; $row = mysql_fetch_row(mysql_query($sql)); $antall = $row[0];
-
Ja, implode tar bare to parametre.
string implode ( string glue, array pieces )
prøv heller kontrollstrukturen foreach.
foreach($links as $link){ echo "<tr align=\"center\"><td >"; echo $link; echo "</td></tr>"; }
Dersom dette ikke fungerer hadde det vært fint om du vise oss strukturen på $links. dette kan gjøres ved å bruke print_r funksjonen. F.eks.
echo "<pre>"; print_r($links); echo "</pre>";
-
Prøv
return array('files'=>$files,'filesize'=>$filesize);
Det vil returnere et array med et array og filstørrelsen
Eksempel:
Array ( [files] => Array ( [0] => fil1.php [1] => fil2.txt ) [filesize] => 10055 )
-
Det virker ikke som om noen kan hjelpe meg med å få tegnene til å vises korrekt. Kan noen da hjelpe meg med å integrere en kode som gjør om "æ", "ø" og "å" til ":oslash;", "aring;" osv.? Dette virker i hvert fall som eneste fornuftige utvei (bortsett fra å skrinlegge hele prosjektet, men det gjør jeg ikke ennå).
Mulig at htmlentities vil gjøre susen.
$streng = "Ærlig, Østen og Åse..."; $streng = htmlentities($streng); echo $streng; // Ærlig, Østen og Åse...
-
Det er mulig, men du blir nok nødt til å oppdatere hele siden.
Dersom du bruker JavaScript kombinert med CSS, får du nok til en elegant løsning. Dette kan selvfølgelig kombineres med PHP.
-
Har mekket et PHP-program for å inkludere sider dynamisk. Dvs. man har en design-ramme og inkluderer innholdet på en bestemt plass i rammen. På den måten slipper man å inkludere toppen og bunnen av rammen i hver fil.
Parameterne til programmet sendes gjennom en GET-request. Dvs. at man kan lage linker med parametrene. Foreløbig er det to parametre som gjelder. 'sub' og 'innhold'.
sub spesifiserer mappen innholdet ligger i.
innhold spesifiserer filen som skal inkluderes (uten filetternavn)
Med <angitte filetternavn> mener jeg et array som inneholder tillatte filetternavn. Den første som matcher vil bli inkludert.
Eksempel på linker
?innhold=test - inkluderer test.<angitte filetternavn>
?sub=hardware - inkluderer hardware/index.<angitte filetternavn>
?sub=hardware&innhold=grafikk -inkluderer hardware/grafikk.<angitte filetternavn>
Dersom verken sub eller innhold er spesifisert, inkluderes hovedsiden.
Dersom en fil ikke finnes inkluderes 404.html, evt. om denne ikke finnes, skrives det ut en 404 feilmelding.
Når en side inkluderes finner programmet automatisk ut hvilken tittel siden har, ved å sjekke h1-taggen i html-koden. (f.eks. <h1>Grafikk</h1> = grafikk.)
Denne kan hentes ved å bruke en metode print_title(), slik at man kan skrive den ut i sidens title-tag.
--
Kjente problemer:
Dersom det er en PHP-feil (f.eks. parse error) i dokumentet, vil man få en blank side. Dette er på grunn av at jeg benytter Output Control Functions for å hente innholdet i fila som skal inkluderes.
index.php
<?php //innhold*.php må inkluderes require_once('innhold_v1.0.0.php'); //deretter må man opprette en ny instans av klassen (før output) $di = new DynamiskInclude(); ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Rasmus :: <?php /*Skrive ut tittel*/ $di->print_title(); ?></title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta name="generator" content="jEdit - http://www.jedit.org/"> <style type="text/css"> div#topp { background-color: #DDDDDD; } div#innhold { background-color: #FFFFFF; } div#bunn { background-color: #DDDDDD; } </style> </head> <body> <div id="topp"> <p> <a href="./">Hovedsiden</a> • <a href="?innhold=lorem">Lorem</a> • <a href="?sub=vestibulum">Vestibulum</a> </p> </div> <div id="innhold"> <?php //her blir det dynamiske innnholdet skrevet ut $di->print_innhold(); //fjerne klassen unset($di); ?> </div> <div id="bunn"> <p>Bunn</p> </div> </body> </html>
innhold_v1.0.0.php
<?php /** innhold v1.0.0 - dynamisk include av filer @author Rasmus Toivo Nicolaysen <[email protected]> Dato: 23. januar 2005 Oppdatert: 2. mars 2005, 7. mars 2005, 5.april 2005 (fjernet litt kommentarer siden det er forklart i posten) */ ini_set('implicit_flush',0); class DynamiskInclude { //Definer hva som er hovedsiden var $hovedside = "hoved.php"; //Definer include path. husk forwardslash('/') på slutten. alt innholdet //som ligger under denne mappa, med matchende filetternavn, vil være //tilgjengelig for inkludering. var $include_path = "./"; //hvilke filetternavn det skal matches på. Bruk det mest brukte //filetternavnet først i arrayet (bittelitt raskere). var $tillatte_filetternavn = array("php","html","htm"); //Definer hvor i include-dokumentet tittelen skal hentes. h1 er default var $title_start = "<h1>"; var $title_slutt = "</h1>"; //Diverse 404 variabler;) var $notfound404 = false; //denne skal være false i utgangspunktet var $notfound_melding = "404 Not Found"; //benyttes i tittel var $notfound_melding_html ='<h1>404 Not Found</h1><p>Siden finnes ikke</p>'; var $title; //filens tittel var $innhold; //her lagres filens innhold (ferdig parset) /** Konstruktør som setter igang showet. @return Boolean true */ function DynamiskInclude(){ if ($_GET['sub']||$_GET['innhold']){ $this->do_include($_GET['sub'],$_GET['innhold']); }else { $this->set_inc($this->hovedside); } return true; } /** Finner ut hvilken fil som skal inkluderes og sender videre til set_inc. Dersom ingen match finnes benyttes 404.html, og false blir returnert. @param String $mappe (parent) @param String $filnavn (uten filetternavn) @return Boolean true/false */ function do_include($mappe,$filnavn){ $include_path = $this->include_path; $tillatte_filetternavn = $this->tillatte_filetternavn; $aktuell_mappe = basename($mappe); $aktuell_fil = basename($filnavn); #* if (!$aktuell_mappe || $aktuell_mappe == "" || $aktuell_mappe == null) { $aktuell_mappe = $include_path; }else { $aktuell_mappe = $include_path.$aktuell_mappe.'/'; } #** if(!$aktuell_fil) { $aktuell_fil = "index"; } //selve include uten filetternavn $aktuell_include = $aktuell_mappe.$aktuell_fil; $faktisk_include = false; foreach ($tillatte_filetternavn as $ext) { $temp_inc = $aktuell_include.".".$ext; if (file_exists($temp_inc)) { //her bestemmes det hvilken fil som skal inkluderes $faktisk_include = $temp_inc; break; } } if ($faktisk_include) { $this->set_inc($faktisk_include); return true; }else { $this->set_inc("404.html"); return false; } } /** Definerer hvilken fil som skal inkluderes, parser denne og legger den inn i variabelen $this->innhold. @param String filnavn */ function set_inc($filnavn) { $this->innhold = $this->get_file_contents_parsed($filnavn); if (!$this->innhold) { $this->notfound404 = true; $this->innhold = $this->notfound_melding_html; $this->set_title($this->notfound_melding); } } /** Endrer sidens tittel @param String $title */ function set_title($title){ $this->title=$title; } /** Skriver ut sidens tittel */ function print_title(){ echo $this->get_title(); } /** Finner sidens tittel og returnerer denne. @return String sidens tittel */ function get_title(){ if ($this->title) { return $this->title; } else { $hent_fra = $this->title_start; $hent_slutt = $this->title_slutt; $temp_title=""; eregi("$hent_fra(.*)$hent_slutt", $this->innhold, $temp_title); $this->set_title(strip_tags($temp_title[1])); return $this->title; } } /** Skriver ut include innhold */ function print_innhold(){ echo $this->get_innhold(); } /** @return String include innhold */ function get_innhold(){ return $this->innhold; } /** Ny utgave av get_file_contents som parser innholdet før det blir returnert som en streng @param String $filnavn @return String $contents_parsed */ function get_file_contents_parsed($filnavn) { ob_start(); $resultat = @include($filnavn); $contents_parsed = ob_get_contents(); ob_end_clean(); if ($resultat) { return $contents_parsed; } else { return false; } } } ?>
Komplett eksempel er vedlagt som fil.
Hvis noen har noen forslag til forbedringer hadde det vært fint.
-
<p>Du er innlogget som <?php echo $_SESSION['brukernavn'];?>. <a href="<?php session_destroy(); ?>">Logg ut</a></p>
Problemet er at du ødelegger sesjonen når brukeren har logget inn.
<?php session_destroy(); ?>
Denne sletter sesjonen.
href attributten blir forøvrig tom.
Les mer om session-destroy
-
-
Jeg lagde den før deg
(Ville ikke dele den med noen da...)
@Rasmus: Det gjorde jeg også!
Great Minds Think Alike
-
Sesjonsid lagres i en cookie dersom nettleseren støtter det. Da vil ikke url'en endres. Dersom cookies ikke støttes får man &PHPSESSID=... på slutten av url'en. (Antar at session.name og arg_separator.output er default)
PS: Paste koden, så finner vi kanskje feilen.
PHP og uploadspeedometer
i Programmering og webutvikling
Skrevet
Da må du finne ut tiden før opplasting,sende noe POSTDATA, og finne ut tiden etter opplasting. Resten er triviell matematikk. :!:
Hvis du ønsker en fremdriftsindikator, må du undersøke på http://www.raditha.com/php/progress.php