Avatar billede nyst Nybegynder
17. marts 2005 - 10:45 Der er 58 kommentarer og
1 løsning

printervenlig versionsfil udfra array

Hej,
jeg henter fra database et $array, som så placeres i designet.
På siden vil jeg gerne have et link 'Udskriv' som så sender $array til udskriv.php som er en printervenlig version af siden.

Det jeg søger er at jeg kun behøver en fil nemlig udskriv.php, som så udskriver det som sendes via linket fra 'main-siden'.

F.eks. har jeg dette

<?php
require("db_funk.php");
open_db();
$array = respons("SELECT afdeling, overskrift, indhold, kopi, dag FROM `sider`WHERE indeks=040000");
for ($i = 0; $i < sizeof($array); $i++) {
  extract($array[$i]);
}
close_db();
?>

hvor så $afdeling osv kaldes nede i html'en

og her skal så være linket 'Udskriv' som tager de samme værdier med til udskriv.php.

Kan nogen overskue dette i kun 1 fil ???

:-)
Avatar billede coderdk Praktikant
17. marts 2005 - 10:50 #1
Nu er jeg lidt off topic, men hvorfor ikke bare bruge den aktuelle fil? Altså lave et printer-specifikt style sheet som skjuler alle de elementer der ikke skal printes? :)
Avatar billede nyst Nybegynder
17. marts 2005 - 10:51 #2
glemte at udskriv.php skal så kunne udskrive alle sider og ikke kun en side, men f.eks gælde for 10 eller 100 forskellige sider.
Avatar billede nyst Nybegynder
17. marts 2005 - 10:53 #3
hej coderdk - hyggeligt*S*

ja, det lyder da meget godt men hvad er lige det*G*

:-)
Avatar billede coderdk Praktikant
17. marts 2005 - 10:57 #4
:)

Ligesom du har:

<link rel="stylesheet" type="text/css" href="ditstylesheet.css">

kan du lave:

<link rel="stylesheet" type="text/css" media="print" href="tilprint.css">

Så bør man nok lave den først om til:

<link rel="stylesheet" type="text/css" media="screen" href="ditstylesheet.css">

Hvis du f.eks. har en menu der ikke skal printes ud, som ligger i en DIV med ID "menu", så definerer du bare i tilprint.css at #menu skal have display: none f.eks. - Så fjerner du bare alt hvad du ikke synes skal printes ud - Det kræver at man har lidt struktur på sine sider dog ;)
Avatar billede nyst Nybegynder
17. marts 2005 - 10:58 #5
pt laver jeg en xxx2.php-fil for hver side og det er nemt nok men lidt usmart synes jeg, så hvis man kunne klare det med et link på hver side og så bare en printfil ville det jo være smart, men det er måske det du mener med printer-specifikt style sheet
Avatar billede nyst Nybegynder
17. marts 2005 - 11:02 #6
ja, det kræver skisme en del
alle billeder skal jo også have en DIV så!!!
og hvad med baggrundsfarver i TD'er osv
Avatar billede coderdk Praktikant
17. marts 2005 - 11:03 #7
Et godt eksempel er en artikel om det:

  http://www.alistapart.com/articles/goingtoprint/

prøv at vælge "Print preview" på den side, altså i din "File" menu ;) Så kan du se at siden ser helt anderledes ud på print ;)
Avatar billede nyst Nybegynder
17. marts 2005 - 11:54 #8
hej coderdk,

jeg kan godt se ideen i det og det er ret smart og ikke så meget der skal laves om idet man åbenbart kan give en 'tr' en 'id' og det letter jo.

Men ved du hvordan man i css får noget tekst indført som bliver printet med ud, jeg tænker på f.eks navn foroven og adresse forneden, når nu disse ligger som billeder??

Og hvordan for jeg linket 'udskriv' til at printe i php

