uitlezen MySQL wel in WAMP, niet op hostserver.
Met behulp van al jullie wijze raad en scripts, heb ik een website gebouwd, met een eenvoudig nieuwssysteem. In mijn locale WAMP-server werkt dit perfect, maar nadat ik de site geupload heb naar de host-server, werkt het niet meer. Kan dit door een verschil in PHP5.3 en PHP5.4 zitten?
De code is deze:
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
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
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
$aErrors = array();
require_once ('script/db_config.php');
// Construeer een opdracht voor de database
$sQuery = "SELECT * FROM nieuws
ORDER BY nieuws_id";
// Stuur de opdracht op
$rResult = mysql_query($sQuery, $rLink);
// Controleer of het gelukt is
if ($rResult === false) {
$aErrors[] = 'Er zijn nog geen nieuwsberichten.';
}
elseif (mysql_num_rows($rResult) == 1) {
$aErrors[] = 'Er zijn geen nieuwsberichten!';
}
// Als er dingen fout zijn gegaan, vertel het
if (count($aErrors) > 0) {
echo '<p class="error">';
foreach ($aErrors as $sError) {
print $sError . '<br />';
}
echo '</p>';
}
// Geen fouten? Dan maken we een lijst!
else {
echo '<dl>';
while ($aBericht = mysql_fetch_assoc($rResult)) {
// We moeten vanwege de speciale tekens in de titel htmlspecialchars() gebruiken
// Dit zorgt ervoor dat bijvoorbeeld < en " onschadelijk worden gemaakt
echo '<li>';
echo ($aBericht['datum']);
echo '</li>';
echo '<li id="titel">';
echo htmlspecialchars($aBericht['titel']);
echo '</li>';
echo ('</br>');
echo '</li>';
echo nl2br($aBericht['bericht']);
echo '</li>';
echo ('</br></br></br>'). PHP_EOL;
}
echo '</dl>';
}
?>
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
$aErrors = array();
require_once ('script/db_config.php');
// Construeer een opdracht voor de database
$sQuery = "SELECT * FROM nieuws
ORDER BY nieuws_id";
// Stuur de opdracht op
$rResult = mysql_query($sQuery, $rLink);
// Controleer of het gelukt is
if ($rResult === false) {
$aErrors[] = 'Er zijn nog geen nieuwsberichten.';
}
elseif (mysql_num_rows($rResult) == 1) {
$aErrors[] = 'Er zijn geen nieuwsberichten!';
}
// Als er dingen fout zijn gegaan, vertel het
if (count($aErrors) > 0) {
echo '<p class="error">';
foreach ($aErrors as $sError) {
print $sError . '<br />';
}
echo '</p>';
}
// Geen fouten? Dan maken we een lijst!
else {
echo '<dl>';
while ($aBericht = mysql_fetch_assoc($rResult)) {
// We moeten vanwege de speciale tekens in de titel htmlspecialchars() gebruiken
// Dit zorgt ervoor dat bijvoorbeeld < en " onschadelijk worden gemaakt
echo '<li>';
echo ($aBericht['datum']);
echo '</li>';
echo '<li id="titel">';
echo htmlspecialchars($aBericht['titel']);
echo '</li>';
echo ('</br>');
echo '</li>';
echo nl2br($aBericht['bericht']);
echo '</li>';
echo ('</br></br></br>'). PHP_EOL;
}
echo '</dl>';
}
?>
Er wordt verbinding gemaakt met de database en er zijn berichten, maar toch krijg ik een error en wordt dit stukje script uitgevoerd.
$sQuery = "SELECT * FROM nieuws
ORDER BY nieuws_id";
// Stuur opdracht op
$rResult = mysql_query($sQuery, $rLink);
// Controleer of het gelukt is
if ($rResult === false) {
$aErrors[] = 'Er zijn nog geen nieuwsberichten.';
}
Iemand enig idee?
Op dit punt moet er een error zijn die aangeeft dat de data niet kan worden opgehaald, vanwege een fout.
Kijk ook eens naar mysql_error(), en houd in je achterhoofd dat in toekomstige PHP-versies geen mysql_*() functies meer zullen slikken, en dat je over moet stappen naar de functiesets van PDO of MySQLi.
Beide foutmeldingen kloppen niet. Zoals Aar al zegt betekent de eerste dat er iets fout is gegaan met de query en kan je dus niets zeggen over het aantal berichten. Bij de tweede haal je er 1 op en zeg je dat er geen zijn. Dat klopt dus ook niet, want er is er wel 1.
En ja, die 1 in de tweede foutmelding moet 0 zijn, dat had ik nog niet teruggezet na allerlei testpogingen om de zaak aan de praat te krijgen.
Er staan dus wél berichten in de database, er wordt ook verbinding mee gemaakt, maar de data wordt niet opgehaald en kan niet ontdekken waarom niet.
Gewijzigd op 03/02/2014 12:50:39 door tortuga web
Wat zegt mysql_error()?
uhmmm, waar zet ik dat in het script???
Op zo een manier, i.p.v..:
Uiteraard tijdelijk, en laat je deze melding bezoekers niet zien.
Gewijzigd op 03/02/2014 13:01:46 door - Ariën -
Zoals al was gezegd vervallen de mysql_* functies. Kijk eens naar MySQLi of PDO.
Het hele lijstje van echo's om je lijst te generen kan ook eenvoudiger en overzichtelijker.
bijvoorbeeld
Code (php)
1
2
3
4
5
2
3
4
5
<?php
echo '<li>' . $aBericht['datum'] . '</li>'
.'<li id="titel">' . htmlspecialchars($aBericht['titel']) . '</li>'
.'<li>' . nl2br($aBericht['bericht']) . '</li>';
?>
echo '<li>' . $aBericht['datum'] . '</li>'
.'<li id="titel">' . htmlspecialchars($aBericht['titel']) . '</li>'
.'<li>' . nl2br($aBericht['bericht']) . '</li>';
?>
Gewijzigd op 03/02/2014 13:20:39 door Michael -
O boy, ga even wat verbetering aanbrengen, want er zit een foutje in mijn database-columnnaam. Ben wel blij met dit comando, dat maakt een hoop duidelijk. Dank je wel en als het dan toch nog niet lukt kom ik weer terug.
nieuws_id bestaat dus helemaal niet. Geef daarom ook je velden op ipv *. Dat maakt het veel overzichtelijker welke velden je tot je beschikking hebt.