Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:16 Der er 34 kommentarer og
1 løsning

\n problem.

Hej eksperter.

Jeg har problemer med dette script:

mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());

$sql = mysql_query("select * from sv_users");

$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
  for($i = 0; $i < $antal; $i++) {
  $row{$i} = ereg_replace("\\n","", $row{$i});
  $file_sql .= $row{$i} . ";";
  }
  $file_sql .= "\n";
}

echo $file_sql;

Det der sker, er at folk kan lægge en kommentar ind, og hvis de har lavet linie skift i kommentareren, så laver den det også i dette output.

og det skal den ikke, da den skal downloades som en komma sepereret fil, til brug i access database. :)

koden der så smider den i filen ser sådan her ud.

$handle2 = fopen("admin/tmp_dl/brugere.txt", "w");
fwrite($handle2, $file_msg); // Skriver til temp filen.
fclose($handle2);

men det er det med at få den til ikke at lave linieskift jeg har problemer med, nogle bud?
Avatar billede morteeart Nybegynder
01. oktober 2004 - 21:21 #1
prøvet:

str_replace("\n"," ",$dinTekst);

?
Avatar billede arne_v Ekspert
01. oktober 2004 - 21:24 #2
Hvad med:

$sql = mysql_query("select * from sv_users");
$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
  for($i = 0; $i < $antal; $i++) {
    $s = ereg_replace("\\n","", $row{$i});
    $file_sql .= $s . ";";
  }
  $file_sql .= "\n";
}
Avatar billede arne_v Ekspert
01. oktober 2004 - 21:24 #3
$sql = mysql_query("select * from sv_users");
$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
  for($i = 0; $i < $antal; $i++) {
    $s = ereg_replace("\n","", $row{$i});
    $file_sql .= $s . ";";
  }
  $file_sql .= "\n";
}

uden den ekstra backslash
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:26 #4
hvorfor s? der burde da ikke være nogen forskel...

men prøver lige.
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:29 #5
begge fejlede. :(

skal bare have fjernet den \n fra bemærkning så den ikke står på flere linier... uhhh. :(
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 21:33 #6
bliver nødt til at smutte, er tilbage senere. ;)
Avatar billede arne_v Ekspert
01. oktober 2004 - 21:41 #7
Der foregår noget mystisk her !

Jeg brugte din kode på en af mine egne tabeller.

<?php
header("Content-Type: text/plain");
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("Test") or die(mysql_error());
$sql = mysql_query("SELECT * FROM t1");
$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
  for($i = 0; $i < $antal; $i++) {
  $row{$i} = ereg_replace("\n","", $row{$i});
  $file_sql .= $row{$i} . ";";
  }
  $file_sql .= "\n";
}
echo $file_sql;
?>

og den virkede fint. Ingen linieskift selvom der er linieskift i data.

(jeg prøvede endda at udkommentere linien med ereg_replace og så at linie
skiftene faktisk kom der så)
Avatar billede arne_v Ekspert
01. oktober 2004 - 23:24 #8
Du har ikke erstattet \n med <br> i databasen ?
Avatar billede blackscorpion Nybegynder
01. oktober 2004 - 23:53 #9
niks.

på nuværende tidspunkt står der følgende i databasen under variablen: bemærkninger:
----------------------------------- <-- start --> ------------------------------
test

test

------------------------------- <-- slut --> ----------------------------------

ja der er et linieskift efter hver test.
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 00:06 #10
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 00:06 #11
der kan i se hvordan det ser ud hos mig...
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 00:38 #12
det her driver mig til vandvid... :(
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 01:02 #13
AARRRRRGGGHHHHHHHHHH :( :( :(
Avatar billede sukos Juniormester
02. oktober 2004 - 08:24 #14
Jeg bruger denne:

function br($var) {
return ereg_replace("(\r\n|\n\r|\n|\r)+", "<br>\n", $var);
}

til at lave kun et linieskift.
Udskift <br>\n med mellemrum i stedet.
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:27 #15
niks det virker heller ikke. :( :(

tjek linket jeg sendte igår, så kan du se på kildekoden at den laver linieskift. :(
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:28 #16
koden ser nu ud som følgende:

mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());

$sql = mysql_query("select * from sv_users");
$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
  for($i = 0; $i < $antal; $i++) {
    $row{$i} = str_replace("(\r\n|\n\r|\n|\r)+", "<br>\n", $row{$i});
    $file_sql .= $row{$i} . ";";
  }
  $file_sql .= "\n";
}

echo $file_sql;
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:35 #17
BUUUUUUH YEAH!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Det virker det virker det virker det virker. ;) ;) ;)

Damn du har lige reddet min weekend, big time. ;)
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:36 #18
smid et svar, så får du 200 point, gal det varmer det her. ;)
Avatar billede sukos Juniormester
02. oktober 2004 - 08:39 #19
jahh, det er jo forskellige systemers måde at håndtere linieskift som var problemet.
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:48 #20
<br />
<b>Warning</b>:  filesize(): Stat failed for /var/www/epoxy/web2/alabitdk/docs/admin/tmp_dl/brugere.txt (errno=2 - No such file or directory) in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>28</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php:28) in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>28</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php:28) in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>29</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php:28) in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>30</b><br />
<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php:28) in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>31</b><br />
<br />
<b>Warning</b>:  fopen(): Unable to access /var/www/epoxy/web2/alabitdk/docs/admin/tmp_dl/brugere.txt in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>33</b><br />
<br />
<b>Warning</b>:  fopen(/var/www/epoxy/web2/alabitdk/docs/admin/tmp_dl/brugere.txt): failed to open stream: No such file or directory in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>33</b><br />
<br />
<b>Warning</b>:  filesize(): Stat failed for /var/www/epoxy/web2/alabitdk/docs/admin/tmp_dl/brugere.txt (errno=2 - No such file or directory) in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>34</b><br />
<br />
<b>Warning</b>:  fread(): supplied argument is not a valid stream resource in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>34</b><br />
<br />
<b>Warning</b>:  fclose(): supplied argument is not a valid stream resource in <b>/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php</b> on line <b>35</b><br />


