Foute query
Ik probeer een while te maken, maar waarschijnlijk doe ik iets fout.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$query = mysql_query("SELECT * FROM nieuws_actueel_1 WHERE status=1 ORDER BY id DESC LIMIT 0,4");
while ($row = mysql_fetch_object($query))
{
$var = wordwrap($row[alinea1],150,"\n");
$var = explode ("\n",$var);
echo $var[0];
echo"
<div class=\"nws-im-block\">
<div class=\"nws-im-title\"><a href=\"index.php?page=v-news&id=$row->id\">$row->kop</a></div>
<div class=\"nws-im-img\"><img src=\"../images/nieuws/$row->foto1\" alt=\"$row->kop\" class=\"nws-im-image\"></div>
</div>";
}
?>
$query = mysql_query("SELECT * FROM nieuws_actueel_1 WHERE status=1 ORDER BY id DESC LIMIT 0,4");
while ($row = mysql_fetch_object($query))
{
$var = wordwrap($row[alinea1],150,"\n");
$var = explode ("\n",$var);
echo $var[0];
echo"
<div class=\"nws-im-block\">
<div class=\"nws-im-title\"><a href=\"index.php?page=v-news&id=$row->id\">$row->kop</a></div>
<div class=\"nws-im-img\"><img src=\"../images/nieuws/$row->foto1\" alt=\"$row->kop\" class=\"nws-im-image\"></div>
</div>";
}
?>
Alles werkt wel behalve de wordwrap... mischien kan dit ook wel niet zo?
Thxs,
Tim
1. Als je alleen maar alinea1 (goede naam trouwens) gebruikt kan je je query beter aanpassen in dit: SELECT alinea1 FROM ..... ipv *.
Verderop in de query gebruik ik de anderen waarde... kop, id, en foto1.
De naamgeving is btw ook niet goed. $query had je beter $result kunnen noemen.
Yapf:
Met namen als nieuws_actueel_1, alinea1 en foto1 krijg ik dan ook het idee dat je niet (goed) hebt genormaliseerd. In de praktijk blijkt namelijk dat genummerde namen altijd een aanwijzing zijn voor een fout datamodel.
Kijk hier nog eens goed na, het kan een hoop problemen voorkomen.
Edit: nieuws_actueel_1 is dubbelop fout, nieuws is nieuws en actueel zegt iets over een datum. Een datum sla je op in een kolom, het is zeker geen eigenschap van een tabel. Het is wel heel erg fout om nieuws van de tabel nieuws_actueel_1 te verplaatsen naar nieuws_oud_1.
Volgens Quote:
Geen herhalende kolommen in een tabel
Met namen als nieuws_actueel_1, alinea1 en foto1 krijg ik dan ook het idee dat je niet (goed) hebt genormaliseerd. In de praktijk blijkt namelijk dat genummerde namen altijd een aanwijzing zijn voor een fout datamodel.
Kijk hier nog eens goed na, het kan een hoop problemen voorkomen.
Edit: nieuws_actueel_1 is dubbelop fout, nieuws is nieuws en actueel zegt iets over een datum. Een datum sla je op in een kolom, het is zeker geen eigenschap van een tabel. Het is wel heel erg fout om nieuws van de tabel nieuws_actueel_1 te verplaatsen naar nieuws_oud_1.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
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
$query = mysql_query("SELECT * FROM SIRIS_nieuws WHERE status=1 and soort=3 ORDER BY id DESC LIMIT 0,4");
while ($row = mysql_fetch_object($query))
{
$var = wordwrap($row['alinea1'],150,"\n");
$var = explode ("\n",$var);
echo"
<div class=\"nws-im-block\">
<div class=\"nws-im-title\"><a href=\"index.php?page=v-news&id=$row->id\">$row->kop</a></div>
<div class=\"nws-im-img\"><img src=\"../images/nieuws/$row->foto1\" alt=\"$row->kop\" class=\"nws-im-image\"></div>
</div>";
}
?>
$query = mysql_query("SELECT * FROM SIRIS_nieuws WHERE status=1 and soort=3 ORDER BY id DESC LIMIT 0,4");
while ($row = mysql_fetch_object($query))
{
$var = wordwrap($row['alinea1'],150,"\n");
$var = explode ("\n",$var);
echo"
<div class=\"nws-im-block\">
<div class=\"nws-im-title\"><a href=\"index.php?page=v-news&id=$row->id\">$row->kop</a></div>
<div class=\"nws-im-img\"><img src=\"../images/nieuws/$row->foto1\" alt=\"$row->kop\" class=\"nws-im-image\"></div>
</div>";
}
?>
En ik dit was nog de oude table naam... die heb ik niet gemaakt.
Maar 'pgFrank' je hebt helemaal gelijk ;)
Maar wat is nu de oplossing?
Thxs,
Tim
Als je niets terug krijgt, wordt het ook lastig om dat weer te geven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$query = mysql_query("SELECT * FROM SIRIS_nieuws WHERE status=1 and soort=3 ORDER BY id DESC LIMIT 0,4");
while ($row = mysql_fetch_object($query))
{
$var = wordwrap($row['alinea1'],150,"\n");
$var = explode ("\n",$var);
echo $var[0];
echo $row->alinea1;
echo"
<div class=\"nws-im-block\">
<div class=\"nws-im-title\"><a href=\"index.php?page=v-news&id=$row->id\">$row->kop</a></div>
<div class=\"nws-im-img\"><img src=\"../images/nieuws/$row->foto1\" alt=\"$row->kop\" class=\"nws-im-image\"></div>
</div>";
}
?>
$query = mysql_query("SELECT * FROM SIRIS_nieuws WHERE status=1 and soort=3 ORDER BY id DESC LIMIT 0,4");
while ($row = mysql_fetch_object($query))
{
$var = wordwrap($row['alinea1'],150,"\n");
$var = explode ("\n",$var);
echo $var[0];
echo $row->alinea1;
echo"
<div class=\"nws-im-block\">
<div class=\"nws-im-title\"><a href=\"index.php?page=v-news&id=$row->id\">$row->kop</a></div>
<div class=\"nws-im-img\"><img src=\"../images/nieuws/$row->foto1\" alt=\"$row->kop\" class=\"nws-im-image\"></div>
</div>";
}
?>
$row->alinea1 daar komt de tekst gewoon op terug.
Tim
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
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
<?php
$query = "
SELECT
*
FROM
SIRIS_nieuws
WHERE
status = 1
AND
soort = 3
ORDER BY
id DESC
LIMIT 0,4";
$result = mysql_query($query);
if (!$result) { // Query mislukt!
echo mysql_error().' met query: '.$query;
}
else {
if (mysql_numrows($result) == 0) { // Geen resultaten!
echo 'Geen resultaten gevonden.';
}
else {
while ($row = mysql_fetch_assoc($result)){
$var = wordwrap($row['alinea1'], 150, "\n");
$var = explode ("\n", $var); // Wat ga je met $var doen?
echo '<div class="nws-im-block">
<div class="nws-im-title"><a href="index.php?page=v-news&id='.$row['id'].'">'.$row['kop'].'</a></div>
<div class="nws-im-img"><img src="../images/nieuws/'.$row['foto1'].'" alt="'.$row['kop'].'" class="nws-im-image"></div>
</div>';
}
}
}
?>
$query = "
SELECT
*
FROM
SIRIS_nieuws
WHERE
status = 1
AND
soort = 3
ORDER BY
id DESC
LIMIT 0,4";
$result = mysql_query($query);
if (!$result) { // Query mislukt!
echo mysql_error().' met query: '.$query;
}
else {
if (mysql_numrows($result) == 0) { // Geen resultaten!
echo 'Geen resultaten gevonden.';
}
else {
while ($row = mysql_fetch_assoc($result)){
$var = wordwrap($row['alinea1'], 150, "\n");
$var = explode ("\n", $var); // Wat ga je met $var doen?
echo '<div class="nws-im-block">
<div class="nws-im-title"><a href="index.php?page=v-news&id='.$row['id'].'">'.$row['kop'].'</a></div>
<div class="nws-im-img"><img src="../images/nieuws/'.$row['foto1'].'" alt="'.$row['kop'].'" class="nws-im-image"></div>
</div>';
}
}
}
?>
Het probleem zit hem in het fetchen, je gebruikt _object maar roept alinea1 aan als een array. Leer het gebruik van _object af, het zijn geen objecten en het is gruwelijk langzaam. _assoc is 1 van de betere keuzes (eigenlijk de beste, maar dat is mijn mening).
Zet altijd de volgende regels bovenaan je scripts:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT); // Dit is voor PHP 5, bij versie 4 alleen E_ALL
// rest van je script
?>
ini_set('display_errors', 1);
error_reporting(E_ALL | E_STRICT); // Dit is voor PHP 5, bij versie 4 alleen E_ALL
// rest van je script
?>
Die stond er al ;) bedankt!
Tim schreef op 20.09.2007 23:02:
Stond er al en je kreeg geen waarschuwing op $row[alinea1] ? Lijkt mij vreemd, maar goed...Die stond er al ;) bedankt!
Toch bedankt voor alle hulp!
Tim
Je hebt gefetched met _object, hierdoor zal er dus geen array $row ontstaan en kun je nooit met $row[] aan slag gaan. Doe je dat toch, krijg je een waarschuwing. Daarnaast gebruik jij de constante alinea1 die waarschijnlijk ook niet bestaat. Ook daar hoor je een waarschuwing op te krijgen.
Een index van een array hoor je namelijk tussen quotes te zetten, het is een string: $row['alinea1']
Je bent of heel raar aan het programmeren, ongelukkige gekozen namen en lukraak een fetch-functie kiezen, of jouw error_reporting() staat niet goed ingesteld. Zoek dit even uit, het kan je een hele hoop tijd schelen met het debuggen.
Edit: En wanneer je constantes gebruikt in je code, is het een goede gewoonte om de naam met hoofdletters te schrijven. Dan vallen ze goed op en krijg je direct een notice om de oren geslingerd op het moment dat je de naam met kleine letters schrijft.
Gewijzigd op 01/01/1970 01:00:00 door Frank -