Avatar billede cool-wil Nybegynder
11. april 2005 - 23:12 Der er 54 kommentarer og
2 løsninger

Fejl i mit php script, kan i hjælpe?

Jeg sidder og laver et tips system, og har lidt problemer med at replace en tekst url, med en alm url, jeg får en underlig firkant på linket http://www.trabi-racing.dk/tips/forside.php ( opdater et par gange hvis den ikke kommer med det samme, min kode ser sådan ud:

<html>
<head>
<title>trabi-racing.dk</title>
</head>
<body>
<?php
$foresp = mysql_query("SELECT * FROM tips order by rand() LIMIT 1") or die(mysql_error());
while($row = mysql_fetch_array($foresp)) {
$tip = $row["tip"];
$navn = $row["navn"];

$tip = eregi_replace("([[:space:]{()\\\"\'\\[~#=;\\&?\\_-])(www\\.[a-z0-9~#%@æøå\\&\\(\\):;=\\?\\/\\.,_-]+(\\\\[|\\\\]|[a-z0-9~#%@æøå\\&:;,=\\?\\/_\\+-])+)", "\\\1<a href=\\\"http://\\\\2\\\" target=\\\"_blank\\\" class=\\\"parsed_link\\\">\\\2</a>", $tip);
$str = eregi_replace("([[:space:]{()\\\"\'\\[~#=;\\&?\\_-])([_\\.0-9a-z-]+@([_\\.0-9a-z-]+)+\\.[a-z]{2,4})","\\\1<a href=\\\"mailto:\\\\2\\\" class=\\\"parsed_link\\\">\\\2</a>", $str);
}
?>

<?php
echo "
<font face='verdana' size='1'>
<b>Tip:</b> $tip
<br>
<b>Navn:</b> $navn
</font>";
?>

</body>
</html>

hvad er problemet, jeg kan ikke finde det, pleace help:-)


wil/
Avatar billede barklund Nybegynder
11. april 2005 - 23:16 #1
Det er godt nok et ret sindsygt udtryk, du har dig der.

Lav det som:

Slet lige omkring halvdelen af alle dine slashes, så tror jeg du har en chance :)
Avatar billede barklund Nybegynder
11. april 2005 - 23:17 #2
Hov, ikke noget "lav det som:" - jeg orkede ikke at skrive det om.
Avatar billede Slettet bruger
11. april 2005 - 23:17 #3
Mon ikke det er din eregi_replace der fejler.
Prøv at ligge denne funktion ind:

function url2link($str) {
  return eregi_replace("((f|ht)tps?://)([a-z0-9@:%_.~#\-\?&-]+)((\=|[a-z0-9]|\?|&|\/|\.|-|:|æ|ø|å)+){0,}",
                      "<a href=\"\\0\">\\0</a>", $str);
}

Og så lad $tip blive sådan istedet:
$tip = url2link($tip);
Avatar billede cool-wil Nybegynder
11. april 2005 - 23:20 #4
jeg har ingen forstand på php, eller meget lidt, fik bare af vide at dette kunne være løsningen på mit problem med at lave tekst om til urls, har i en bedre løsning, og vil i flække scriptet i stykker, og ordne det for lidt flere points?

wil/
Avatar billede cool-wil Nybegynder
11. april 2005 - 23:22 #5
cypermann, skal jeg slette det hele og skrive dit kode, eller? hvor skal det sættes ind i det script?
Avatar billede Slettet bruger
11. april 2005 - 23:35 #6
Så også kun fordi det er så sent, og du sikkert ville komme til at sidde hele natten hvis jeg ikke gav dig denne færdige kode :D
Ej, pjat til side.

<html>
<head>
<title>trabi-racing.dk</title>
</head>
<body>
<?php

function url2link($str) {
  return eregi_replace("((f|ht)tps?://)([a-z0-9@:%_.~#\-\?&-]+)((\=|[a-z0-9]|\?|&|\/|\.|-|:|æ|ø|å)+){0,}","<a href=\"\\0\">\\0</a>", $str);
}