nu får jeg denne fejl...

må have overset noget....
Avatar billede sukos Juniormester
02. oktober 2004 - 08:51 #21
Virker den str_replace?
Prøv at fjerne den!
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:53 #22
str_replace virker, det hele virker som det skal, men når jeg downloader den, står der det i filen som jeg skrev før...
Avatar billede sukos Juniormester
02. oktober 2004 - 08:53 #23
Og bruge

$sql = mysql_query("select * from sv_users");
$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
  for($i = 0; $i < $antal; $i++) {
    $file_sql .= $row{$i} . ";";
  }
$file_sql = ereg_replace("(\r\n|\n\r|\n|\r)+", " ", $file_sql);
  $file_sql .= "\n";
}

og hvorfor nu 200 point forresten?
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:53 #24
Det komplette script ser sådan her ud...

---------------------------------------------------------------------
<?php

include("inc/config.inc.php");

mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die(mysql_error());
mysql_select_db($mysql_db) or die(mysql_error());

$sql = mysql_query("select * from sv_users");
$antal = mysql_num_fields($sql);
$file_sql = "";
while($row = mysql_fetch_array($sql)){
  for($i = 0; $i < $antal; $i++) {
    $row{$i} = ereg_replace("(\r\n|\n\r|\n|\r)+", " ", $row{$i});
    $file_sql .= $row{$i} . ";";
  }
  $file_sql .= "\n";
}

$handle2 = fopen("tmp_dl/brugere.txt", "w"); // Opretter tmp filen.
fwrite($handle2, $file_sql); // Skriver til temp filen.
fclose($handle2);

$fil = "brugere.txt";
$path = $_SERVER["DOCUMENT_ROOT"] ."admin/tmp_dl/";

header("Content-Disposition: attachment; filename=". $fil ."");
header("Content-Type: application/octet-stream");
header("Content-Length: ".filesize($path.$fil));
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: ".gmdate("D, d M Y H:i:s", mktime(date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");

/*
$fp = fopen($path.$fil,"r");
print fread( $fp, filesize($path.$fil) );
fclose($fp);
exit();
*/
?>
------------------------------------------------------------------------
Avatar billede sukos Juniormester
02. oktober 2004 - 08:53 #25
Nåh, ok, så definerer du jo stien forkert til filen
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:54 #26
200 point fordi at det er ekstremt vigtigt, skal være færdig om ca. 1 time...
Avatar billede sukos Juniormester
02. oktober 2004 - 08:55 #27
/var/www/epoxy/web2/alabitdk/docs/admin/tmp_dl/brugere.txt

/var/www/epoxy/web2/alabitdk/docs/scanvikar/admin/file_download.php

Det er vist "scanvikar" som gør forskellen?
Avatar billede sukos Juniormester
02. oktober 2004 - 08:56 #28
$path = $_SERVER["DOCUMENT_ROOT"] ."admin/tmp_dl/";

skal være:

$path = $_SERVER["DOCUMENT_ROOT"] ."/admin/tmp_dl/";
Avatar billede sukos Juniormester
02. oktober 2004 - 08:57 #29
$_SERVER["DOCUMENT_ROOT"] ender IKKE på en skråstreg, derfor skal den tilføjes
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 08:58 #30
doh!.. derfor jeg elsker at have et ekstra sæt øjne med på koden.

MEN

den virker ja, men den er ca. 10 sek om at loade den, og når jeg så gemmer den er filen tom...
Avatar billede sukos Juniormester
02. oktober 2004 - 08:59 #31
:O)
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 09:00 #32
okey slå mig lige MEGET hårdt.

og på mit webhotels server ender den på /... derfor jeg fjernede det.

$fp = fopen($path.$fil,"r");
print fread( $fp, filesize($path.$fil) );
fclose($fp);
exit();

dette skulle bare like aktiveres, dvs. skulle fjerne /* */. ;)

det virker nu, det hele som det skal. ;)
Avatar billede sukos Juniormester
02. oktober 2004 - 09:00 #33
Ok! Go' lørdag!
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 09:01 #34
okey det virker også selv om jeg tilføjer / *GGG*

skummelt, men okey nok om det, mange mange mange tak for hjælpen. ;)
Avatar billede blackscorpion Nybegynder
02. oktober 2004 - 09:02 #35
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