Verschillende MYSQL-bewerkingen met of zonder include
Als beginnend PHP-er heb ik de volgende vraag.
als ik een code kopieer (bv. van een gastenboek van deze site) en deze ietwat aanpas en dan test gaat
alles goed, zoals o.a. het toevoegen van een record aan een tabel in een MySql-database.
Plaats ik echter een include voor en achter (exact) dezelfde code, dan wordt er GEEN
record in de tabel bijgeschreven.
Dat begrijp ik niet. Kan iemand mij uitleggen wat ik over het hoofd zie ?
Werken bepaalde stukjes wel als je de pagina laadt en dus iets wilt opslaan.
En sowieso bij de queries nu error reporting aanzetten zodat je precies weet waarom iets niet gedaan wordt.
heb je een voorbeeldje?
@Frank: met alle plezier wil ik de code plaatsen, maar ik had ergens gelezen dat je die dan eerst moet bewerken d.m.v. codetags te plaatsen of zo.
Ik heb geen idee hoe ik dat moet doen. Ik ga dat eerst uitzoeken en kom er daarna op terug.
Bedankt zover.
Gewijzigd op 11/08/2013 08:46:01 door Ger Eielts
De code zet je tussen [code] en [/code] tags. En aan het begin en eind de php tags, als deze er al niet instaan.
wat HTML-blabla
Weer wat HTML
En ja, bij het plaatsen zie ik het zelf.
Toevoeging op 11/08/2013 10:10:49:
Frank Nietbelangrijk op 11/08/2013 01:00:22:
heb je een voorbeeldje?
Frank, onderstaand de code van het gastenboek, dat ik ergens van deze site heb gekopieerd:
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
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
<?php
// =====================================
// INSTEL GEDEELTE
$aantalresultatenperpagina = 6;
$mysqlnaam = "ingevuld";
$mysqlwachtwoord = "ingevuld";
$host = "localhost";
$db = "ingevuld";
// EINDE INSTEL GEDEELTE
// =====================================
$dbhandle = mysql_connect($host, $mysqlnaam, $mysqlwachtwoord)
or die("De verbinding met de database is mislukt!");
$selected = mysql_select_db($db,$dbhandle)
or die("De betreffende database kon niet worden gevonden!");
if(!isset($_GET['action']) || empty($_GET['action']))
{
if(empty($_GET['page']) || !is_numeric($_GET['page']) || $_GET['page'] < 0)
{
$page = 1;
}
else
{
$page = $_GET['page'];
}
$limit1 = $page * $aantalresultatenperpagina - $aantalresultatenperpagina;
$query1 = mysql_query("SELECT * FROM gastenboek LIMIT ". $limit1 .",".$aantalresultatenperpagina);
$query2 = mysql_query("SELECT * FROM gastenboek");
if(mysql_num_rows($query1) > 0)
{
echo "<table width=\"700\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<tr>";
echo "<td colspan=\"3\"><div align=\"left\">Pagina: ";
for($i = 1; $i < ceil(mysql_num_rows($query2) / $aantalresultatenperpagina) + 1; $i++)
{
echo "<a href=\"gastenboek.php?page=".$i ."\">".$i ."</a> ";
}
echo "</div></td>";
echo "</tr>";
while($rij1 = mysql_fetch_array($query1))
{
$unixtime = strtotime($rij1['datum']);
$datum = date("d-m-Y H:i:s",$unixtime);
echo "<tr>";
echo "<td width=\"200\"><div align=\"left\"><strong>Naam:</strong> ".$rij1['naam']."</div></td>";
echo "<td width=\"300\"><div align=\"left\">";
if(!empty($rij1['website']))
{
echo "<strong>Website:</strong> <a href=\"".$rij1['website']."\" target=\"_blank\">".$rij1['website']."</a>";
}
echo "</div></td>";
echo "<td width=\"200\"><div align=\"left\"><strong>Datum:</strong> ".$datum."</div></td>";
echo "</tr>";
echo "<tr>";
echo "<td colspan=\"3\"><div align=\"left\">".$rij1['text']."</div></td>";
echo "</tr>";
}
echo "</table>";
}
else
{
echo "Er zijn geen resultaten gevonden voor deze pagina. Waarschijnlijk heeft u (per ongeluk) iets gewijzigd in de adresbalk. Probeert u het nog eens!";
}
}
elseif($_GET['action'] == "new")
{
?>
// =====================================
// INSTEL GEDEELTE
$aantalresultatenperpagina = 6;
$mysqlnaam = "ingevuld";
$mysqlwachtwoord = "ingevuld";
$host = "localhost";
$db = "ingevuld";
// EINDE INSTEL GEDEELTE
// =====================================
$dbhandle = mysql_connect($host, $mysqlnaam, $mysqlwachtwoord)
or die("De verbinding met de database is mislukt!");
$selected = mysql_select_db($db,$dbhandle)
or die("De betreffende database kon niet worden gevonden!");
if(!isset($_GET['action']) || empty($_GET['action']))
{
if(empty($_GET['page']) || !is_numeric($_GET['page']) || $_GET['page'] < 0)
{
$page = 1;
}
else
{
$page = $_GET['page'];
}
$limit1 = $page * $aantalresultatenperpagina - $aantalresultatenperpagina;
$query1 = mysql_query("SELECT * FROM gastenboek LIMIT ". $limit1 .",".$aantalresultatenperpagina);
$query2 = mysql_query("SELECT * FROM gastenboek");
if(mysql_num_rows($query1) > 0)
{
echo "<table width=\"700\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
echo "<tr>";
echo "<td colspan=\"3\"><div align=\"left\">Pagina: ";
for($i = 1; $i < ceil(mysql_num_rows($query2) / $aantalresultatenperpagina) + 1; $i++)
{
echo "<a href=\"gastenboek.php?page=".$i ."\">".$i ."</a> ";
}
echo "</div></td>";
echo "</tr>";
while($rij1 = mysql_fetch_array($query1))
{
$unixtime = strtotime($rij1['datum']);
$datum = date("d-m-Y H:i:s",$unixtime);
echo "<tr>";
echo "<td width=\"200\"><div align=\"left\"><strong>Naam:</strong> ".$rij1['naam']."</div></td>";
echo "<td width=\"300\"><div align=\"left\">";
if(!empty($rij1['website']))
{
echo "<strong>Website:</strong> <a href=\"".$rij1['website']."\" target=\"_blank\">".$rij1['website']."</a>";
}
echo "</div></td>";
echo "<td width=\"200\"><div align=\"left\"><strong>Datum:</strong> ".$datum."</div></td>";
echo "</tr>";
echo "<tr>";
echo "<td colspan=\"3\"><div align=\"left\">".$rij1['text']."</div></td>";
echo "</tr>";
}
echo "</table>";
}
else
{
echo "Er zijn geen resultaten gevonden voor deze pagina. Waarschijnlijk heeft u (per ongeluk) iets gewijzigd in de adresbalk. Probeert u het nog eens!";
}
}
elseif($_GET['action'] == "new")
{
?>
<form action="gastenboek.php?action=add" method="post">
<table width="350" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="93">Naam:*</td>
<td width="257"><label>
<input type="text" name="naam" id="naam">
</label></td>
</tr>
<tr>
<td>Website:</td>
<td><input type="text" name="website" id="website"></td>
</tr>
<tr>
<td>Bericht:*</td>
<td><label>
<textarea name="bericht" id="bericht" cols="45" rows="5"></textarea>
</label></td>
</tr>
<tr>
<td><input name="submit" type="submit" value="Toevoegen" /></td>
<td> </td>
</tr>
</table>
</form>
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
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
<?php
}
elseif($_GET['action'] == "add" && isset($_POST['submit']))
{
$naam = mysql_real_escape_string($_POST['naam']);
$website = mysql_real_escape_string($_POST['website']);
$bericht = mysql_real_escape_string($_POST['bericht']);
echo "na de elseif met post";
if(!empty($website))
{
if(!ereg("^http:////",$website))
{
$website = "http://".$website;
}
}
if(strlen($naam) < 2)
{
$error .= "U heeft geen (geldige) naam opgegeven.<br />";
}
if(strlen($bericht) < 10)
{
$error .= "U heeft geen (geldig) bericht opgegeven. Let op, een bericht dient minstens 10 tekens te hebben.<br />";
}
if(isset($error))
{
echo "Er zijn fouten opgetreden:";
echo "<br /><br />";
echo $error;
echo "<br /><br />";
echo "<a href=\"javascript:history.back(1)\">Klik hier om de fouten te herstellen.</a>";
}
else
echo ("hiero voor insert");
{
if(mysql_query("
INSERT INTO
gastenboek
(
naam,
website,
datum,
text
)
VALUES
(
'".$naam."',
'".$website."',
'".date("y-m-d H:i:s")."',
'".$bericht."'
)
"))
{
echo "Uw bericht is toegevoegd!";
}
else
{
echo "Er is iets misgegaan bij het toevoegen van het bericht in het gastenboek: <br />".mysql_error();
}
}
}
?>
}
elseif($_GET['action'] == "add" && isset($_POST['submit']))
{
$naam = mysql_real_escape_string($_POST['naam']);
$website = mysql_real_escape_string($_POST['website']);
$bericht = mysql_real_escape_string($_POST['bericht']);
echo "na de elseif met post";
if(!empty($website))
{
if(!ereg("^http:////",$website))
{
$website = "http://".$website;
}
}
if(strlen($naam) < 2)
{
$error .= "U heeft geen (geldige) naam opgegeven.<br />";
}
if(strlen($bericht) < 10)
{
$error .= "U heeft geen (geldig) bericht opgegeven. Let op, een bericht dient minstens 10 tekens te hebben.<br />";
}
if(isset($error))
{
echo "Er zijn fouten opgetreden:";
echo "<br /><br />";
echo $error;
echo "<br /><br />";
echo "<a href=\"javascript:history.back(1)\">Klik hier om de fouten te herstellen.</a>";
}
else
echo ("hiero voor insert");
{
if(mysql_query("
INSERT INTO
gastenboek
(
naam,
website,
datum,
text
)
VALUES
(
'".$naam."',
'".$website."',
'".date("y-m-d H:i:s")."',
'".$bericht."'
)
"))
{
echo "Uw bericht is toegevoegd!";
}
else
{
echo "Er is iets misgegaan bij het toevoegen van het bericht in het gastenboek: <br />".mysql_error();
}
}
}
?>
Als ik bovenstaand script op mijn testsite laat lopen, wordt er keurig een record toegevoegd aan de tabel.
Plaats ik daarentegen aan het begin de volgende include:
en aan het eind de andere include:
en ik laat het script wederom lopen, dan worden er geen records toegevoegd. En waarom niet vraag ik me af.
Header_Terug.php luidt als volgt:
<!DOCTYPE html>
<html>
<head>
<title>MP Terug</title>
<link href="./Styles/Site.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
</head>
<body>
<form id="header">
<div class="page">
<div class="header">
<div class="title" >
<h1>
Wat tekst.......
</h1>
<div id="pics" style="position:absolute;top:0px;right:0px"><img alt="Winnie" src="Images/pooh.gif"></div>
</div>
<div class="clear hideSkiplink">
<div class="clear hideSkiplink">
<Table id="menu" CssClass="menu">
<tr>
<td><button type='button' onclick="javascript:history.back(1)">Terug</button></td>
</tr>
</table>
</div>
</div>
</div>
<div class="main">
</html>
En Footer_Default.php luidt:
</div>
<div class="clear">
</div>
</div>
<div class="footer">
</div>
</form>
</body>
</html>
Het zal wel heel simpel zijn, maar ik heb graag een antwoord. Bedankt alvast.
Gewijzigd op 11/08/2013 10:12:37 door Ger Eielts
En zo ook voor Footer_Default:
En krijg je een foutmelding? Zet eens error_reporting(E_ALL); bovenaan de pagina en boven het mysql gedeelte?
als je nooit geen foutmeldingen te zien krijgt van php dan zou je helemaal boven in je code het volgende kunnen toevoegen:
Dit is zeer belangrijk om te kunnen achterhalen wat er fout gaat.
Wat ik wel zie is dat in de 1e include al </html> staat.Die hoort daar sowieso niet.
Ook lijkt het me dat je 2x </form> in je code hebt staan.
Kortom: kijk eens in de broncode van je pagina.
Ten aanzien van de code:
Denk dat het van http://www.phphulp.nl/php/script/gastenboeken-fora/eenvoudig-gastenboek-met-mysql/1635/ afkomstig is. Is 5 jaar oud.
Als je nieuw bent, ga gelijk over op mysqli ipv mysql.
Or die --> is geen (nette) foutafhandeling.
Ik mis foutafhandeling bij $query1 en $query2.
Gebruik in PHP ' (echo) en HTML " --> scheelt je al die keren \ (bv regel 37)
Controleren of een formulier verzonden is:
ipv
Regel 5, 6 en 7 zijn onnodig: ten eerste kopieer je daar variabelen en ten tweede hoor je mysql(i)_real_escape_string in een query te gebruiken.
ereg is verouderd. Gebruik preg_match.
Je moet een foutmelding krijgen op $error .= --> je wilt iets toevoegen aan een niet bestaande variabele.
En ik bedoelde inderdaad dat hij beide even kan proberen.
Frank Nietbelangrijk op 11/08/2013 10:28:30:
Ger,
als je nooit geen foutmeldingen te zien krijgt van php dan zou je helemaal boven in je code het volgende kunnen toevoegen:
Dit is zeer belangrijk om te kunnen achterhalen wat er fout gaat.
als je nooit geen foutmeldingen te zien krijgt van php dan zou je helemaal boven in je code het volgende kunnen toevoegen:
Dit is zeer belangrijk om te kunnen achterhalen wat er fout gaat.
Frank, ik krijg wel degelijk foutmeldingen (zal dan wel van een default-instelling zijn of zo), maar in onderhavig geval geen foutmelding. Na het klikken op de "Toevoegen"-button krijg ik het Gastenboek.php-scherm terug met een serie geplaatste berichten, maar dan zonder de zojuist door mij toegevoegde. Heb dit overigens wel getest met error_reporting(E_ALL) boven in Gastenboek.php.
Ger Eielts op 11/08/2013 13:14:48:
ik krijg wel degelijk foutmeldingen (zal dan wel van een default-instelling zijn of zo),
Benieuwd wat ik me daar bij moet voorstellen.
En heb je nog naar mijn vorige reactie gekeken?
Toevoeging op 11/08/2013 15:38:51:
@Frank Martens..... Met de enkele quote werd een record toegevoegd en ik kreeg keurig mijn scherm terug.
Weer een stap verder. Nu alle opmerkingen van Obelix en Idefix nog.
Daarnaast zou ik toch eens kijken naar 2x </html> en 2x </form> in je code.
Ger Eielts op 11/08/2013 15:22:49:
@ Obelix en Idefix: bedankt voor je kritische reactie. Ben momenteel bezig al je opmerkingen te verwerken, maar dat is dan ter verbetering van de bestaande code. Het "geen-record-toegevoegd"-probleem is er niet mee opgelost. We zoeken verder !
Toevoeging op 11/08/2013 15:38:51:
@Frank Martens..... Met de enkele quote werd een record toegevoegd en ik kreeg keurig mijn scherm terug.
Weer een stap verder. Nu alle opmerkingen van Obelix en Idefix nog.
Toevoeging op 11/08/2013 15:38:51:
@Frank Martens..... Met de enkele quote werd een record toegevoegd en ik kreeg keurig mijn scherm terug.
Weer een stap verder. Nu alle opmerkingen van Obelix en Idefix nog.
Prima, goed om te horen.