Script werkt onder php4 maar niet onder php5
Mijn naam is ips en ben een beginner in php scripting. Heb een tijdje geleden een Gastenboek gemaakt voor een klant in flash icm php. Alles werkte perfect tot een paar maand geleden. De provider vertelde dat ze waren over gestapt van php4 naar php5 en dat ik dus de code moest aanpassen......>!!!!
euhhhh..
De onderstaande code werkte dus prima, maar nu (met php5) niet meer. Kan iemand daar eens zíjn of haar licht over laten schijnen.
Je zou me daar enorm mee helpen!
Bedankt,
IPs
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
<?php
$Submit = $_POST["Submit"];
$Name = $_POST["Name"];
$Email = $_POST["Email"];
$Comments = $_POST["Comments"];
$NumLow = $_REQUEST["NumLow"];
$NumHigh = $_REQUEST["NumHigh"];
//$Name = ereg_replace("[^A-Za-z0-9 ]", "", $Name);
$Email = ereg_replace("[^A-Za-z0-9 \@\.\-\/\']", "", $Email);
//$Comments = ereg_replace("[^A-Za-z0-9 \@\.\-\/\']", "", $Comments);
//$Website = eregi_replace("http://", "", $Website);
//$Website = ereg_replace("[^A-Za-z0-9 \@\.\-\/\'\~\:]", "", $Website);
$Name = stripslashes($Name);
$Email = stripslashes($Email);
$Comments = stripslashes($Comments);
// Lezen en schrijven naar de GuestBook.txt file
if ($Submit == "Yes") {
$filename = "GuestBook.txt";
$fp = fopen( $filename,"r");
$OldData = fread($fp, 80000);
fclose( $fp );
// Geeft de datum weer...
$Today = (date (" d F Y ( h:i:s A )",time()));
// $Today = (date ("I d F Y ( h:i:s A )",time()));
$Input = "Naam: <b>$Name</b><br>Email: <b><u><a href=\"mailto:$Email\">$Email</a></u></b><br>Reactie: <b>$Comments: </b><br><i><fontsize=\"-1\">Datum: $Today</font><br><br>.:::.";
$New = "$Input$OldData";
$fp = fopen( $filename,"w");
if(!$fp) die("&GuestBook=cannot write $filename ......&");
fwrite($fp, $New, 800000);
fclose( $fp );
}
$filename = "GuestBook.txt";
$fp = fopen( $filename,"r");
$Data = fread($fp, 800000);
fclose( $fp );
$DataArray = split (".:::.", $Data);
$NumEntries = count($DataArray) - 1;
print "&TotalEntries=$NumEntries&NumLow=$NumLow&NumHigh=$NumHigh&GuestBook=";
for ($n = $NumLow; $n < $NumHigh; $n++) {
print $DataArray[$n];
if (!$DataArray[$n]) {
Print "<br><br><b>Niet meer reacties</b>";
exit;
}
}
?>
$Submit = $_POST["Submit"];
$Name = $_POST["Name"];
$Email = $_POST["Email"];
$Comments = $_POST["Comments"];
$NumLow = $_REQUEST["NumLow"];
$NumHigh = $_REQUEST["NumHigh"];
//$Name = ereg_replace("[^A-Za-z0-9 ]", "", $Name);
$Email = ereg_replace("[^A-Za-z0-9 \@\.\-\/\']", "", $Email);
//$Comments = ereg_replace("[^A-Za-z0-9 \@\.\-\/\']", "", $Comments);
//$Website = eregi_replace("http://", "", $Website);
//$Website = ereg_replace("[^A-Za-z0-9 \@\.\-\/\'\~\:]", "", $Website);
$Name = stripslashes($Name);
$Email = stripslashes($Email);
$Comments = stripslashes($Comments);
// Lezen en schrijven naar de GuestBook.txt file
if ($Submit == "Yes") {
$filename = "GuestBook.txt";
$fp = fopen( $filename,"r");
$OldData = fread($fp, 80000);
fclose( $fp );
// Geeft de datum weer...
$Today = (date (" d F Y ( h:i:s A )",time()));
// $Today = (date ("I d F Y ( h:i:s A )",time()));
$Input = "Naam: <b>$Name</b><br>Email: <b><u><a href=\"mailto:$Email\">$Email</a></u></b><br>Reactie: <b>$Comments: </b><br><i><fontsize=\"-1\">Datum: $Today</font><br><br>.:::.";
$New = "$Input$OldData";
$fp = fopen( $filename,"w");
if(!$fp) die("&GuestBook=cannot write $filename ......&");
fwrite($fp, $New, 800000);
fclose( $fp );
}
$filename = "GuestBook.txt";
$fp = fopen( $filename,"r");
$Data = fread($fp, 800000);
fclose( $fp );
$DataArray = split (".:::.", $Data);
$NumEntries = count($DataArray) - 1;
print "&TotalEntries=$NumEntries&NumLow=$NumLow&NumHigh=$NumHigh&GuestBook=";
for ($n = $NumLow; $n < $NumHigh; $n++) {
print $DataArray[$n];
if (!$DataArray[$n]) {
Print "<br><br><b>Niet meer reacties</b>";
exit;
}
}
?>
Verplaatst naar "Programmeer hulp", admin/mod hulp is hier niet van toepassing ;-)[/modedit]
Gewijzigd op 07/06/2010 19:03:29 door Chris -
Of wil je ons bezig houden met een spelletje 'levend speurtocht'???
Je hebt gelijk, sorry. Het script zorgt ervoor dat er data in een gastenboek wordt geschreven. In de file GuestBook.txt. En dat wanneer de entry is gedaan deze ook weer wordt gelezen en op het scherm zichtbaar is. Voorbeeld: www.operadellacasa.com/gastenboek_opera.html
Maar omdat de provider dus is gemigreerd naar php5 worden nieuwe entry's niet verwerkt. En ik kan er niet achter komen waaraan dat ligt. Dacht er eerst aan dat php5 ereg_replace niet meer ondersteund, dus daar heb ik preg_replace van gemaakt. Maar ook dat hielp niet.
Oh ja, chmod van guestbook.txt = 777, dus je kunt er wel naar schrijven.
groetjes ips
En zie geen errors verschijnen?
$_REQUEST is de vullisbak van $_POST/$_GET/$_COOKIE dus het gebruik van $_REQUEST is niet slim wat als je tesamen hebt $_POST['id'] en $_GET['id'] waarbij beide een andere betekenis hebben. Gebruik dus gewoon de superglobals die daartoe zijn aangewezen en laat $_REQUEST dus buiten je code.
Nee, ik zie geen errors in beeld. Het gastenboek en de reacties zie je gewoon. Kan ook gewoon door de reacties bladeren. Alleen het toevoegen van een reactie wil dus niet. Wanneer ik de code van Noppes toevoeg, dan werkt het hele gastenboek niet meer en zie ik geen reacties. Het blijft vreemd dat het script tot voor kort perfect werkte en nu, na de migratie van de provider naar PHP5, helemaal niet meer. Terwijl ik de indruk heb dat het script prima onder PHP5 zou moeten werken.
Grts Ips
Ik zie al verschillende dingen die veranderd moeten worden:
- Eregi -> preg_match
- Split -> preg_* / iets anders
Waarschijnlijk staan magic quotes ook aan, dat is ook slecht.
Verder zou je natuurlijk ook die die dies weg kunnen halen, is niet zo netjes (wáárom moet een php script doodvallen? Dat doe jij ook niet als je een foutje maakt ;-)). Zie ook migration5.
En op regel 40 doe je ook wat vreemd. Daar hoort het zo:
Tevens, je hoeft in het begin niet onnodig die variabelen te gaan kopieren, je kan "prima" (let op sql injection!!!) gebruik maken van $_POST['fieldname']. En controleren of een formulier verstuurd is doen we meestal zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors',1);
//Zo controleren we of er een form is gepost
if($_SERVER['REQUEST_METHOD'] == "POST"){
//verwerken formulier
}
else{
echo 'Hier je formulier';
}
?>
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors',1);
//Zo controleren we of er een form is gepost
if($_SERVER['REQUEST_METHOD'] == "POST"){
//verwerken formulier
}
else{
echo 'Hier je formulier';
}
?>
Succes ermee!
Ik heb jullie suggesties doorgevoerd, et voila, het gastenboek werkt weer. Kortom, ik wil jullie bedanken voor de support.
Bedankt!!!!!!
grts Ips