:-)
Avatar billede coderdk Praktikant
17. marts 2005 - 12:07 #9
Ja, ID'er og classes er rigtig gode! :)
Du kan lave et print link sådan: <a href="java script:window.print()">Print side</a>
Avatar billede nyst Nybegynder
17. marts 2005 - 13:34 #10
næsten alt funker
dog har jeg problemer med højre side
her bider den bogstaver af
har du haft samme problem???
Avatar billede nyst Nybegynder
17. marts 2005 - 13:42 #11
underligt
der er stor forskel i explorer og netscape
exploreren bider bogstaver af
netscape ikke men skriver her med blåt
!!!!!!!!!!!!
Avatar billede nyst Nybegynder
17. marts 2005 - 14:37 #12
har prøvet at rette denne

#wrapper, #content {
  width: auto;
  margin: 0 7%;

fra    margin: 0 5%;

men ved du om det er det korrekte eller bare et tilfælde det virker bedre???
Avatar billede coderdk Praktikant
17. marts 2005 - 18:05 #13
Ja, jeg ved at de opfører sig lidt forskelligt - Men du skal nok prøve at lege lidt med de margins... Fungerer det ellers som du vil have det?
Det skal også lige siges at jeg ikke har lavet særligt meget med print style sheets... Jeg har bare læst lidt om det, og synes at det er klart den mest optimale måde :)
Avatar billede nyst Nybegynder
18. marts 2005 - 09:29 #14
ja det kræver lidt pluslerier, da der er stor forskel i de forskellige browsere - som sædvanligt desværre...

Kunne man ellers gøre som jeg efterlyste sende de samme $værdier til en og samme fil, hvor så linket laves som en template lige til at include???
Avatar billede coderdk Praktikant
18. marts 2005 - 09:37 #15
Jooh, men det ville da kræve at dit indhold var rimeligt ens struktureret? Men jo! Du er så nødt til at finde en måde at overføre alle data fra filen til udskriv.php...
Avatar billede coderdk Praktikant
18. marts 2005 - 09:40 #16
Fedt nok, det var kun den øverste del af det jeg skrev der kom med :P
Avatar billede coderdk Praktikant
18. marts 2005 - 09:42 #17
Nå, men man kunne jo lave denne om:

for ($i = 0; $i < sizeof($array); $i++) {
  extract($array[$i]);
}

til:

$afdelinger = array();
for ($i = 0; $i < sizeof($array); $i++) {
  $afdelinger[] = $array;
  extract($array[$i]);
}

Så har du al data der skal med over - Men hvis der er meget kan du ikke overføre dem i URL'en til en $_GET - så der kunne du måske bruge en sessionsvariabel - Du kunne også formattere data i den aktuelle fil, og gemme det der skal skrives ud (samme princip som det andet) i en sessionsvariabel...
Avatar billede nyst Nybegynder
18. marts 2005 - 10:04 #18
ja for jeg har denne i bodyen

<?php
echo "<table border=0 cellpadding=0 cellspacing=0>";
echo "<tr><td>";
echo "<tr><td>";
echo "<h3>$afdeling</h3>";
echo "<h1>$overskrift</h1>";
echo "$indhold<br><br>";
echo "$kopi $dag";
echo "<br><br></td></tr></table>";
?>

så det er jo
$afdeling $overskrift $indhold $kopi $dag
som kun indeholder en værdi hver og er ens for alle sider, dvs der er ikke f.eks. 2 eller 3 $afdeling på hver side - kun den ene og de er jo gemt øverst i:

$array = respons("SELECT afdeling, overskrift, indhold, kopi, dag FROM `sider`WHERE indeks=040000");
for ($i = 0; $i < sizeof($array); $i++) {
  extract($array[$i]);
}

???? :-)

så hvis man kunne 'overføre' disse $'s vis et telstlink til udskriv.php ville det jo være smart.
Avatar billede coderdk Praktikant
18. marts 2005 - 10:09 #19
<a href="udskriv.php?data=<?= serialize( $array ) ?>">Udskriv</a>

Og i udskriv.php:

$array = unserialize( $_GET['data'] );
extract( $array );

Bemærk at extract'en er farlig! Den ville jeg nok lave om til:

extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data_' );

Så kommer $afdeling til at hedder $data_afdeling...
Avatar billede coderdk Praktikant
18. marts 2005 - 10:10 #20
For at gøre det mindre synligt ville jeg måske endda gøre sådan:

<a href="udskriv.php?data=<?= base64_encode( serialize( $array ) ) ?>">Udskriv</a>

Og i udskriv.php:

$array = unserialize( base64_decode( $_GET['data'] ) );
extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data_' );
Avatar billede nyst Nybegynder
18. marts 2005 - 10:28 #21
virker ikke helt

men skal der så ikke rettes i

$array = respons("SELECT afdeling, overskrift, indhold, kopi, dag FROM `sider`WHERE indeks=040000");
for ($i = 0; $i < sizeof($array); $i++) {
  extract($array[$i]);
}

når du har ændret extract'en det andet sted???
Avatar billede coderdk Praktikant
18. marts 2005 - 10:33 #22
Nej, men jeg antager at du ikke efter det stykke kode du har vist, ændrer $array - det er jo deri dine data ligger - Dem serializer vi så længere nede på siden med linjen:

<a href="udskriv.php?data=<?= base64_encode( serialize( $array ) ) ?>">Udskriv</a>

Eller i PHP:

echo '<a href="udskriv.php?data=' . base64_encode( serialize( $array ) ) . '">Udskriv</a>';

Den anden kode skal være i udskriv.php
Avatar billede nyst Nybegynder
18. marts 2005 - 10:42 #23
jeg er med på hovedfil men ikke udskriv'en

skal det ikke være noget ligende dette

    <?php
$array = unserialize( base64_decode( $_GET['data'] ) );
extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data_' );
echo "<table border=0 cellpadding=0 cellspacing=0>";
echo "<tr><td>";
echo "<tr><td>";
echo "<h3>$afdeling</h3>";
echo "<h1>$overskrift</h1>";
echo "$indhold<br><br>";
echo "$kopi $dag";
echo "<br><br></td></tr></table>";
    ?>
Avatar billede nyst Nybegynder
18. marts 2005 - 10:44 #24
kan det være pga PHP Version 4.1.2
Avatar billede coderdk Praktikant
18. marts 2005 - 10:45 #25
Med den extract jeg har skrevet skal du have prefix på...

<?php
$array = unserialize( base64_decode( $_GET['data'] ) );
extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data_' );
echo "<table border=0 cellpadding=0 cellspacing=0>";
echo "<tr><td>";
echo "<tr><td>";
echo "<h3>$data_afdeling</h3>";
echo "<h1>$data_overskrift</h1>";
echo "$data_indhold<br><br>";
echo "$data_kopi $data_dag";
echo "<br><br></td></tr></table>";
    ?>
Avatar billede nyst Nybegynder
18. marts 2005 - 10:53 #26
når jeg klikker på

<?php echo '<a href="udskriv.php?data=' . base64_encode( serialize( $array ) ) . '">Udskriv</a>'; ?>

sker der intet andet end jeg kan se linket med en masse sjove bogstaver nederst i browseren.

Kalder jeg udskriv.php direkte får jeg

Warning: extract() expects first argument to be an array

???

:-)
Avatar billede coderdk Praktikant
18. marts 2005 - 11:12 #27
Weird, prøv lige i udskriv.php efter

$array = unserialize( base64_decode( $_GET['data'] ) );

at lave:

var_dump( $array );
Avatar billede nyst Nybegynder
18. marts 2005 - 11:21 #28
virker ikke kommer slet ikke til udskriv.php

heller ikke med

<a href="udskriv.php?data=<?= serialize( $array ) ?>">Udskriv</a>

den skriver alle data igen bare ved siden af designet - kommer ikke over på udskrive'en

repeterer lige:

har øverst i hovedfil

<?php
require("db_funk.php");
open_db();
$array = respons("SELECT afdeling, overskrift, indhold, kopi, dag FROM `sider`WHERE indeks=040000");
for ($i = 0; $i < sizeof($array); $i++) {
  extract($array[$i]);
}
close_db();
?>

