Functie gemaakt in config.php, call in result.php "Cannot redeclare ... "

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Kevin Zegikniet

Kevin Zegikniet

16/11/2013 22:47:36
Quote Anchor link
hallo,

Ik heb in mijn bestand "config.php" een functie gemaakt om dmv de dag, maand en jaar van geboorte, de leeftijd te berekenen.

In het bestand "result.php" roep ik die functie aan in een tabel, en als ik m dan uitvoer, krijg ik de melding:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Fatal error: Cannot redeclare calcAge() (previously declared in /home/u598839215/public_html/config.php:13) in /home/u598839215/public_html/config.php on line 19


Weet iemand wat ik fout doe?
Alvast bedankt.

EDIT: nu ik uitlog en weer inlog, zie ik dat het overal het geval is, niet alleen op result.php :(

Bestanden:
config.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
session_start();

$homepage='http://www.dating.url.ph/';
$sitename='XXXXX';
$mailto='XXXXX';

$SQLhost='XXXXX';
$SQLuser='XXXXX';
$SQLpass='XXXXX';
$SQLdb='XXXXX';

function
calcAge($dag, $maand, $jaar) {
$geboortedatum = mktime(0, 0, 0, $maand, $dag, $jaar);
$t = time();
$leeftijdsec = ($geboortedatum < 0) ? ( $t + ($geboortedatum * -1) ) : $t - $geboortedatum;
$leeftijd = floor($leeftijdsec / "31536000");
return $leeftijd;
}


?>


result.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
session_start();
include('config.php');

IF (!isset($_SESSION['username'])) { header('Location: '. $homepage); }
IF ($_SESSION['query']== "") { header('Location: matching.php'); }
    
$con = mysql_connect($SQLhost, $SQLuser, $SQLpass) or die('Could not connect: ' . mysql_error());
mysql_select_db($SQLdb, $con) or die('Could not find database: ' . mysql_error()) ;

$res = mysql_query( $_SESSION['query'] );
IF ($res === false) { echo "query error"; }
?>


<html>
<head>
<title>Matching - <?php echo $_SESSION['username']; ?> </title>
<link rel="icon" type="image/ico" href="/dating/favicon.ico"> </link>
</head>
<body bgcolor="<?php echo $_SESSION['background']; ?>">

<?php include('menu.php'); ?>
<hr>

Query:<br>
<?php echo $_SESSION['query']; ?>

<br><Br>
<b>Matching...</b><br />
We found <?php echo mysql_num_rows($res), " results.<br>";
if (mysql_num_rows($res) == 0) {
    echo "Want to match again? <br><br>"; }
else { echo "Results:<br />"; } ?>

<table>
<?php
for ($i=0; $row = mysql_fetch_assoc($res); $i++)
    {
echo "<tr><td width=100> ". ($i + 1). ". <a href='profile.php?u=".  $row['Username']."'>".$row['Username']." </td>
        <td width=150> Age: "
. calcAge($row['Dag'], $row['Maand'], $row['Jaar']); echo "</td>
        <td> blargh</td></tr>"
; }
?>

</table>

<form action="matching.php" method="post">
<input type="submit" value="Match again!"></form>
<hr>
<form action="profile.php" method="post">
<input type="submit" value="Go to my own profile!"></form>
</body>
</html>
Gewijzigd op 18/11/2013 15:22:39 door Kevin Zegikniet
 
PHP hulp

PHP hulp

25/11/2024 17:18:07
 
Pipo Clown

Pipo Clown

16/11/2013 23:16:13
Quote Anchor link
verander

include('config.php');

eens in :

include_once('config.php');
 
Kevin Zegikniet

Kevin Zegikniet

16/11/2013 23:58:07
Quote Anchor link
Dit verandert niks. Wat zou dat in theorie moeten veranderen, trouwens?
 
- SanThe -

- SanThe -

17/11/2013 00:14:37
Quote Anchor link
Je include config.php waarschijnlijk meerdere keren.
 
Kevin Zegikniet

Kevin Zegikniet

17/11/2013 00:36:37
Quote Anchor link
Nee. Dat is een ding wat ik zeker weet: ik include 'm op elke pagina maar 1x, en 1x alleen. Dat is namelijk meteen op regel 2, na "</?php" op regel 1
Gewijzigd op 17/11/2013 00:38:25 door Kevin Zegikniet
 
Ozzie PHP

Ozzie PHP

17/11/2013 01:00:43
Quote Anchor link
"ik include 'm op elke pagina maar 1x, en 1x alleen"

Dat lijkt me dus 2x.
 
Kevin Zegikniet

Kevin Zegikniet

17/11/2013 01:08:38
Quote Anchor link
haha... :D
Je begrijpt me wel.
Gewijzigd op 17/11/2013 01:08:47 door Kevin Zegikniet
 
Ozzie PHP

Ozzie PHP

17/11/2013 01:29:39
Quote Anchor link
>> Je begrijpt me wel.

Nee, eigenlijk niet. De foutmelding geeft aan dat je het bestand meer dan 1x include, dus je moet even je code goed nalopen. Ergens include je het bestand dubbel.
 
Kevin Zegikniet

Kevin Zegikniet

17/11/2013 01:31:45
Quote Anchor link
Dat weet ik zeker! Ik include 'm nu 'once' en verder include ik m nergens.
Enige probleem is dus dat ik die functie aanroep, en ik meende dat dat dus de error was...
Maar niet dus. Ik weet absoluut zeker dat ik 'm maar 1x include, en dat is dus ook wat ik zo vreemd vind...

De "je begrijpt me wel" was eigenlijk bedoeld op mijn " maar 1x, en 1x alleen" waar ik mee bedoelde: "1x zeker weten".
Gewijzigd op 17/11/2013 01:32:43 door Kevin Zegikniet
 
Ozzie PHP

Ozzie PHP

17/11/2013 01:34:49
Quote Anchor link
maar welke foutmelding krijg je nu dan?
 
Kevin Zegikniet

Kevin Zegikniet

17/11/2013 01:39:58
Quote Anchor link
dezelfde nog steeds... (ik heb de functie nu met #'jes weggecommentaard zodat de rest wel werkt, maar daarvoor heb ik met include_once ook geprobeerd: totaal geen verschil)
 
Ozzie PHP

Ozzie PHP

17/11/2013 01:43:14
Quote Anchor link
Oke, dus nog steeds deze?

Fatal error: Cannot redeclare calcAge() ...

Heb je toevallig in een ander bestand een functie staan met precies dezelfde naam? Zo ja, dan is dat het probleem. Hernoem jouw functie eens naar calculateAge en kijk of de foutmelding dan verdwijnt.
Gewijzigd op 17/11/2013 01:43:33 door Ozzie PHP
 
Ivo P

Ivo P

17/11/2013 13:43:48
Quote Anchor link
de foutmelding:

Fatal error: Cannot redeclare calcAge()
(previously declared in
/home/u598839215/public_html/config.php:13) in
/home/u598839215/public_html/config.php on line 19

ik heb het even onderelkaar gezet:

je ziet daar dat hij klaagt over de functie calcAge() die in config.php op regel 13 staat, en dat die eerder *in precies hetzelfde bestand config.php* gedefinieerd is op regel 19.

regel 19 is de afsluitende regel en 13 het begin.
Je zult dus echt wel het betreffende bestand 2x (of vaker) includen.....

waarschijnlijk in een ander ge-include bestand, maar toch wel zeker vaker. PHP verzint dat niet natuurlijk...

Door zoek alle bestanden eens op "config.php" en zie waar die overal opduikt (met include of met include_once.)
Waarschijnlijk zul je op meer plaatsen include_once moeten gebruiken, of even nadenken over een logische plek waar je altijd langs komt (bovenaan index.php?) en waar je het configbestand dan eenmalig inleest.
 
Obelix Idefix

Obelix Idefix

17/11/2013 14:09:23
Quote Anchor link
Wat staat er in menu.php?
 
Frank Nietbelangrijk

Frank Nietbelangrijk

17/11/2013 14:13:38
Quote Anchor link
of je hebt twee functies calcAge().

Toevoeging op 17/11/2013 14:15:37:

aan de foutmelding te zien is dat niet het geval maar ga je inderdaad twee keer je config.php includen.

Je kunt het wel voorkomen door include_once('config.php'); te gebruiken.
Gewijzigd op 17/11/2013 14:16:01 door Frank Nietbelangrijk
 
Kevin Zegikniet

Kevin Zegikniet

18/11/2013 14:13:02
Quote Anchor link
ivo p
Ik heb in elk bestand een include('config.php'); (nu dus _once erbij) staan. Ik begrijp dat dat niet moet? (lijkt me niet erg logisch, omdat elke pagina apart is, maar ik kan dus fout zitten).

Dan snap ik ook waarom ie eerder niet foutmeldingen maakte, omdat variabelen aanpassen geen probleem is.

Obelix en Idefix
Daar staat puur wat html - wacht fuck. Daar staat ook include config... oeps.
Daar staat dus wat html en een include... Domme ik.

Frank
Zie bovenstaande.


Ik heb menu nu aangepast, en de include eruit gehaald.
Gevolg is nu dat de error blijft komen in result, alleen is de error van lijn 13 nu opgeschoven naar 14 (ook al staat de 'function calcAge(...) {' nog steeds op lijn 13. Lijn 19 is wel hetzelfde.

Vreemd vind ik ook dat ik het ook toepas op profile.php, waar ik ook include_once('config.php'); EN ook include('menu.php'); doe. Maar daar werkt ie wel gewoon naar behoren.

EDIT:
wat ben ik een stomkop.
Ik had dezelfde functie in het script zelf gehardcode, maar was ik glad vergeten...
*facepalm*

Sorry jongens!
 
Ozzie PHP

Ozzie PHP

18/11/2013 14:16:55
Quote Anchor link
Kevin Zegikniet op 18/11/2013 14:13:02:
EDIT:
wat ben ik een stomkop.
Ik had dezelfde functie in het script zelf gehardcode, maar was ik glad vergeten...
*facepalm*

Sorry jongens!

Ozzie PHP op 17/11/2013 01:43:14:
Heb je toevallig in een ander bestand een functie staan met precies dezelfde naam? Zo ja, dan is dat het probleem. Hernoem jouw functie eens naar calculateAge en kijk of de foutmelding dan verdwijnt.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/11/2013 17:21:37
Quote Anchor link
Waarom makkelijk doen als het moeilijk kan (voorwaarde dat birthdate een date datatype heeft):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
    TIMESTAMPDIFF(YEAR, birthdate, CURRENT_DATE) age,
    first_name,
    last_name
FROM
    members
WHERE birthdate BETWEEN (CURRENT_DATE - INTERVAL 30 YEAR) AND (CURRENT_DATE - INTERVAL 20 YEAR)
Gewijzigd op 18/11/2013 17:22:03 door Ger van Steenderen
 
Kevin Zegikniet

Kevin Zegikniet

18/11/2013 18:05:10
Quote Anchor link
Ten eerste: omdat ik dus geen kolom Birthdate oid met date datatype heb.

Hoe ik het wel doe: ik heb bij leeftijd twee lijstjes met leeftijden (getallen van 20 - 80 interval 5), en in de database heb ik per persoon 3 kolommen dag-maand-jaar (getallen) van zijn/haar geboortedatum.

Aan de hand van die twee lijstjes heb ik de volgende query opgesteld voor de leeftijden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
if ($_POST['age'] != "<>")
    { $sql_match .= "AND Jaar <= ".( date("Y") - $_POST['agemin'] )." AND (
        (Maand = ".date("m")." AND Dag <= ".date("d").")
     OR (Maand < ".date("m")." ) )
    
    AND ( ( Jaar >= ". (date("Y") - $_POST['agemax']) .") OR
    ( Jaar >= ". (date("Y") - $_POST['agemax'] - 1) ." AND (
    ( Maand > ".date("m")." ) OR ( Maand = ".date("m")." AND Dag > ".date("d") .")
    ) ) ) " ; }


Dus: makkelijk doen is al moeilijk genoeg ;)


Lach me maar uit, jongens
Gewijzigd op 18/11/2013 18:06:16 door Kevin Zegikniet
 
Frank Nietbelangrijk

Frank Nietbelangrijk

18/11/2013 18:29:02
Quote Anchor link
Laat ik het zo zeggen Kevin - en ik lach je niet uit - dat je code toch wel erg chaotisch overkomt.

Waar is dit ingodsnaam goed voor?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    if ($_POST['age'] != "<>")
?>
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/11/2013 18:29:27
Quote Anchor link
Iemand uitlachen doen we zomaar niet (alhoewel een kleine glimlach niet te onderdrukken valt).

Maar door de geboorte datum een date datatype te geven, zal je query vele malen sneller maken.
De terugkerende AND OR constructies hebben meestal tot gevolg dat je een full table scan krijgt.

Daarnaast heb je in de database al een datum staan en hoef je deze niet eerst in PHP te genereren met gegevens die je uit de db haalt.

En je kunt er ook nog eens op sorteren, indien gewenst.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.