$foresp = mysql_query("SELECT * FROM tips order by rand() LIMIT 1") or die(mysql_error());
$row = mysql_fetch_array($foresp);
$tip = $row["tip"];
$navn = $row["navn"];
$tip = url2link($tip);

echo "
<font face='verdana' size='1'>
<b>Tip:</b> $tip
<br>
<b>Navn:</b> $navn
</font>";
?>

</body>
</html>
Avatar billede cool-wil Nybegynder
11. april 2005 - 23:37 #7
prøver den lige, nu gør den slet intet, se linket i toppen, den laver ingen ting om nu?
Avatar billede barklund Nybegynder
11. april 2005 - 23:38 #8
Det er godt nok en syret funktion? Den grupperer meget mærkeligt synes jeg? Og derudover har jeg aldrig brudt mig om ereg - preg er noget smartere og nydeligere i sin syntaks :)
Avatar billede cool-wil Nybegynder
11. april 2005 - 23:39 #9
kan du komme op med sådan en lille kode eksempel barklund?
Avatar billede barklund Nybegynder
11. april 2005 - 23:39 #10
Og derudover skulle der vist erstattes en url, der ikke starter med http:// men blot med www.
Avatar billede cool-wil Nybegynder
11. april 2005 - 23:43 #11
gerne begge dele, hvis det er muligt?
Avatar billede barklund Nybegynder
11. april 2005 - 23:50 #12
Altså skal vi bare erstatte tekster startende med www. med et a-link, så er det:

<html>
<head>
<title>trabi-racing.dk</title>
</head>
<body>
<?php

function url2link($str) {
    return preg_replace( "/(?<=[^\w])(www\.[a-z0-9]+(?:[@#¤£$%&\/{}()\[\]=?+^¨~*.-]+[a-z0-9]+)*)/i","<a href=\"http://\\0\">\\0</a>", $str);
}

$foresp = mysql_query("SELECT * FROM tips order by rand() LIMIT 1") or die(mysql_error());
$row = mysql_fetch_array($foresp);
$tip = $row["tip"];
$navn = $row["navn"];
$tip = url2link($tip);

echo "
<font face='verdana' size='1'>
<b>Tip:</b> $tip
<br>
<b>Navn:</b> $navn
</font>";
?>

</body>
</html>

Men så fanger den kun url'er skrevet med www. forrest :)
Avatar billede cool-wil Nybegynder
11. april 2005 - 23:53 #13
den laver et eller andet gøjl med en Warning: Wrong parameter count for eregi_replace() in /usr/home/web/web24499/new/forside.php on line 23
Avatar billede cool-wil Nybegynder
11. april 2005 - 23:54 #14
min fejl, forkert sted den lå, glem den sidste besked, kan man lave den så alt bliver fanget også uden www?
Avatar billede barklund Nybegynder
11. april 2005 - 23:57 #15
Så alt uden www. også bliver fanget? Altså alle ordene skal være url'er? det giver ikke mening :/
Avatar billede cool-wil Nybegynder
11. april 2005 - 23:58 #16
hehe hvis nu jeg skriver exp.dk uden www, skal den helst også lave den om, kan den det?
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:00 #17
og test@domæne.dk prefix må også gerne komme med, du skal nok få flere points hvis det er nødvendigt, på forhånd tak
Avatar billede barklund Nybegynder
12. april 2005 - 00:03 #18
Nu stiller du store krav. Hvad nu hvis jeg skriver f.eks. - så er f.eks jo ikke en url. Du vil have en funktion til at genkende alle lovlige url'er - det er svært!

Normalt kræver man blot, at man bare skal starte sin url med http:// og så kan den være hvad som helst. Det er det smarteste og nemmeste.
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:03 #19
oki kan du bare lave email tingen så? den anden er lige meget:-)
Avatar billede barklund Nybegynder
12. april 2005 - 00:08 #20
Ret, så du bruger funktionen:   