i body

<?php
echo "<table border=0 cellpadding=0 cellspacing=0>";
echo "<tr><td>";
echo "<tr><td>";
echo "<h3>$afdeling</h3>";
echo "<h1>$overskrift</h1>";
echo "$indhold<br><br>";
echo "$kopi $dag";
echo "<br><br></td></tr></table>";
?>

så linket

<?php echo '<a href="udskriv.php?data=' . base64_encode( serialize( $array ) ) . '">Udskriv</a>'; ?>

i udskriv.php's body

$array = unserialize( base64_decode( $_GET['data'] ) );
var_dump( $array );
extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data_' );
echo "<table border=0 cellpadding=0 cellspacing=0>";
echo "<tr><td>";
echo "<tr><td>";
echo "<h3>$data_afdeling</h3>";
echo "<h1>$data_overskrift</h1>";
echo "$data_indhold<br><br>";
echo "$data_kopi $data_dag";
echo "<br><br></td></tr></table>";
    ?>

problem link giver ikke udskriv-siden

og kalder jeg den får jeg nu

bool(false)
Warning: extract() expects first argument to be an array
Avatar billede nyst Nybegynder
18. marts 2005 - 11:26 #29
skal der ikke i udskriv være nogle {} ved extract før echo?
Avatar billede coderdk Praktikant
18. marts 2005 - 11:37 #30
Mnææh jeg forstår det ikke lige... Forøvrigt skal:

  extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data_' );

Ændres til:

  extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data' );

Den smider selv et _ på...
Avatar billede nyst Nybegynder
18. marts 2005 - 11:42 #31
ændret men hjælper ikke

men kan du se hvorfor linket heller ikke virker så man i det mindste får åbnet udskriv.php'en???
Avatar billede coderdk Praktikant
18. marts 2005 - 11:43 #32
Her er en lille test app, den bruger gzcompress og gzuncompress, så hvis du ikke har zlib installeret, så fjern kaldende til dem...

    $test = array( "hej" => "med", "dig" => "du", "heheh" => "fedt" );
    if ( !empty( $_GET['data'] ) )
    {
        echo "<pre><b>Før</b>\n\n";
        var_dump( $_GET['data'] );
        echo "\n<b>Unserialized</b>:\n\n";
        $hej = unserialize( gzuncompress( base64_decode( $_GET['data'] ) ) );
        var_dump( $hej );
        extract( $hej, EXTR_SKIP | EXTR_PREFIX_ALL, "data" );
        echo "\$data_hej = $data_hej\n";
        echo "</pre>";
    }
    echo "<a href=\"{$_SERVER['PHP_SELF']}?data=" . base64_encode( gzcompress( serialize( $test ) ) ) . "\">Test</a>";

Den illustrerer hvad jeg mener!
Avatar billede nyst Nybegynder
18. marts 2005 - 11:48 #33
smider jeg den i en fil og klikker 'Test' får jeg

Før

string(72) "eJxLtDK2qi4GEkoZqVlK1mBWbmoKlJWSmQ5iGQFZpSCGKUgZEILYJlZKaakpJUrWtQCfQhO4"

Unserialized:

array(3) {
  ["hej"]=>
  string(3) "med"
  ["dig"]=>
  string(2) "du"
  ["heheh"]=>
  string(4) "fedt"
}
$data_hej = med

Test

:-)
Avatar billede coderdk Praktikant
18. marts 2005 - 11:55 #34
Jeg kan ikke rigtig regne ud hvorfor det ikke virker i den anden fil - Du siger at der kommer noget i URL'en til udskriv.php?
Avatar billede coderdk Praktikant
18. marts 2005 - 12:00 #35
Prøv lige at smide:

var_dump( $array );

LIGE før udskriv.php linket bliver skrevet ud
Avatar billede nyst Nybegynder
18. marts 2005 - 12:01 #36
ja kilkker jeg sker der intet
holder jeg muse over kommer masser af bogstvaer i statusbar

