Fout script, tabellen en Firefox

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom vd

tom vd

21/10/2006 13:40:00
Quote Anchor link
Ik vond het niet zo handig om allemaal verschillende topics te maken voor mijn 'problemen'. Dus even alles in 1 topic op een rijtje (zie helemaal onderaan link website):

1. Ik heb op mijn site een nieuwsscript en een gastenboekscript. Ik wil eigenlijk het nieuwsscript hetzelfde hebben als het gastenboekscript, met de tabellen om elke reactie heen. Alleen ik heb al geprobeerd om er een tabel omheen te zetten maar dat lijkt niet te werken...

Als eerst het gedeelte van het nieuwsscript waar die tabellen in moeten komen:

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
echo("Titel: <b>".stripslashes($Nieuwsartikel->Titel)."</b><br>
Geschreven op: ".date("d-m-Y H:i:s",$Nieuwsartikel->Datum)."<br>
Geschreven door: ".stripslashes($Nieuwsartikel->Naam)."<br>
Categorie: {$Categorieen[$Nieuwsartikel->Categorie][0]}<br><br>
".nl2br(stripslashes($Nieuwsartikel->Artikel)));
$Reacties = mysql_query("SELECT * FROM Nieuwsreacties WHERE ID = '$Nieuwsartikel->Datum' ORDER BY datum DESC");
while($Reactie = mysql_fetch_object($Reacties)) {
echo("<br><br><hr><b>Reactie door:</b> <a href='mailto:$Reactie->Mail'>$Reactie->Naam</a>
<b>Geschreven op:</b> ".date("d-m-Y H:i:s",$Reactie->Datum)."<br><br>
".nl2br($Reactie->Reactie));
}
echo("<br><br><hr><b>Reactie plaatsen:</b><br><br><form method=post action='$PHP_SELF?id=$id'>
Naam: <input type=text name=Naam size=30 maxlength=255><br>
E-mail adres: <input type=text name=Mail size=30 maxlength=255><br><br>
Bericht:<br><br><textarea cols=30 rows=10 name=Bericht></textarea><br><br>
<input type=hidden name=reactieplaatsen value=1>
<input type=submit value='Reactie plaatsen'>
</form>");
}

?>


En dit is hoe ze het gedaan hebben in het gastenboekscript:

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
<table class="gastenboek" width="100%" border="0" cellspacing="0" cellpadding="2">
        <tr>
          <td width="88%" valign="top">
            <b>Gepost door</b>: <a href="mailto:<?= $obj->emailadres; ?>"><?= $obj->naam; ?></a>
            <b>Gepost op</b>: <?= datum($obj->datum); ?>
          </td>
        </tr>
        <tr>
          <td valign="top">
            <?=$bericht?>
            <br />            
          </td>
        </tr>
      </table>
      <br />


2. Als je in het nieuwsscript bij je e-mail bijv. alleen tom invoert zonder @hotmail.com erachter dan krijg je een error inplaats van iets als: deze e-mail bestaat niet.

Het gedeelte waar dit in zou moeten staan:

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
<?php

function ControleerEmail($a) {
return ereg("[A-Za-z0-9_-]+([\.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([\.]{1}[A-Za-z0-9-]+)+",$a);
}


$id = intval($id);
$Nieuwsartikel = mysql_fetch_object(mysql_query("SELECT * FROM Nieuwsartikelen WHERE Datum = '$id'"));
if(!$id) { echo("Er is geen ID opgegeven!"); }
elseif(!$Nieuwsartikel) { echo("Het Nieuwsartikel is niet gevonden!"); }
else {

if($reactieplaatsen) {
if(!trim($Naam) || !ControleerEmail($Mail) || !trim($Bericht)) {
header("Location: $PHP_SELF?id=$id&melding=ongeldig");
}

else {
$Naam = htmlspecialchars($Naam,ENT_QUOTES);
$Bericht = htmlspecialchars($Bericht,ENT_QUOTES);
mysql_query("INSERT INTO Nieuwsreacties VALUES('$id','$Naam','$Mail','".date("U")."','$Bericht')");
}
}[
/code]

3. Als laatste heb ik wat probleempjes met firefox. Het is namenlijk zo dat die gewoon je hele site verpest terwijl hij in IE gewoon super goed werkt... Voor de mensen die firefox hebben, op de volgende pagina's zie je verschillen:

home > laatste nieuws (even een artikel aanklikken) > het posten van een reactie, die '
insert' vlakken zitten bij firefox aan elkaar vast...

Foto'
s > fotoalbum (1 van de 2) > In IE past ie op de pagina, in Firefox loopt ie gewoon helemaal door...

Link website: http://xplosiveteam.xp-losion.com

De scripts waar de fouten bij punt 1 en 2 instaan heb ik verder ook als download op de site gezet:

link nieuwsartikel.php (error e-mail + tabel): http://www.xplosiveteam.xp-losion.com/nieuwsartikel.zip

link lezen.php (hoe de tabel bij nieuws eruit moet zien): http://www.xplosiveteam.xp-losion.com/lezen.zip

Alvast bedankt voor de hulp!!

Mvg
Tom
Gewijzigd op 01/01/1970 01:00:00 door Tom vd
 
PHP hulp

PHP hulp

18/11/2024 22:45:05
 
Jason de Ridder

Jason de Ridder

21/10/2006 13:42:00
Quote Anchor link
vind je dit makkelijk?
zet alle code tussen tags en php tussen [php][/php] tags. gebruik spaties waar het kan (just like enters.) dan wil ik het nog wel een keer proberen om te lezen. (en misschine een iets duidelijkere titel?)
Gewijzigd op 01/01/1970 01:00:00 door Jason de Ridder
 
Tom vd

tom vd

21/10/2006 13:44:00
Quote Anchor link
Ja ik weet het maar ik kon nergens tags vinden, vandaar dat ik dat niet wist... ff doen dan :P
 
Tom vd

tom vd

21/10/2006 13:48:00
Quote Anchor link
bedankt voor de tags ;) Het staat er nu goed op, verder een passende titel is hier niet echt voor te vinden :P Want als ik zet script fouten dan klopt het niet, en nog algemener dan weet je niet waar het over gaat...
 
Jason de Ridder

Jason de Ridder

21/10/2006 14:02:00
Quote Anchor link
gebruik single quotes om te echoen, zo kom je niet in de knoop met je html. om variabelen weer te geven quote je ze zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
echo '<form method="post" action="'.$_SERVER['PHP_SELF'].'">';

gebruik geen short-tags zoals:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?=$bericht; ?>
maar schrijf het beter voluit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo $bericht; ?>

html schrijf je zo <input type="submit" value="blabla" />
als je dat doet kom je al een heel eind.

het is fijn dat we er weer een programmeur bij is, maar ga eerst even wat basis curssusen volgen html php e.d.
 
Tom vd

tom vd

21/10/2006 16:37:00
Quote Anchor link
Nou, na lang puzzelen ben ik dan eindelijk klaar, zoals ik zelf ook wel verwacht had er zitten foutjes in... Maar volgens mij als die foutjes eruit zijn dan zouden er om alle reacties, om het nieuwsbericht zelf en om het gedeelte waar je een reactie kunt geven een tabel moeten zitten.

Zou dus iemand dit voor mij kunnen 'nakijken' en eventueel de fouten eruit te halen.

Ik zelf krijg de volgende error:

Parse error: syntax error, unexpected T_STRING in /home/xplosive/public_html/test/nieuwsartikel.php on line 62

Het hele script:

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
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
<?php include("gegevens.php"); ?>
<?php include("style1.inc.php"); ?>
<?php include("style1.inc.php"); ?>
<body bgcolor="#333333">

<style> BODY{scrollbar-3dlight-color:#333333;scrollbar-highlight-color:;scrollbar-face-color:#545454;scrollbar-shadow-color:;scrollbar-track-color:#333333;scrollbar-arrow-color:#333333;scrollbar-darkshadow-color:#FFFFFF;} </style>

<?php

function ControleerEmail($a) {
return ereg("[A-Za-z0-9_-]+([\.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([\.]{1}[A-Za-z0-9-]+)+",$a);
}


$id = intval($id);
$Nieuwsartikel = mysql_fetch_object(mysql_query("SELECT * FROM Nieuwsartikelen WHERE Datum = '$id'"));
if(!$id) { echo("Er is geen ID opgegeven!"); }
elseif(!$Nieuwsartikel) { echo("Het Nieuwsartikel is niet gevonden!"); }
else {

if($reactieplaatsen) {
if(!trim($Naam) || !ControleerEmail($Mail) || !trim($Bericht)) {
header("Location: nieuwsartikel.php?id=$id&melding=ongeldig");
}

else {
$Naam = htmlspecialchars($Naam,ENT_QUOTES);
$Bericht = htmlspecialchars($Bericht,ENT_QUOTES);
mysql_query("INSERT INTO Nieuwsreacties VALUES('$id','$Naam','$Mail','".date("U")."','$Bericht')");
}

$Reacties = mysql_query("SELECT * FROM Nieuwsreacties WHERE ID = '$Nieuwsartikel->Datum'");
while($Reactie = mysql_fetch_object($Reacties)) {
}
}


// -----------------------------
// PLAATS HIERONDER JE HTML!
// -----------------------------


?>


<Plaats hier je HTML!>

<?php

// -----------------------------
// PLAATS HIERBOVEN JE HTML!
// -----------------------------


if($melding == "succes") { echo("<b>De reactie is succesvol geplaatst!</b><hr><br>"); }
elseif($melding == "ongeldig") { echo("<b>Een of meerdere velden zijn niet goed ingevuld!</b><hr><br>"); }

echo('<table border="1"><tr>
<td height="20" colspan="2"><strong>Titel:</strong></td>".stripslashes($Nieuwsartikel->Titel)."
</tr>
<tr><td height="20" colspan="2">Geschreven op:</td>".date("d-m-Y H:i:s",$Nieuwsartikel->Datum)."
</tr>
<tr><td height="20" colspan="2">Geschreven door:</td>".stripslashes($Nieuwsartikel->Naam)."
</tr>
<tr>".nl2br(stripslashes($Nieuwsartikel->Artikel).";
}
</table>

echo('
<table border="1">
<
tr><td height="20" colspan="2"><strong>Reactie door:</strong></td><a href='mailto:$Reactie->Mail'>$Reactie->Naam</a>
<
td height="20" colspan="2"><strong>Geschreven op:</strong></td>".date("d-m-Y H:i:s",$Reactie->Datum)."
</tr>
<
tr>".nl2br($Reactie->Reactie).";
}
<
/table>

echo('<form method="post" action="nieuwsartikel.php?id=$id"><table width="100%" border="1" cellspacing="0" cellpadding="2">
<tr>
              <td height="20" colspan="2"><strong>Reactie plaatsen:</strong></td>
</tr>
            <tr>
              <td width="44%">Naam:</td>
          <td width="56%">
<input type="text" name="Naam" size="30" maxlength="255" />
   </td>
            </tr>
            <tr>
              <td>E-mail adres:</td>
              <td>
<input type="text" name="Mail" size="30" maxlength="255" />
 </td>
            </tr>
            <tr>
              <td align="center" colspan="2">Bericht:</td>
            </tr>
            <tr>
              <td align="center" colspan="2">
            <table width="27%" border="0" cellspacing="0" cellpadding="0">          
                    <tr>                              <td align="center" height="21" colspan="4">
 <textarea cols="30" rows="10" name="Bericht"></textarea><br><br>
<input type="hidden" name="reactieplaatsen" value="1" />
<input type="submit" value="Reactie plaatsen" />

</table></form>'
);
}

?>
 
Tom vd

tom vd

21/10/2006 20:57:00
Quote Anchor link
Heeft niemand hier tijd voor? :(
 
Klaasjan Boven

Klaasjan Boven

21/10/2006 21:09:00
Quote Anchor link
achter </table> op line 60 ; ?

Ow ja dingen als 'heeft niemand hier tijd voor' noemen we bumpen dat mag volgens het faq pas na 24 uur;

En echo is geen functie dsu niet
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo ('blaat');
?>

maar

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo 'blaat';
?>
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
Frank -

Frank -

21/10/2006 21:22:00
Quote Anchor link
Wat is de bedoeling van
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$Nieuwsartikel
= mysql_fetch_object(mysql_query("SELECT * FROM Nieuwsartikelen WHERE Datum = '$id'"));
?>

?
Het inbouwen van een garantie op problemen? Dit gaat vroeg of laat gegarandeerd fout.

Verder snap ik niets van de vergelijking. Hoe kan een datum nu een id zijn? Het id is een integer, maar de database eist voor een DATE of DATETIME toch echt het formaat yyyy-mm-dd (hh:mm:ss). Een ander formaat dan DATE of DATETIME kun je gerust als fout bestempelen, andere formaten leveren vroeg of laat problemen op. Pas dus die date('U') ook aan, geen hond is geinteresseerd in het aantal secondes sinds 1-1-1970.

Dan het stukje code, dat zou je alsvolgt kunnen gaan aanpakken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
$query
= "
SELECT
  *
FROM
  Nieuwsartikelen
WHERE
  Datum = '"
.$datum."'
"
; // wat $datum moet worden, mag je zelf even uitzoeken, $id slaat nergens op
$result = mysql_query($query) or die(mysql_error()); // Foutafhandeling!

$Nieuwsartikel = mysql_fetch_object($result);
?>

Dit is het begin van een beter script, de rest mag je zelf gaan uitvogelen. Houd in elk geval in gedachten dat alles wat fout kan gaan, ook fout zál gaan. Je moet dus overal controleren of variabelen wel bestaan, de juiste inhoud hebben en of functies en/of queries wel zijn gelukt.

Dan nog iets, de functie htmlspecialchars() gebruik je nooit wanneer je data gaat opslaan. Deze functie gebruik je uitsluitend op html-code naar de browser te sturen, dus de output. Om de database te beveiligen tegen SQL-injection gebruik je mysql_real_escape_string() wanneer je de data gaat opslaan. Deze functie ben jij vergeten en de functie htmlspecialchars() gebruik je nadat je de data met een SELECT hebt opgehaald en in de while-lus op het scherm gaat zetten.

Succes!
 
Tom vd

tom vd

21/10/2006 21:33:00
Quote Anchor link
Mijn excuses voor het vragen om reacties zegmaar!

En om een lang verhaal kort te maken, dit is mij toch te moeilijk. Ik zal is even een vriend van me lief in de ogen aankijken, die heeft ook aardig wat verstand van PHP...

Toch bedankt beide voor de uitstekende hulp, ik zal dit ook laten zien aan die vriend. Want hier kan hij zeker wat mee!
 
Klaasjan Boven

Klaasjan Boven

21/10/2006 21:36:00
Quote Anchor link
Hoho niet opgeven.

Zo zijn we allemaal eens begonnen. Wat snap je niet?
 
Tom vd

tom vd

22/10/2006 11:30:00
Quote Anchor link
Het probleem is dat er veel te veel fout is aan het script, ik kan beter iets simpeler beginnen. En dan als ik wat meer gevorderd ben dit soort fouten zelf proberen...
 
Tom vd

tom vd

22/10/2006 12:00:00
Quote Anchor link
Ik ben overigens zelf ook al weer wat verder gekomen hoor:

http://www.xplosiveteam.xp-losion.com/test/nieuwsartikel.php?id=1161009735

Ik krijg dus al geen echte 'errors' meer... Alleen werkt ie nu nog niet. Mischien dat iemand nog wat tips kan geven, zodat de pagina gewoon het nieuwsbericht met reacties weergeeft. En als dat allemaal werkt dan ga ik proberen de laatste kleine foutjes eruit halen...

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
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
112
<?php include("gegevens.php"); ?>
<?php include("style1.inc.php"); ?>
<body bgcolor="#333333">

<style> BODY{scrollbar-3dlight-color:#333333;scrollbar-highlight-color:;scrollbar-face-color:#545454;scrollbar-shadow-color:;scrollbar-track-color:#333333;scrollbar-arrow-color:#333333;scrollbar-darkshadow-color:#FFFFFF;} </style>

<?php

function ControleerEmail($a) {
return ereg("[A-Za-z0-9_-]+([\.]{1}[A-Za-z0-9_-]+)*@[A-Za-z0-9-]+([\.]{1}[A-Za-z0-9-]+)+",$a);
}


$id = intval($id);
$Nieuwsartikel = mysql_fetch_object(mysql_query("SELECT * FROM Nieuwsartikelen WHERE Datum = '$id'"));
if(!$id) { echo("Er is geen ID opgegeven!"); }
elseif(!$Nieuwsartikel) { echo("Het Nieuwsartikel is niet gevonden!"); }
else {

if($reactieplaatsen) {
if(!trim($Naam) || !ControleerEmail($Mail) || !trim($Bericht)) {
header("Location: $PHP_SELF?id=$id&melding=ongeldig");
}

else {
$Naam = htmlspecialchars($Naam,ENT_QUOTES);
$Bericht = htmlspecialchars($Bericht,ENT_QUOTES);
mysql_query("INSERT INTO Nieuwsreacties VALUES('$id','$Naam','$Mail','".date("U")."','$Bericht')");
}
}


// -----------------------------
// PLAATS HIERONDER JE HTML!
// -----------------------------


?>


<Plaats hier je HTML!>

<?php

// -----------------------------
// PLAATS HIERBOVEN JE HTML!
// -----------------------------


if($melding == "succes") { echo("<b>De reactie is succesvol geplaatst!</b><hr><br>"); }
elseif($melding == "ongeldig") { echo("<b>Een of meerdere velden zijn niet goed ingevuld!</b><hr><br>"); }

echo('<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td valign="top">
<b>Titel</b>: <?= $Nieuwsartikel->Titel; ?></td>
<td valign="top">
<b>Geschreven op</b>: <?= $Nieuwsartikel->Datum; ?></td>
<td valign="top">
<b>Geschreven door</b>: <?= $Nieuwsartikel->Naam; ?></td>
</tr>
<tr>
<td valign="top">
<?=$Nieuwsartikel->Artikel; ?>
<br />
</td>
</tr>
</table>'
);
}

?>

$Reacties = mysql_query("SELECT * FROM Nieuwsreacties WHERE ID = '$Nieuwsartikel->Datum' ORDER BY DATUM DESC");
while($Reactie = mysql_fetch_object($Reacties)) {

echo('<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
          <td width="88%" valign="top">
            <b>Reactie door</b>: <a href="mailto:<?= $Reactie->Mail; ?>"><?= $Reactie->naam; ?></a>
            <b>Geschreven op</b>: <?= $Reactie->datum; ?>
          </td>
        </tr>
        <tr>
          <td valign="top">
            <?=$Reactie->Reactie; ?>
            <br />            
          </td>
        </tr>
      </table>');
}
echo('<form method="post" action="nieuwsartikel.php?id=$id"><table width="100%" border="1" cellspacing="0" cellpadding="2" bgcolor="#545454">
<tr>
              <td height="20" colspan="2"><strong>Reactie plaatsen:</strong></td>
</tr>
            <tr>
              <td width="44%">Naam:</td>
          <td width="56%">
<input type="text" name="Naam" size="30" maxlength="255" />
   </td>
            </tr>
            <tr>
              <td>E-mail adres:</td>
              <td>
<input type="text" name="Mail" size="30" maxlength="255" />
 </td>
            </tr>
            <tr>
              <td align="center" colspan="2">Bericht:</td>
            </tr>
            <tr>
              <td align="center" colspan="2">
            <table width="27%" border="0" cellspacing="0" cellpadding="0">          
                    <tr>                              <td align="center" height="21" colspan="4">
 <textarea cols="30" rows="10" name="Bericht"></textarea><br><br>
<input type="hidden" name="reactieplaatsen" value="1" />
<input type="submit" value="Reactie plaatsen" />

</table></form>');
}
?>
 



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.