function url2link($str) {
  $a = "a-z0-9";
  $ap = "a-z0-9/";
  $e = "a-z0-9_%#=-";
  $x = "\.,;:_\?\+=^*~!#%&\\\(\)\[\]-";
  $patterns = array("/(?<=[^\w])(www\.[$a]+(?:[$x]+[$a]+)*)/i", "¤([$a][$e]+(\.[$a][$e]+)*@[$a][$e]+(\.[$a][$e]+)*\.[a-z]{2,6})¤i");
  $replace = array("<a href=\"http://\\1\">\\1</a>","<a href=\"mailto:\\1\">\\1</a>");
  return preg_replace($patterns, $replace, $c);
}

--
Morten Barklund
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:15 #21
hvis jeg sætter den der ind viser den kun navnet på den der har tippet, og ikke selve tippet, noget ide til hvorfor?
Avatar billede barklund Nybegynder
12. april 2005 - 00:18 #22
function url2link($str) {
  $a = "a-z0-9";
  $ap = "a-z0-9/";
  $e = "a-z0-9_%#=-";
  $x = "\.,;:_\?\+=^*~!#%&\\\(\)\[\]-";
  $patterns = array("/(?<=[^\w])(www\.[$a]+(?:[$x]+[$a]+)*)/i", "¤([$a][$e]+(\.[$a][$e]+)*@[$a][$e]+(\.[$a][$e]+)*\.[a-z]{2,6})¤i");
  $replace = array("<a href=\"http://\\1\">\\1</a>","<a href=\"mailto:\\1\">\\1</a>");
  return preg_replace($patterns, $replace, $str);
}
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:19 #23
ingen email funktion, virker ikke med wil@trabi-racing.dk
Avatar billede barklund Nybegynder
12. april 2005 - 00:25 #24
Hm, virker fint her...
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:26 #25
oki på min hp?
Avatar billede barklund Nybegynder
12. april 2005 - 00:27 #26
Jeg tester bare funktionen - jeg har ikke kigget på din hjemmeside, nej :)
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:27 #27
oki underligt underligt:-)
Avatar billede barklund Nybegynder
12. april 2005 - 00:31 #28
tja, og uden yderligere info kan jeg tydeligvis ikke hjælpe dig.
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:32 #29
ja har bare indsat din kode, og får ikke noget ud på den der mailto: ting, kan det være en fejl i scriptet?
Avatar billede barklund Nybegynder
12. april 2005 - 00:35 #30
Jeg kan ikke se dit script, jeg kan ikke teste dit script: ergo jeg har ingen muligheder overhovedet for at kunne finde fejlen!
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:37 #31
her er hele filen:<?php //Her er alle de vigtige ting oppe... Connect til MySQL-Databasen osv.. ?>

<?php

  $connection = mysql_connect("195.xxxxxx", "wxxxxxx", "xxxxxx");
  mysql_select_db("xxx", $connection);
?>

<?php //Slut på alle de vigtige ting... ?>

<html>
<head>
<title>trabi-racing.dk</title>
</head>
<body>
<?php

function url2link($str) {
    return preg_replace( "/(?<=[^\w])(www\.[a-z0-9]+(?:[@#¤£$%&\/{}()\[\]=?+^¨~*.-]+[a-z0-9]+)*)/i","<a href=\"http://\\0\">\\0</a>", $str);
}

$foresp = mysql_query("SELECT * FROM tips order by rand() LIMIT 1") or die(mysql_error());
$row = mysql_fetch_array($foresp);
$tip = $row["tip"];
$navn = $row["navn"];
$tip = url2link($tip);

echo "
<font face='verdana' size='1'>
<b>Tip:</b> $tip
<br>
<b>Navn:</b> $navn
</font>";
?>

</body>
</html>

det er det, der er ikke andet i filen
Avatar billede barklund Nybegynder
12. april 2005 - 00:39 #32
Jamen det er da ikke den funktion, som jeg gav dig?
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:46 #33
ser sådan her ud:
<html>
<head>
<title>trabi-racing.dk</title>
</head>
<body>
<?php