men kan du se der er 3 ) i ( gzcompress( serialize( $test ) ) )

og " i stedet for '

!!!!!
Avatar billede coderdk Praktikant
18. marts 2005 - 12:06 #37
ikke forstået?
Avatar billede nyst Nybegynder
18. marts 2005 - 12:11 #38
nå ja det er fordi der er  gzcompress det giver jo ekstra )

og så anvendes " i stedet for '

ellers ser det ens ud !!!
Avatar billede nyst Nybegynder
18. marts 2005 - 12:13 #39
smider jeg 'Test' ind på min egen side virker den fint nok !!!
Avatar billede coderdk Praktikant
18. marts 2005 - 12:18 #40
Prøv lige i hovedfilen:

$array = respons("SELECT afdeling, overskrift, indhold, kopi, dag FROM `sider`WHERE indeks=040000");
for ($i = 0; $i < sizeof($array); $i++) {
  extract($array[$i]);
}

Lige efter den, tilføj:

$tiludskrift = $array;

Og ændr:

echo '<a href="udskriv.php?data=' . base64_encode( serialize( $array ) ) . '">Udskriv</a>';

til:

var_dump( $tiludskrift );
echo '<a href="udskriv.php?data=' . base64_encode( gzcompress( serialize( $tiludskrift ) ) ) . '">Udskriv</a>';

Og udskriv.php:

$array = unserialize( gzuncompress( base64_decode( $_GET['data'] ) ) );
var_dump( $array );
extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data_' );
echo "<table border=0 cellpadding=0 cellspacing=0>";
echo "<tr><td>";
echo "<tr><td>";
echo "<h3>$data_afdeling</h3>";
echo "<h1>$data_overskrift</h1>";
echo "$data_indhold<br><br>";
echo "$data_kopi $data_dag";
echo "<br><br></td></tr></table>";
Avatar billede nyst Nybegynder
18. marts 2005 - 12:20 #41
holder jeg musen over viser den i status

http://www.mit.dk/div/udskriv.php?data=ogsågrimsgramset

test viser det samme bare til index.php? da den ligger på den

det må da i første omgang være linket der er galt idet det ikke åbner filen udskriv???
Avatar billede nyst Nybegynder
18. marts 2005 - 12:30 #42
nu sker der noget
hvis jeg fjerner

var_dump( $tiludskrift );

i

var_dump( $tiludskrift );
echo '<a href="udskriv.php?data=' . base64_encode( gzcompress( serialize( $tiludskrift ) ) ) . '">Udskriv</a>';

så virker linket

men i udskriv går det galt
den viser tekst 2 gange og noget
kode grimsgrams

feks starter den med

