PHP list niet volledig uitgevoerd
Ik heb een probleem. Ik wil namelijk een lijst uit mysql halen en daarvoor de volgende regels geschreven:
<link href="List.css" rel="stylesheet" type="text/css" />
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
require_once"database_connect.php";
$sql = mysql_query("SELECT * FROM producten ORDER BY id ASC");
$run = mysql_query($sql);
echo '<ul>';
while ($rows = mysql_fetch_assoc($sql)){
$name = "Product title";
$comments = "Product info";
echo '<li />' .'Name: ' . $rows[$name] . '<br />'
. 'Comment: ' . $rows[$comments] ;
echo '</ul>';
}
?>
require_once"database_connect.php";
$sql = mysql_query("SELECT * FROM producten ORDER BY id ASC");
$run = mysql_query($sql);
echo '<ul>';
while ($rows = mysql_fetch_assoc($sql)){
$name = "Product title";
$comments = "Product info";
echo '<li />' .'Name: ' . $rows[$name] . '<br />'
. 'Comment: ' . $rows[$comments] ;
echo '</ul>';
}
?>
Echter krijg ik dan wel een lijst met alle gegevens uit mysql maar alleen het eerste item uit de lijst heeft de opmaak van de css regel. (met een background e.d.) en de overige hebben dat niet. Maar het vreemde is dat de andere items weer wel de hover effect uit de css regels hebben. Ter verduideling hier de css regels:
#wrapper ul {
list-style:none;
cursor: pointer;
}
#wrapper ul li{
font-size:16px;
font-family:"Times New Roman", Times, serif;
background:#F00;
}
Iemand enig idee hoe ik dit kan verhelpen?
Ik kan ook nog een plaatje ter verduideling van de situatie bijvoegen maar dan moet iemand mij even vertellen hoe dat hier in zijn werking gaat.
Bvd Tom
Gewijzigd op 15/09/2011 13:40:14 door Tom geen
Regel 6 geeft een dikke error.
Zo te zien heb jij in de database veldnamen gebruikt met spaties. NOOIT doen.
Ik ben nog niet zo heel lang bezig met php, dus ik zie nog niet echt wat er allemaal wel en niet fout gaat.
Dus als je me op weg zou willen helpen dan ben ik je zeer dankbaar.
Tom
- SanThe - op 15/09/2011 13:47:29:
Foutafhandeling query's ontbreekt.
Als je dat inbouwt komt de error vanzelf te voorschijn.
http://www.phphulp.nl/php/tutorial/data-verwerking/foutafhandeling-query-sql/735/
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #5' at line 1Resource id #5
Enig idee wat dit is?
$sql = mysql_query("SELECT * FROM producten ORDER BY id ASC");
In $sql zit nu het resultaat van de query (resource id)
En op de volgende regel ga jij daar nogmaals mysql_query() op loslaten. Dat gaat uiteraard niet goed.
$run = mysql_query($sql);
$run = mysql_query($sql);
er uit haal dan blijft die zelde error staan. Wat moet ik dan doen om die error eruit te krijgen?
Laat je script met de wijzigingen eens zien.
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
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
<?php
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
require_once"database_connect.php";
$sql = mysql_query("SELECT * FROM producten ORDER BY id ASC");
if (($result = mysql_query($sql)) === false)
{
echo showSQLError($sql,mysql_error(),'Fout met database.');
}
echo '<ul>';
while ($rows = mysql_fetch_assoc($sql)){
$name = "Product_title";
$comments = "Product_info";
echo '<li />' .'Name: ' . $rows[$name] . '<br />'
. 'Comment: ' . $rows[$comments] ;
echo '</ul>';
}
?>
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
require_once"database_connect.php";
$sql = mysql_query("SELECT * FROM producten ORDER BY id ASC");
if (($result = mysql_query($sql)) === false)
{
echo showSQLError($sql,mysql_error(),'Fout met database.');
}
echo '<ul>';
while ($rows = mysql_fetch_assoc($sql)){
$name = "Product_title";
$comments = "Product_info";
echo '<li />' .'Name: ' . $rows[$name] . '<br />'
. 'Comment: ' . $rows[$comments] ;
echo '</ul>';
}
?>
$sql = mysql_query("SELECT * FROM producten ORDER BY id ASC");
if (($result = mysql_query($sql)) === false)
Beter is eerst de sql in een var en dan de query.
$sql = "SELECT * FROM producten ORDER BY id ASC";
if (($result = mysql_query($sql)) === false)
Toevoeging op 15/09/2011 15:15:06:
Aangezien nu het resultaat in $result zit moet je deze regel even aanpassen:
while ($rows = mysql_fetch_assoc($sql)){
Naar
while ($rows = mysql_fetch_assoc($result)){
Toevoeging op 15/09/2011 15:20:40:
Het benoemen van $vars die verder niet zullen veranderen doe je NOOIT in een (while)loop. Dat kost alleen maar extra tijd. Dus regels 33 en 34 horen vóór de while(). Beter nog: Gewoon helemaal niet aanmaken, maar gewoon de namen in $rows['hier_de_naam'] zetten.
Maar nu is de error opgelost (bedankt daarvoor), maar heb ik nog steeds de vraag:
Ik krijg wel een lijst met alle gegevens uit mysql maar alleen het eerste item uit de lijst heeft de opmaak van de css regel. (met een background e.d.) en de overige hebben dat niet. Maar het vreemde is dat de andere items weer wel de hover effect uit de css regels hebben.
Weet je hoe dit zit?
Wel: <li>met tekst ertussen</li>
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
echo '<ul>';
while ($rows = mysql_fetch_assoc($result)){
$name = "Product_title";
$comments = "Product_info";
echo '<li>' . 'Name: ' . $rows[$name] . '<br />'
. 'Comment: ' . $rows[$comments] . '</li>';
echo '</ul>';
}
?>
echo '<ul>';
while ($rows = mysql_fetch_assoc($result)){
$name = "Product_title";
$comments = "Product_info";
echo '<li>' . 'Name: ' . $rows[$name] . '<br />'
. 'Comment: ' . $rows[$comments] . '</li>';
echo '</ul>';
}
?>
met de css regels:
#wrapper ul {
list-style:none;
cursor: pointer;
}
#wrapper li {
font-size:16px;
font-family:"Times New Roman", Times, serif;
background:#F00;
}
#wrapper li:hover{
font-size:16px;
font-family:"Times New Roman", Times, serif;
background:#03F;
}
Ik heb nu de css een beetje aangepast en nu hebben alle items een background:#F00 en een hover effect background:#03F
Maar nu is de eerste item ongeveer 25px naar rechts uitgelijnd en de rest niet en heeft het eerste item een pointer (zoals opgegeven in de css) en de rest ook niet.
Ik vindt het vooral vreemd dat alleen de eerste item aan alle voorwaarde voldoet en de daarop volgende niet meer.
Wat zie ik over het hoofd?
Je opent <ul> slechts 1 keer.
Je sluit </ul> net zo vaak als dat de while() loopt.
Gewijzigd op 15/09/2011 16:02:04 door - SanThe -
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
while ($rows = mysql_fetch_assoc($result)){
$name = "Product_title";
$comments = "Product_info";
echo '<ul>';
echo '<li>' . 'Name: ' . $rows[$name] . '<br />'
. 'Comment: ' . $rows[$comments] . '</li>';
//'<li>' '</li>'
echo '</ul>';
}
?>
while ($rows = mysql_fetch_assoc($result)){
$name = "Product_title";
$comments = "Product_info";
echo '<ul>';
echo '<li>' . 'Name: ' . $rows[$name] . '<br />'
. 'Comment: ' . $rows[$comments] . '</li>';
//'<li>' '</li>'
echo '</ul>';
}
?>
en nu werkt hij zoals ik hem wil hebben!
-SanThe- je bent de beste!
Tnx, Tom
- SanThe - op 15/09/2011 15:13:20:
Het benoemen van $vars die verder niet zullen veranderen doe je NOOIT in een (while)loop. Dat kost alleen maar extra tijd. Dus regels 33 en 34 horen vóór de while(). Beter nog: Gewoon helemaal niet aanmaken, maar gewoon de namen in $rows['hier_de_naam'] zetten.
Nou dit nog even doen.
Want ik vindt het zelf overzichteljker om ze in $vars neer te zetten.
Gewijzigd op 15/09/2011 16:42:26 door Tom geen
Het zal een heeeeeeeeel klein beetje sneller zijn, maar dat is te verwaarlozen. Maar haal het definiëren zeker buiten de loop, want dat kost ietsje meer tijd.