function url2link($str) {
  $a = "a-z0-9";
  $ap = "a-z0-9/";
  $e = "a-z0-9_%#=-";
  $x = "\.,;:_\?\+=^*~!#%&\\\(\)\[\]-";
  $patterns = array("/(?<=[^\w])(www\.[$a]+(?:[$x]+[$a]+)*)/i", "¤([$a][$e]+(\.[$a][$e]+)*@[$a][$e]+(\.[$a][$e]+)*\.[a-z]{2,6})¤i");
  $replace = array("<a href=\"http://\\1\">\\1</a>","<a href=\"mailto:\\1\">\\1</a>");
  return preg_replace($patterns, $replace, $str);
}

$foresp = mysql_query("SELECT * FROM tips order by rand() LIMIT 1") or die(mysql_error());
$row = mysql_fetch_array($foresp);
$tip = $row["tip"];
$navn = $row["navn"];
$tip = url2link($tip);

echo "
<font face='verdana' size='1'>
<b>Tip:</b> $tip
<br>
<b>Navn:</b> $navn
</font>";
?>

</body>
</html>
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:47 #34
kan du finde fejlen?
Avatar billede barklund Nybegynder
12. april 2005 - 00:50 #35
Men hvis jeg klikker på linket:

http://www.trabi-racing.dk/tips/forside.php

Så kan jeg ikke se en mail-adresse? Jeg vil også gerne kunne teste det :)
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:52 #36
Tip: send mig en mail på wil@trabi-racing.dk
Navn: wil

den er der altså, laver en mere
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:53 #37
kør lidt f5 hvis den ikke lige er der
Avatar billede barklund Nybegynder
12. april 2005 - 00:55 #38
Hm, hvor indsætter du de tips i databasen? Jeg ville highlighte url'er og email's der - det er langt mere optimalt.
Avatar billede cool-wil Nybegynder
12. april 2005 - 00:57 #39
lidt kode: <?php //Her er alle de vigtige ting oppe... Connect til MySQL-Databasen osv.. ?>

<?php
  $connection = mysql_connect("", "", "");
  mysql_select_db("", $connection);
?>

<?php //Slut på alle de vigtige ting... ?>

<?php
if ($mode == "add") {
mysql_query("insert into tips (tip,navn) values ('$tip','$navn')") or die(mysql_error());
}
else {
echo "
<font face='verdana' size='1'>
<form action='?mode=add' method='POST'>
<b>Tip:</b>
<br>
<textarea rows='3' name='tip' cols='20' style='font-size: 8pt'></textarea>
<br>
<b>Navn:
<br>
</b> <input type='text' name='navn' style='font-size: 8pt'>
<br>
<input type='submit' value='Indsend' name='Indsend' style='border: 1px solid #000000'>
</form>
<br>
<br>
<a href='forside.php'>Tilbage</a>
</font>";
}
?>


simpelt:-)
Avatar billede barklund Nybegynder
12. april 2005 - 00:59 #40
Prøv med:

<?php
  $connection = mysql_connect("", "", "");
  mysql_select_db("", $connection);
function url2link($str) {
  $a = "a-z0-9";
  $ap = "a-z0-9/";
  $e = "a-z0-9_%#=-";
  $x = "\.,;:_\?\+=^*~!#%&\\\(\)\[\]-";
  $patterns = array("/(?<=[^\w])(www\.[$a]+(?:[$x]+[$a]+)*)/i", "¤([$a][$e]+(\.[$a][$e]+)*@[$a][$e]+(\.[$a][$e]+)*\.[a-z]{2,6})¤i");
  $replace = array("<a href=\"http://\\1\">\\1</a>","<a href=\"mailto:\\1\">\\1</a>");
  return preg_replace($patterns, $replace, $str);
}

