torms Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Jeg har en database med en del tabeller. Ved hjelp av diverse spørringer, vet ikke helt enda hvordan, vil jeg lagre resultatene av disse i en fil. Finnes det en serialiseringsfunksjon i PHP? Kan noen gi meg et tips hva jeg kan begynne å se på? -torms Lenke til kommentar
Lokaltog Skrevet 21. juli 2004 Del Skrevet 21. juli 2004 Tenker du på noe i retning av dette: http://www.devshed.com/c/a/PHP/Serializing-XML-With-PHP/ ? Lenke til kommentar
torms Skrevet 22. juli 2004 Forfatter Del Skrevet 22. juli 2004 Nei (tror jeg), ikke så bevandret i XML at jeg kan se at det er dette jeg er ute etter. Skal lagres på fil som en tekstfil. Filen skal bestå av 10 felter som er skilt med semikolon. Denne filen skal så importeres i en applikasjon. Applikasjonen kan jeg ikke gjøre noe med. -torms Lenke til kommentar
Blodhemn Skrevet 22. juli 2004 Del Skrevet 22. juli 2004 Kan det være implode() og explode() du er ute etter? Lenke til kommentar
torms Skrevet 22. juli 2004 Forfatter Del Skrevet 22. juli 2004 Kan godt være..hvis det går å bruke semikolon istedet. Ser for meg noe sånt: -for(utfør inntil lengde på tabeller) -sql-spørring mot tabeller hvor jeg henter ut de 10 feltene -setter i en array(hvis vi skal bruke ditt forslag) -outputstream til en fil -endfor Tips om hva jeg skal se på for å lage en stream til en fil hadde også vært fint.. -torms Lenke til kommentar
Blodhemn Skrevet 22. juli 2004 Del Skrevet 22. juli 2004 (endret) Kan godt være..hvis det går å bruke semikolon istedet. Ser for meg noe sånt: -for(utfør inntil lengde på tabeller) -sql-spørring mot tabeller hvor jeg henter ut de 10 feltene -setter i en array(hvis vi skal bruke ditt forslag) -outputstream til en fil -endfor Tips om hva jeg skal se på for å lage en stream til en fil hadde også vært fint.. -torms mysql_fetch_array() / mysql_fetch_assoc() så er de allerede i et array.. mysql_fetch_array() er kanskje ikke så smart siden den vil returnere dobbelt opp med verdier. En med associative keys og en med nummeriske keys. F.eks: while ( $rad = mysql_fetch_assoc($sql) ) { $verdier = array_values($rad); $linje = implode(";", $verdier); echo "$linje\n"; } Eller kanskje bedre: while ( $rad = mysql_fetch_row($sql) ) { echo implode(";", $rad) . "\n"; } Et eksempel: (første gang jeg driver med filestreams så bær med meg;) ) if (!$fp = fopen('../txt.txt', 'a')) { die('Kunne ikke åpne fil'); } while ( $rad = mysql_fetch_row($sql) ) { if (fwrite($fp, implode(";", $rad) . "\n") === false) { die('Kan ikke skrive til fil'); } } fclose($fp); Denne koden skriver hver nye rad på ny linje. Kolonnene er skilt med semikolon. EDIT: Når jeg leser igjennom igjen så ser at du skal ha flere tabeller inn i filen? Akkurat hva er det du har tenkt å legge inn i filen? Navnet på tabellene eller innholdet i tabellene? Serialisering av rader fra en tabell kan i allefall gjøres som jeg har vist. Endret 22. juli 2004 av Blodhemn Lenke til kommentar
Blodhemn Skrevet 22. juli 2004 Del Skrevet 22. juli 2004 (endret) Alt du trenger finner du her http://no2.php.net/manual/en/ref.filesystem.php http://no2.php.net/manual/en/function.fopen.php Endret 22. juli 2004 av Blodhemn Lenke til kommentar
torms Skrevet 22. juli 2004 Forfatter Del Skrevet 22. juli 2004 Du er en knupp Blodhemn Må innrømme at jeg er lat! Lett å skrive spm her istedet for å bla i manualen.. Det er innholdet av tabellene jeg skal skrive til fil. -torms Lenke til kommentar
Blodhemn Skrevet 22. juli 2004 Del Skrevet 22. juli 2004 (endret) if (!$fp = fopen('../txt.txt', 'a')) { die('Kunne ikke åpne fil'); } $result = mysql_list_tables('database'); while ($rad = mysql_fetch_row($result) ) { $sql = mysql_query("SELECT * FROM ".$rad['0']." ORDER BY id DESC LIMIT 10"); fwrite($fp, "Tabell: $rad[0]\n"); while ( $sql_rad = mysql_fetch_row($sql) ) { if (fwrite($fp, implode(";", $sql_rad) . "\n") == false) { die('Kan ikke skrive til fil'); } } // Skille tabellene med to linjeskift. fwrite($fp, "\n\n"); } fclose($fp); Skrev en liten kodesnutt som vil gå gjennom alle tabellene og skrive de siste 10 radene fra tabellene inn i en fil. Ikke verdens mest effektive kode. Så det bør ikke være noe som kjøres mye og ofte. SQLen er også avhengig av at alle tabellene har et felt id. Du vet vel best hvordan du tilpasser den til det du trenger. Med serialisering så er det like viktig at det er struktur i filen slik at den lett kan leses også. Det tror jeg ikke mitt eksempel er så særlig egnet til. Endret 22. juli 2004 av Blodhemn Lenke til kommentar
torms Skrevet 22. juli 2004 Forfatter Del Skrevet 22. juli 2004 Et litt utidig off-topic spm: Lager en tabell der navnet på tabellen er en string som er brukerbestemt (fra en form). Input er gjerne på formen: arrangement årstall Eks: Blåbærfestivalen 2004 Finner ikke funksjon for å fjerne mellomrom i PHP (unntatt forran og bak). Mysql liker tydligvis ikke dette mellomrommet, nekter å lage tabeller med mellomrom (har forsøkt div varianter). -torms Lenke til kommentar
Lokaltog Skrevet 22. juli 2004 Del Skrevet 22. juli 2004 $var = str_replace(' ', '', $var); Lenke til kommentar
Blodhemn Skrevet 22. juli 2004 Del Skrevet 22. juli 2004 (endret) fort og gæli str_replace(" ", "_", $string); Da vil mellomrom erstattes med underscore, som er greit for da opprettholder man ordskillene. Går sikkert ann å bruke str_replace(" ", "", $string); Om du vil fjerne de helt. Finnes sikkert bedre funskjoner for dette, men de bør virke EDIT: Var litt sent ute der Endret 22. juli 2004 av Blodhemn Lenke til kommentar
torms Skrevet 22. juli 2004 Forfatter Del Skrevet 22. juli 2004 Sortering er ikke aktuelt. Tabellene skal kjøres inn i applikasjonen som de ligger i databasen. Men det blir flertabellspørring, har ikke kontroll på dette enda, med 3 felter fra en tabell, 2 felter fra en annen og 5 fra en tredje. Sånn røflig ser de sånn ut: oversikt(id(primær), navn, fradato,tildato) bukertab(avstand(primær), lag,id(fremmed)) tidtabell(tid(primær),tidmellom,avstand(fremmed)) OK, tabell oversikt er en tabell som blir oppdatert når en bruker lager et arrangment. I arrangementet kan det være inntill 2 andre arr., tabellen brukertab opprettes altså etter behov fra bruker. Tidstabell holder styr på tidplanen for brukertab. -torms Lenke til kommentar
torms Skrevet 22. juli 2004 Forfatter Del Skrevet 22. juli 2004 (endret) Rekker ikke å følge tempoet deres Men bra at dere er på hugget.. -torms Endret 22. juli 2004 av torms Lenke til kommentar
Ueland Skrevet 26. juli 2004 Del Skrevet 26. juli 2004 laget en cachefunksjon for vikingboard her i helgen som lagrer resultatsett fra spørringer til fil (ved hjelp av serialize), kan jo se om du ikke finner noe nytting her: <?PHP //////////////////////////////////////// // system : VikingBoard // version: 0.1 alpha // author : Tor Henning Ueland // website: www.vikingboard.com // //////////////////////////////////////// //========================================== // Database cache class //========================================== class cache { //========================================== // SQL CACHE SYSEM (FUNCTION) //========================================== function sql($query) { //can be changed (but really, what`s the point?) $cache_file = "./cache/sql_".$_SERVER['HTTP_HOST']."_.php"; $cache_maxage = "86400"; //not to be touched $cache_data = @file_get_contents($cache_file); //========================================== // Making shure that the cache file exists //========================================== if (!file_exists($cache_file)) { $handle = fopen($cache_file, 'w+'); if(fwrite($handle, "<?PHP \n # Vikingboard Cache file for the domain '".$_SERVER['HTTP_HOST']."'. \n ?> \n \n") === FALSE) { die('<h1>Cache error</h1>Could not create cache area for "'.$_SERVER['HTTP_HOST'].'"<br>, please try again later.'); } } //========================================== // is the query saved in the cache? else save it //========================================== if (!strstr($cache_data, "====$query====")) { //get the correct result from the DB global $db; $to_cache = $db->$query(); //make it fileish! while ($data = $to_cache->row()) { $q_data[] = $data; } $q_data = serialize($q_data); //make it "nice" $to_cache = "<?PHP \n ====$query==== \n[_DATE_".$query."_]".forumtime()."[/_DATE]\n[_RESULT_".$query."_]".$q_data."[/_RESULT]\n ?>"; //Open file and save the new query $handle = fopen($cache_file, 'a'); if(fwrite($handle, $to_cache) === FALSE) { die('<h1>Cache error</h1>Could not save data to the cache file, <br>please try again later.'); } //read file again $cache_data = @file_get_contents($cache_file); } //========================================== // Is the result to old? (in such cases, update it). //========================================== else { preg_match("[_DATE_".$query."_\](.+?)\[/_DATE]", $cache_data, $cache_age); if($cache_age[1] <= (forumtime() - $cache_maxage)) { //looks old, update it. global $db; //get from DB $to_cache = $db->$query(); while ($data = $to_cache->row()) { $q_data[] = $data; } $q_data = serialize($q_data); //get data from cache and update it with correct info. $new_data = str_replace("[_DATE_".$query."_\](.+?)\[/_DATE]", "[_DATE_".$query."_]".forumtime()."[/_DATE]". $cache_data); $new_data = str_replace("[_RESULT_".$query."_\](.+?)\[/_RESULT]", "[_RESULT_".$query."_]".$q_data."[/_RESULT]". $cache_data); //Get file and update it. $handle = fopen($cache_file, 'w'); //show an error in case we could not complete it. if(fwrite($handle, $new_data) === FALSE) { die('<h1>Cache error</h1>Could not update the cache file,<br>please try again later'); } //read file again $cache_data = @file_get_contents($cache_file); } } //========================================== // return the result. //========================================== preg_match("[_RESULT_".$query."_\](.+?)\[/_RESULT]", $cache_data, $data); //The result has been put into an "double-sided" array, so we pick the "right" one". $data = $data[1]; //when we insterted the data, we serialized it (so that we can put it around), now lets make it (un)logical again. $data = unserialize($data); //And we are done, return the result to the requestor. return $data; /* Music to listen to when you are working with the cache system: "Weird Al Yankowic, live!" out in the stores now;) (dig it!) (yeah, really useful information...) */ } } ?> å lage det "fil-sikkert": //make it fileish! while ($data = $to_cache->row()) { $q_data[] = $data; } $q_data = serialize($q_data); For hver rad, legg resultatene inn i en array, serialiser så arrayen. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå