Foute query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim

Tim

20/09/2007 21:56:00
Quote Anchor link
Hey Allemaal,

Ik probeer een while te maken, maar waarschijnlijk doe ik iets fout.
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
<?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&amp;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
 
PHP hulp

PHP hulp

15/03/2025 03:45:31
 
Kalle P

Kalle P

20/09/2007 22:07:00
Quote Anchor link
1. Als je alleen maar alinea1 (goede naam trouwens) gebruikt kan je je query beter aanpassen in dit: SELECT alinea1 FROM ..... ipv *.
 
Tim

Tim

20/09/2007 22:09:00
Quote Anchor link
Verderop in de query gebruik ik de anderen waarde... kop, id, en foto1.
 
Danny K

Danny K

20/09/2007 22:26:00
Quote Anchor link
Het is ook $row['alinea1'] ipv wat je nu hebt.
De naamgeving is btw ook niet goed. $query had je beter $result kunnen noemen.
 
Frank -

Frank -

20/09/2007 22:26:00
Quote Anchor link
Volgens Yapf:
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 -
 
Tim

Tim

20/09/2007 22:36:00
Quote Anchor link
Bedankt Danny, alleen het werkt nog niet ;(

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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&amp;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
 
Danny K

Danny K

20/09/2007 22:47:00
Quote Anchor link
Check eerst eens of je wel resultaat terug krijgt!
Als je niets terug krijgt, wordt het ook lastig om dat weer te geven.
 
Tim

Tim

20/09/2007 22:51:00
Quote Anchor link
Er komt inderdaad niks terug via de $var.



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
<?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&amp;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
 
Frank -

Frank -

20/09/2007 22:55:00
Quote Anchor link
Deze zal beter werken, al is het maar omdat je nu vanalles gaat controleren:
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
<?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&amp;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).
 
Frank -

Frank -

20/09/2007 23:00:00
Quote Anchor link
Nog even een tip:
Zet altijd de volgende regels bovenaan je scripts:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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

?>
 
Tim

Tim

20/09/2007 23:02:00
Quote Anchor link
Die stond er al ;) bedankt!
 
Frank -

Frank -

20/09/2007 23:09:00
Quote Anchor link
Tim schreef op 20.09.2007 23:02:
Die stond er al ;) bedankt!
Stond er al en je kreeg geen waarschuwing op $row[alinea1] ? Lijkt mij vreemd, maar goed...
 
Tim

Tim

20/09/2007 23:11:00
Quote Anchor link
Nee, geen waarschuwing, ik heb bij het ontwerpen altijd de error reporting aanstaan.

Toch bedankt voor alle hulp!

Tim
 
Frank -

Frank -

21/09/2007 01:15:00
Quote Anchor link
Nogmaals, waarom krijg jij met error_reporting(E_ALL); géén waarschuwing op $row[alinea1] ?

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 -
 



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.