Cannot redeclare makequote() (previously
Waarom doet PHP weer zo k*t?
Als ik in index.php include("replace.php"); include_once.. maak, dan geeft ie de fout niet, maar dan wordt alleen het eerste bericht geparsed.
Hij geeft de volgende foutmelding:
Code (php)
1
Fatal error: Cannot redeclare makequote() (previously declared in E:\UsbWebserver2\Root\Gastenboek\replace.php:76) in E:\UsbWebserver2\Root\Gastenboek\replace.php on line 76
## index.php, hier wordt replace.php ingevoegd
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
<title>Gastenboek ©</title>
<link type="text/css" rel="stylesheet" href="style/style.css" />
<?php include("replace.php"); ?>
</head>
<body>
<?php
// Vereist voor het verbinden met de database
require("connect.php");
// Aantal entries in tabel tellen
$count = mysql_query("SELECT COUNT(id) FROM berichten");
$totaal = mysql_result($count, 0);
// Aantal reacties per pagina showen
$aantalReacties = 2;
$aantalPaginas = ceil($totaal / $aantalReacties);
// Pagina opvragen, zoniet huidige pagina is 0
$pagina = 0;
if(isset($_GET['pagina']) && $_GET['pagina'] > 0 && $_GET['pagina'] <= $aantalPaginas && is_numeric($_GET['pagina'])){
$pagina = $_GET['pagina'];
}
// Gegevens voor huidige pagina
$reactiesPagina = $pagina * $aantalReacties;
$huidigePagina = mysql_query("SELECT id,naam,email,bericht,datum,tijd,verberg FROM berichten ORDER BY id DESC LIMIT " . $reactiesPagina.",".$aantalReacties);
// Gegevens voor huidige pagina showen
if($totaal == 0){
echo "Er zijn geen berichten, <a href=\"" . $schrijven . "\">plaats</a> als eerste een bericht!";
} else {
while($geg = mysql_fetch_assoc($huidigePagina)){
$geg['naam'] = ucwords(strtolower($geg['naam']));
if($geg['verberg'] == 0){
$poster = '<a href="mailto:' . $geg['email'] . '">' . $geg['naam'] . '</a>';
} else {
$poster = $geg['naam'];
}
$geg['bericht'] = UBB($geg['bericht']);
echo "<div class=\"comments\" id=\"box\">
<div class=\"comments\" id=\"head\"><b>" . $poster . "</b> " . $geg['datum'] . " @ " . $geg['tijd'] . "<span style=\"float:right\"><a href=\"?q=" . $geg['id'] . "\">Quote</a></span></div>
<div class=\"comments\" id=\"bericht\"><p>" . $geg['bericht'] . "</p></div>
<div class=\"comments\" id=\"clear\"></div>
</div><br />";
}
echo "<br /><a href=\"" . $schrijven . "\">Plaats</a> een bericht";
}
echo "<br /><br />";
// Paginanummering
for($i = 0; $i < $aantalPaginas; $i++) {
if($pagina == $i) {
if($aantalPaginas == 1){
echo "";
} else {
echo "<b>".($i+1)."</b>";
}
} else {
echo "<a href=\"".$_SERVER['REQUEST_URI']."?pagina=".$i."\">".($i+1)."</a>";
}
if($i < $aantalPaginas - 1) {
echo " - ";
}
}
?>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
<title>Gastenboek ©</title>
<link type="text/css" rel="stylesheet" href="style/style.css" />
<?php include("replace.php"); ?>
</head>
<body>
<?php
// Vereist voor het verbinden met de database
require("connect.php");
// Aantal entries in tabel tellen
$count = mysql_query("SELECT COUNT(id) FROM berichten");
$totaal = mysql_result($count, 0);
// Aantal reacties per pagina showen
$aantalReacties = 2;
$aantalPaginas = ceil($totaal / $aantalReacties);
// Pagina opvragen, zoniet huidige pagina is 0
$pagina = 0;
if(isset($_GET['pagina']) && $_GET['pagina'] > 0 && $_GET['pagina'] <= $aantalPaginas && is_numeric($_GET['pagina'])){
$pagina = $_GET['pagina'];
}
// Gegevens voor huidige pagina
$reactiesPagina = $pagina * $aantalReacties;
$huidigePagina = mysql_query("SELECT id,naam,email,bericht,datum,tijd,verberg FROM berichten ORDER BY id DESC LIMIT " . $reactiesPagina.",".$aantalReacties);
// Gegevens voor huidige pagina showen
if($totaal == 0){
echo "Er zijn geen berichten, <a href=\"" . $schrijven . "\">plaats</a> als eerste een bericht!";
} else {
while($geg = mysql_fetch_assoc($huidigePagina)){
$geg['naam'] = ucwords(strtolower($geg['naam']));
if($geg['verberg'] == 0){
$poster = '<a href="mailto:' . $geg['email'] . '">' . $geg['naam'] . '</a>';
} else {
$poster = $geg['naam'];
}
$geg['bericht'] = UBB($geg['bericht']);
echo "<div class=\"comments\" id=\"box\">
<div class=\"comments\" id=\"head\"><b>" . $poster . "</b> " . $geg['datum'] . " @ " . $geg['tijd'] . "<span style=\"float:right\"><a href=\"?q=" . $geg['id'] . "\">Quote</a></span></div>
<div class=\"comments\" id=\"bericht\"><p>" . $geg['bericht'] . "</p></div>
<div class=\"comments\" id=\"clear\"></div>
</div><br />";
}
echo "<br /><a href=\"" . $schrijven . "\">Plaats</a> een bericht";
}
echo "<br /><br />";
// Paginanummering
for($i = 0; $i < $aantalPaginas; $i++) {
if($pagina == $i) {
if($aantalPaginas == 1){
echo "";
} else {
echo "<b>".($i+1)."</b>";
}
} else {
echo "<a href=\"".$_SERVER['REQUEST_URI']."?pagina=".$i."\">".($i+1)."</a>";
}
if($i < $aantalPaginas - 1) {
echo " - ";
}
}
?>
</body>
</html>
## replace.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<style type="text/css">
.num {
float: left;
color: gray;
font-size: 13px;
font-family: monospace;
text-align: right;
margin-right: 6pt;
padding-right: 6pt;
border-right: 1px solid gray;}
body {margin: 0px; margin-left: 5px;}
td {vertical-align: top;}
code {white-space: nowrap;}
</style>
<!-- left, right, center, justify! -->
<?php
function UBB($string){
// HTML verbieden
$string = htmlspecialchars($string);
// Enters maken
$string = nl2br($string);
// Links maken
$string = preg_replace("_\[url](.*)\[/url\]_si", '<a href="http://$1" style="text-decoration: none;">$1</a>', $string);
$string = preg_replace("_\[url=(.*)\](.*?)\[/url\]_si", '<a href="http://$1" style="text-decoration: none;">$2</a>', $string);
$string = preg_replace("_\[email](.*)\[/email\]_si", '<a href="mailto://$1" style="text-decoration: none;">$1</a>', $string);
$string = preg_replace("_\[email=(.*)\](.*?)\[/email\]_si", '<a href="mailto:$1" style="text-decoration: none;">$2</a>', $string);
// Kleuren
$string = preg_replace("_\[color=(.*)\](.*?)\[/color\]_si", '<span style="color: $1">$2</span>', $string);
// Tekstgrootte
$string = preg_replace("_\[size=(.*)\](.*?)\[/size\]_si", '<span style="font-size: $1">$2</span>', $string);
// Vetgedrukt
$string = preg_replace("_\[b\](.*?)\[/b\]_si", '<b>$1</b>', $string);
// Cursief
$string = preg_replace("_\[i\](.*?)\[/i\]_si", '<i>$1</i>', $string);
// Onderstrepen
$string = preg_replace("_\[u\](.*?)\[/u\]_si", '<u>$1</u>', $string);
// Doorstrepen
$string = preg_replace("_\[s\](.*?)\[/s\]_si", '<s>$1</s>', $string);
// Knipperen
$string = preg_replace("_\[blink\](.*?)\[/blink\]_si", '<blink>$1</blink>', $string);
// Superscript
$string = preg_replace("_\[sup\](.*?)\[/sup\]_si", '<sup>$1</sup>', $string);
// Subscript
$string = preg_replace("_\[sub\](.*?)\[/sub\]_si", '<sub>$1</sub>', $string);
// All caps
$string = preg_replace("_\[ac\](.*?)\[/ac\]_si", '<span style="text-transform:uppercase">$1</span>', $string);
// Small caps
$string = preg_replace("_\[sc\](.*?)\[/sc\]_si", '<span style="text-transform:lowercase">$1</span>', $string);
// Marquee, standaard "scroll", andere opties: "slide" & "alternate"
$string = preg_replace("_\[slide\](.*?)\[/slide\]_si", '<marquee>$1</marquee>', $string);
$string = preg_replace("_\[slide=(.*)\](.*?)\[/slide\]_si", '<marquee behavior="$1">$2</marquee>', $string);
// Smilies
$string = str_replace(":)"," <img src=\"images/lach.gif\">", $string);
// Quotefunctie
function makeQuote($tekst){
$regex = '#\[quote(?:\h*=\h*(?|\"(.*?)\"|&\#039;(.*?)&\#039;|([^][=\s]+)))?]'.
'((?:[^[]|\[(?!/quote]|quote(?:\h*=\h*(?|\"(.*?)\"|&\#039;(.*?)&\#039;|([^][=\s]+)))?])|(?R))+)'.
'\[/quote]#';
if (is_array($tekst)) {
$tekst = '<fieldset style="background-color:#FFF; width:50%;">
<legend style="background-color:#FFF;">Quote van' .(empty($tekst[1]) ? '' : ' ' .$tekst[1]). '</legend><p>' .$tekst[2]. '</p></fieldset>';
}
return preg_replace_callback($regex, 'makeQuote', $tekst);
}
// Highlightfunctie
function customHighlight($code){
$code = highlight_string(htmlspecialchars_decode(strip_tags($code[1])), true);
$aLines = explode("<br />", $code);
$iLines = count($aLines);
$output = "<table><tr><td class=num>\n";
for($i = 1; $i <= $iLines; $i++){
$output .= $i ."<br />";
}
$output .= "\n</td><td>\n$code\n</td></tr></table>";
return $output;
}
// Tekst binnen de code-tags highlighten
$string = preg_replace_callback("#\[code\](.*?)\[/code\]#s", "customHighlight", $string);
// Tekst binnen de quote-tags omzetten in een quote
$string = makeQuote(htmlspecialchars_decode($string));
return $string;
}
?>
.num {
float: left;
color: gray;
font-size: 13px;
font-family: monospace;
text-align: right;
margin-right: 6pt;
padding-right: 6pt;
border-right: 1px solid gray;}
body {margin: 0px; margin-left: 5px;}
td {vertical-align: top;}
code {white-space: nowrap;}
</style>
<!-- left, right, center, justify! -->
<?php
function UBB($string){
// HTML verbieden
$string = htmlspecialchars($string);
// Enters maken
$string = nl2br($string);
// Links maken
$string = preg_replace("_\[url](.*)\[/url\]_si", '<a href="http://$1" style="text-decoration: none;">$1</a>', $string);
$string = preg_replace("_\[url=(.*)\](.*?)\[/url\]_si", '<a href="http://$1" style="text-decoration: none;">$2</a>', $string);
$string = preg_replace("_\[email](.*)\[/email\]_si", '<a href="mailto://$1" style="text-decoration: none;">$1</a>', $string);
$string = preg_replace("_\[email=(.*)\](.*?)\[/email\]_si", '<a href="mailto:$1" style="text-decoration: none;">$2</a>', $string);
// Kleuren
$string = preg_replace("_\[color=(.*)\](.*?)\[/color\]_si", '<span style="color: $1">$2</span>', $string);
// Tekstgrootte
$string = preg_replace("_\[size=(.*)\](.*?)\[/size\]_si", '<span style="font-size: $1">$2</span>', $string);
// Vetgedrukt
$string = preg_replace("_\[b\](.*?)\[/b\]_si", '<b>$1</b>', $string);
// Cursief
$string = preg_replace("_\[i\](.*?)\[/i\]_si", '<i>$1</i>', $string);
// Onderstrepen
$string = preg_replace("_\[u\](.*?)\[/u\]_si", '<u>$1</u>', $string);
// Doorstrepen
$string = preg_replace("_\[s\](.*?)\[/s\]_si", '<s>$1</s>', $string);
// Knipperen
$string = preg_replace("_\[blink\](.*?)\[/blink\]_si", '<blink>$1</blink>', $string);
// Superscript
$string = preg_replace("_\[sup\](.*?)\[/sup\]_si", '<sup>$1</sup>', $string);
// Subscript
$string = preg_replace("_\[sub\](.*?)\[/sub\]_si", '<sub>$1</sub>', $string);
// All caps
$string = preg_replace("_\[ac\](.*?)\[/ac\]_si", '<span style="text-transform:uppercase">$1</span>', $string);
// Small caps
$string = preg_replace("_\[sc\](.*?)\[/sc\]_si", '<span style="text-transform:lowercase">$1</span>', $string);
// Marquee, standaard "scroll", andere opties: "slide" & "alternate"
$string = preg_replace("_\[slide\](.*?)\[/slide\]_si", '<marquee>$1</marquee>', $string);
$string = preg_replace("_\[slide=(.*)\](.*?)\[/slide\]_si", '<marquee behavior="$1">$2</marquee>', $string);
// Smilies
$string = str_replace(":)"," <img src=\"images/lach.gif\">", $string);
// Quotefunctie
function makeQuote($tekst){
$regex = '#\[quote(?:\h*=\h*(?|\"(.*?)\"|&\#039;(.*?)&\#039;|([^][=\s]+)))?]'.
'((?:[^[]|\[(?!/quote]|quote(?:\h*=\h*(?|\"(.*?)\"|&\#039;(.*?)&\#039;|([^][=\s]+)))?])|(?R))+)'.
'\[/quote]#';
if (is_array($tekst)) {
$tekst = '<fieldset style="background-color:#FFF; width:50%;">
<legend style="background-color:#FFF;">Quote van' .(empty($tekst[1]) ? '' : ' ' .$tekst[1]). '</legend><p>' .$tekst[2]. '</p></fieldset>';
}
return preg_replace_callback($regex, 'makeQuote', $tekst);
}
// Highlightfunctie
function customHighlight($code){
$code = highlight_string(htmlspecialchars_decode(strip_tags($code[1])), true);
$aLines = explode("<br />", $code);
$iLines = count($aLines);
$output = "<table><tr><td class=num>\n";
for($i = 1; $i <= $iLines; $i++){
$output .= $i ."<br />";
}
$output .= "\n</td><td>\n$code\n</td></tr></table>";
return $output;
}
// Tekst binnen de code-tags highlighten
$string = preg_replace_callback("#\[code\](.*?)\[/code\]#s", "customHighlight", $string);
// Tekst binnen de quote-tags omzetten in een quote
$string = makeQuote(htmlspecialchars_decode($string));
return $string;
}
?>
Gewijzigd op 04/03/2013 15:09:46 door Joren de Wit
Je mag een function maar één keer definiëren. Dus het bestand waar het in staat mag je maar één keer includen.
hoe kan ik anders elk bericht door de parser halen?
Quote:
hoe kan ik anders elk bericht door de parser halen?
Misschien door elke keer een functie aan te roepen met het bericht? Ik snap persoonlijk het hele probleem niet helemaal.
Sowieso zie ik niet dat je twee keer dezelfde functie aanmaakt (zie namelijk nergens twee keer de include van replace.php).
Ik denk dat het komt omdat ik in while(){ het volgende heb gezet:
$geg['bericht'] = UBB($geg['bericht']);
Dat het bestand daarom geïnclude wordt, maar ik weet echt niet hoe ik anders alle berichten door de parser haal.
SanThe weet jij hoe ik elk bericht door de parser kan halen zonder die foutmelding?
Quote:
Dan heb jij wel een hele magic PHP..., gezien de functie inladen op functie-call voor zover ik weet nog moet worden uitgevonden. Kan het niet gewoon zijn dat je in twee bestanden een functie hebt met dezelfde naam?Dat het bestand daarom geïnclude wordt, maar ik weet echt niet hoe ik anders alle berichten door de parser haal.
maar ik heb echt geen dubbele functies
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
// MySQL server, 99% van de tijd "localhost"
$server = "localhost";
// Gebruikersnaam voor MySQL server
$gebruiker = "root";
// Wachtwoord voor MySQl server
$wachtwoord = "***";
// Database voor de entries
$database = "gastenboek";
// Tabel in $database
$tabel = "berichten";
// Pagina waar je de entries kan lezen
$lezen = "index.php";
// Pagina waar je een entry kan toevoegen
$schrijven = "add.php";
// Adminpagina
$admin = "admin.php";
// UBB code aan? true voor aan, false voor uit
$UBB = true;
// Naam (editen)
$naam = "de administrator";
# Functie maken om in te loggen, verander hier de gebruikersnaam en het wachtwoord!
function inloggen(){
# Gebruikersnaam administrator
$gebruikersnaam = "admin";
# Wachtwoord
$wachtwoord = "admin";
if($_SERVER['PHP_AUTH_USER'] != $gebruikersnaam || $_SERVER['PHP_AUTH_PW'] != $wachtwoord){
header("WWW-Authenticate: Basic realm=\"Authenticatie vereist!\"");
header("HTTP/1.0 401 Unauthorized");
echo "Je bent niet ingelogd! <br /><br /> Probeer het <a href=\"javascript:location.reload();\">opnieuw</a>.";
exit;
}
}
// Email bij entry? TRUE voor ja, FALSE voor nee
$mail = false;
// Emailadres
$email = "[email protected]";
// Onderwerp
$onderwerp = "Nieuwe entry in je gastenboek!";
// Bericht
$bericht = "<html><head><title>" . $onderwerp . "</title></head><body>In je gastenboek is het volgende geplaatst: <br> blabla</body></html>";
// Headers, HTML email sturen
$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Headers, verander hier het emailadres en eventueel "Gastenboek"
$header .= 'From: Gastenboek <[email protected]>' . "\r\n";
$db = mysql_connect($server, $gebruiker, $wachtwoord) or die ('Kon geen verbinding maken met MySQL.');
mysql_select_db($database) or die ("Kon de database niet vinden.");
?>
// MySQL server, 99% van de tijd "localhost"
$server = "localhost";
// Gebruikersnaam voor MySQL server
$gebruiker = "root";
// Wachtwoord voor MySQl server
$wachtwoord = "***";
// Database voor de entries
$database = "gastenboek";
// Tabel in $database
$tabel = "berichten";
// Pagina waar je de entries kan lezen
$lezen = "index.php";
// Pagina waar je een entry kan toevoegen
$schrijven = "add.php";
// Adminpagina
$admin = "admin.php";
// UBB code aan? true voor aan, false voor uit
$UBB = true;
// Naam (editen)
$naam = "de administrator";
# Functie maken om in te loggen, verander hier de gebruikersnaam en het wachtwoord!
function inloggen(){
# Gebruikersnaam administrator
$gebruikersnaam = "admin";
# Wachtwoord
$wachtwoord = "admin";
if($_SERVER['PHP_AUTH_USER'] != $gebruikersnaam || $_SERVER['PHP_AUTH_PW'] != $wachtwoord){
header("WWW-Authenticate: Basic realm=\"Authenticatie vereist!\"");
header("HTTP/1.0 401 Unauthorized");
echo "Je bent niet ingelogd! <br /><br /> Probeer het <a href=\"javascript:location.reload();\">opnieuw</a>.";
exit;
}
}
// Email bij entry? TRUE voor ja, FALSE voor nee
$mail = false;
// Emailadres
$email = "[email protected]";
// Onderwerp
$onderwerp = "Nieuwe entry in je gastenboek!";
// Bericht
$bericht = "<html><head><title>" . $onderwerp . "</title></head><body>In je gastenboek is het volgende geplaatst: <br> blabla</body></html>";
// Headers, HTML email sturen
$header = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
// Headers, verander hier het emailadres en eventueel "Gastenboek"
$header .= 'From: Gastenboek <[email protected]>' . "\r\n";
$db = mysql_connect($server, $gebruiker, $wachtwoord) or die ('Kon geen verbinding maken met MySQL.');
mysql_select_db($database) or die ("Kon de database niet vinden.");
?>
Wordt die index.php zelf niet per ongeluk ergens in een while opgenomen?
er staat alleen een while in index.php
het is mij echt een raadsel
Ik wist niet dat je functies binnen functies kan defineren.
*hint*
Ik heb nu 3 aparte functies gemaakt en dat werkt super =)
Volgende keer wat beter inspringen... Dan had je het waarschijnlijk direct gezien :)