if ($mode == "add") {
mysql_query("insert into tips (tip,navn) values ('".url2link($tip)."','$navn')") or die(mysql_error());
}
else {
echo "
<font face='verdana' size='1'>
<form action='?mode=add' method='POST'>
<b>Tip:</b>
<br>
<textarea rows='3' name='tip' cols='20' style='font-size: 8pt'></textarea>
<br>
<b>Navn:
<br>
</b> <input type='text' name='navn' style='font-size: 8pt'>
<br>
<input type='submit' value='Indsend' name='Indsend' style='border: 1px solid #000000'>
</form>
<br>
<br>
<a href='forside.php'>Tilbage</a>
</font>";
}
?>
Avatar billede cool-wil Nybegynder
12. april 2005 - 01:02 #41
nu går den helt amok, og linker både navn og email sammen, ellers virker det, skal bare lige have navnet væk fra linket:-)
Avatar billede barklund Nybegynder
12. april 2005 - 01:04 #42
Huh?
Avatar billede barklund Nybegynder
12. april 2005 - 01:05 #43
Du skal jo så ikke kalde url2link i den anden fil - kun når du indsætter
Avatar billede cool-wil Nybegynder
12. april 2005 - 01:08 #44
nu har jeg slettet funktionen url2link, men se lige www.trabi-racing.dk/tips/forside.php og se mailto linket, den linker navn sammen med email, hvad sker der?
Avatar billede cool-wil Nybegynder
12. april 2005 - 01:09 #45
og den laver ikke formatering på www. links hvis jeg sletter det der fra forside.php
Avatar billede cool-wil Nybegynder
12. april 2005 - 01:11 #46
http://trabi-racing.dk/tips/forside.php


kør den lige igennem, meget få fejl, kun en, hvad gør vi ved den der Tip: wil@trabi-racing.dk">wil@trabi-racing.d
Avatar billede barklund Nybegynder
12. april 2005 - 01:18 #47
Tja, du har indsat noget forkert i databasen - du har vist fået kørt funktionen to gange på en eller anden måde - slet denne række og indsæt igen korrekt, så skulle det virke...
Avatar billede cool-wil Nybegynder
12. april 2005 - 01:20 #48
oki prøver lige
Avatar billede cool-wil Nybegynder
12. april 2005 - 01:23 #49
den gør det stadivæk, har slette alle tips, og har oprettet 2 nye, www virker ikke, og @ funktionen laver en ekstra streng efter linket....
Avatar billede barklund Nybegynder
12. april 2005 - 01:48 #50
Hm, hvad står der helt præcist i din database? Og er du sikker på, at du ikke stadig har url2link-funktionen kaldt i din forside.php? Altså, har du fjernet linjen:

$tip = url2link($tip);

Og ja, hvis det starter med en url virker det ikke - ret til:

function url2link($str) {
  $a = "a-z0-9";
  $ap = "a-z0-9/";
  $e = "a-z0-9_%#=-";
  $x = "\.,;:_\?\+=^*~!#%&\\\(\)\[\]-";
  $patterns = array("/(?<=[^\w])(www\.[$a]+(?:[$x]+[$a]+)*)/i", "¤([$a][$e]+(\.[$a][$e]+)*@[$a][$e]+(\.[$a][$e]+)*\.[a-z]{2,6})¤i");
  $replace = array("<a href=\"http://\\1\">\\1</a>","<a href=\"mailto:\\1\">\\1</a>");
  return preg_replace($patterns, $replace, $str);
}

--
Morten Barklund
Avatar billede cool-wil Nybegynder
12. april 2005 - 02:00 #51
hvor skal det sidste kode hen? indsend eller forside?
Avatar billede Slettet bruger
12. april 2005 - 09:16 #52
Hvis du slår tilbage i mit eksempel så prøv at erstat url2link funktionen med denne:

function url2link ($str) {
    $str = preg_replace("/((ht|f)tp:\/\/)[\w.-]+(?(?=\/)[^\s<>]+)/i", "<a href=\"\\0\">\\0</a>", $str);
    $str = preg_replace("/(?<!http:\/\/)(www\.)[\w.-]+(?(?=\/)[^\s<>]+)/i", "<a href=\"http://\\0\">\\0</a>", $str);
    return $str;
}
Avatar billede cool-wil Nybegynder
22. april 2005 - 08:52 #53
barklund, smid et svar:-)
Avatar billede barklund Nybegynder
22. april 2005 - 18:27 #54
Hm, okay :)
Avatar billede barklund Nybegynder
22. april 2005 - 18:27 #55
Hov :)
Avatar billede barklund Nybegynder
22. april 2005 - 23:05 #56
Tark for points :D
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