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/
Annonceindlæg fra Deloitte
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 :)
11. april 2005 - 23:17
#2
Hov, ikke noget "lav det som:" - jeg orkede ikke at skrive det om.
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);
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/
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?
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>
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?
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 :)
11. april 2005 - 23:39
#9
kan du komme op med sådan en lille kode eksempel barklund?
11. april 2005 - 23:39
#10
Og derudover skulle der vist erstattes en url, der ikke starter med http:// men blot med www.
11. april 2005 - 23:43
#11
gerne begge dele, hvis det er muligt?
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 :)
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
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?
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 :/
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?
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
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.
12. april 2005 - 00:03
#19
oki kan du bare lave email tingen så? den anden er lige meget:-)
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
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?
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);
}
12. april 2005 - 00:19
#23
ingen email funktion, virker ikke med wil@trabi-racing.dk
12. april 2005 - 00:25
#24
Hm, virker fint her...
12. april 2005 - 00:26
#25
oki på min hp?
12. april 2005 - 00:27
#26
Jeg tester bare funktionen - jeg har ikke kigget på din hjemmeside, nej :)
12. april 2005 - 00:27
#27
oki underligt underligt:-)
12. april 2005 - 00:31
#28
tja, og uden yderligere info kan jeg tydeligvis ikke hjælpe dig.
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?
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!
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
12. april 2005 - 00:39
#32
Jamen det er da ikke den funktion, som jeg gav dig?
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>
12. april 2005 - 00:47
#34
kan du finde fejlen?
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
12. april 2005 - 00:53
#37
kør lidt f5 hvis den ikke lige er der
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.
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:-)
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>";
}
?>
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:-)
12. april 2005 - 01:04
#42
Huh?
12. april 2005 - 01:05
#43
Du skal jo så ikke kalde url2link i den anden fil - kun når du indsætter
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?
12. april 2005 - 01:09
#45
og den laver ikke formatering på www. links hvis jeg sletter det der fra forside.php
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...
12. april 2005 - 01:20
#48
oki prøver lige
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....
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
12. april 2005 - 02:00
#51
hvor skal det sidste kode hen? indsend eller forside?
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;
}
22. april 2005 - 08:52
#53
barklund, smid et svar:-)
22. april 2005 - 18:27
#54
Hm, okay :)
22. april 2005 - 18:27
#55
Hov :)
22. april 2005 - 23:05
#56
Tark for points :D
Vi tilbyder markedets bedste kurser inden for webudvikling