array(1) { [0]=> array(10) { [0]=> string(20) "Anæstesi - bedøvelse" ["afdeling"]=> string(20) "Anæstesi - bedøvelse" [1]=> string(20) "Afdelingen varetager" ["overskrift"]=> string(20) "Afdelingen varetager" [2]=> string(601) "


men vi er da videre...'s*
Avatar billede coderdk Praktikant
18. marts 2005 - 12:32 #43
Nej det er med vilje - Det er nemlig det som dit array indeholder - Du bruger mysql_fetch_array i stedet for mysql_fetch_assoc ;) Så det lader til at virke
Avatar billede nyst Nybegynder
18. marts 2005 - 12:36 #44
med vilje???? *G*

jo men det skal jo ikke med og heller ikke tekst 2 gange!!!
Avatar billede coderdk Praktikant
18. marts 2005 - 12:38 #45
Så må du jo ændre din respons() til at bruge mysql_fetch_assoc() i stedet for mysql_fetch_array()...
Avatar billede nyst Nybegynder
18. marts 2005 - 12:46 #46
det hjalp ikke helt
der er stadig nogle

array(1) { [0]=> array(5) { ["afdeling"]=>

i top

og

["kopi"]=> string(42) før kopitekst og ["dag"]=> string(9) før datoen

!!!
Avatar billede nyst Nybegynder
18. marts 2005 - 12:50 #47
det er kun $data_indhold den udskriver rigtigt???
Avatar billede coderdk Praktikant
18. marts 2005 - 12:52 #48
What?! Ok lav lige udskriv.php om til dette og paste hvad var_dump kommer med:

$array = unserialize( gzuncompress( base64_decode( $_GET['data'] ) ) );
echo "<pre>"; var_dump( $array ); echo "</pre>";
extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data' );
echo "<table border=0 cellpadding=0 cellspacing=0>";
echo "<tr><td>";
echo "<tr><td>";
echo "<h3>$data_afdeling</h3>";
echo "<h1>$data_overskrift</h1>";
echo "$data_indhold<br><br>";
echo "$data_kopi $data_dag";
echo "<br><br></td></tr></table>";
Avatar billede nyst Nybegynder
18. marts 2005 - 12:57 #49
den starter med

array(1) {
  [0]=>
  array(5) {
    ["afdeling"]=>
    string(20) "bla bla"
    ["overskrift"]=>
    string(20) "blabla bal"
    ["indhold"]=>
    string(601) "

så viser den korrekt 'indhold'

men så igen

    ["kopi"]=>
    string(42) "sidst revideret"
    ["dag"]=>
    string(9) "12.5.2003"
Avatar billede coderdk Praktikant
18. marts 2005 - 12:59 #50
Hvad er der forkert i det?
Avatar billede coderdk Praktikant
18. marts 2005 - 13:00 #51
Oooh, det er et array i et array?! Der er mere end 1 i det "yderste" array?
Og prøv lige:

$array = unserialize( gzuncompress( base64_decode( $_GET['data'] ) ) );
$array = $array[0];
echo "<pre>"; var_dump( $array ); echo "</pre>";
extract( $array, EXTR_SKIP | EXTR_PREFIX_ALL, 'data' );
echo "<table border=0 cellpadding=0 cellspacing=0>";
echo "<tr><td>";
echo "<tr><td>";
echo "<h3>$data_afdeling</h3>";
echo "<h1>$data_overskrift</h1>";
echo "$data_indhold<br><br>";
echo "$data_kopi $data_dag";
echo "<br><br></td></tr></table>";
Avatar billede nyst Nybegynder
18. marts 2005 - 13:05 #52
du er bare fed *S*

fjerner jeg
echo "<pre>"; var_dump( $array ); echo "</pre>";
er den helt ok - godt og ihærdigt gået

en lille ting
kan jeg nemt lave et returlink på udskriv tilbage til den den nu kom fra
uden java goto
Avatar billede nyst Nybegynder
18. marts 2005 - 13:07 #53
virker nu også med

while($row = mysql_fetch_array($result)) {
  $result_array[] = $row;
}

*SS*
Avatar billede coderdk Praktikant
18. marts 2005 - 13:07 #54
Du kan sende en URL med ;) eller bruge java script:history.back() eller prøve at bruge $_SERVER['HTTP_REFERER'] - den vil dog ikke virke for alle.
Avatar billede coderdk Praktikant
18. marts 2005 - 13:09 #55
Hvis du kun tilgår databasefelter med navn, altså $row['feltnavn'] så brug ALTID mysql_fetch_assoc i stedet for mysql_fetch_array - fetch_array giver dig et dobbelt array, så du både kan tilgå med tal og med navn...
Avatar billede coderdk Praktikant
18. marts 2005 - 13:09 #56
Og et svar!
Avatar billede coderdk Praktikant
18. marts 2005 - 13:09 #57
Bah, et svar jo! ;)
Avatar billede nyst Nybegynder
18. marts 2005 - 13:11 #58
den er sgu' ellers fra webcafe men jeg retter til assoc*S*

Takker igen og håber du må få en god weekend.

:-)
Avatar billede coderdk Praktikant
18. marts 2005 - 13:13 #59
Jo, tak i lige måde %)
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