Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 506
Jeg fikler med en side på fritiden, og da jeg ikke kan PHP eller HTML finner jeg ut ting underveis.
Jeg hadde det slik jeg ville, men klarte å lagre noe over. Selvsagt fungerer det ikke nå, selv om koden er den samme (såvidt jeg husker).

Problemet er at mySQL-queryen, via for-løkka kun skriver 2 resultater. Det kan være $result eller $row i for-løkka som er feil, men det var slik jeg hadde det da det fungerte.
Der jeg kun ville fått én linje, får jeg nå en linje samt en blank linje.

Hva er det som gjør at jeg alltid kun får 2 linjer?

Her er siden i bruk: http://karbotelling.com/TEST/index.php
Her er hele koden (omtrent):

HTML-kode

<html>
<head>
<title> Karbotelling </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<div id="wrapper">
	<div id="header"><center><img src="head.png"/></center></div>
	<div id="content">
		<div id="content-left" align="left">
			<div id="topmen" style="color:#009900"><h1>Frukt & grønt</h1>
				<div id="sub1menu" style="color:#000000">
				<a href="index.php?id=frukt&uid=diverse">Diverse</a>
				</div>
			</div>
		</div>
		<div id="content-main">
<div id="bottom" style="background: white">Signatur - 2011</div>
<?php

$conn = mysql_connect(ikke hack meg);

if (!$conn) {
    echo "Unable to connect to DB: " . mysql_error();
    exit;
}
  
if (!mysql_select_db("karbotelling_co")) {
    echo "Unable to select mydbname: " . mysql_error();
    exit;
}

if (isset($_GET['id']) && isset($_GET['uid'])) { 
      $v1 = $_GET['id']; 
      $v2 = $_GET['uid']; 
}

if ($v1 =="drikke")
$enhet = 'ml';
else
$enhet = 'g';

mysql_query("SET NAMES 'utf8'");
$sql = "SELECT *
        FROM   db
        WHERE  kat='$v1' AND ukat='$v2'";

$result = mysql_query($sql);

if (!$result) {
    echo "Could not successfully run query ($sql) from DB: " . mysql_error();
    exit;
}

if (mysql_num_rows($result) == 0) {
    echo "No rows found, nothing to print so I am exiting";
    exit;
}

$res = array();

while ($row = mysql_fetch_assoc($result)) {
$res['n'][] = $row['navn'];
$res['k'][] = $row['karb'];
$res['p'][] = $row['prot'];
$res['f'][] = $row['fett'];
$res['e'][] = $row['enh'];
}

mysql_free_result($result);
?>
			<div class="hoved">
				<div id="mtit" style="width:560">
					<div style="width:180">Matvare:</div>
					<div style="width:80; text-align:right; color:#0066FF;">Karbo:</div>
					<div style="width:80; text-align:right;">Proteiner:</div>
					<div style="width:60; text-align:right;">Fett:</div>
					<div style="width:70; text-align:right;">Enhet:</div>
				</div>
				<div id="mlist" style="width:560">
					<? 
						for ($i = 0;$i<$result;$i++)
					{
						echo 	"<div id=\"mnavn\" style=\"width:180\">" . $res['n'][$i] . "</div>
							<div id=\"mkarb\" style=\"width:80; color:#0066FF;\">" . (float)$res['k'][$i] . "</div>
							<div id=\"mprot\" style=\"width:80\">" . (float)$res['p'][$i] . "</div>
							<div id=\"mfett\" style=\"width:60\">" . (float)$res['f'][$i] . "</div>
							<div id=\"menh\" style=\"width:70\">" . $res['e'][$i] . "</div>";
					}
					?>
				</div>
			</div>	<!-- end HOVED-->
		</div>	<!-- CONTENT MAIN -->
	</div>	<!-- CONTENT -->
</div>	<!-- WRAPPER -->
</body></html>
Ja, det er litt rot, men det får jeg rydde i når alt fungerer.
Hei!

Jeg kodet om litt, jeg. Fjerne exit-ene. Du bruker { } i noen deler av koden og ikke i andre, men jeg valgte å bruke det overalt. Jeg har ikke testet koden!

Jeg ser forøvrig at du setter $enhet, men aldri bruker den. Den settes også i min kode, men jeg aner ikke hvor skulle bruke den. I lista som printes ut antakeligvis?

Kode: http://pastebin.com/3Wttm83f

Kode

for ($i = 0;$i<$result;$i++)
Sikker på at du ikke skal ha $i<$res? $result er såvidt jeg kan se en mysql-ressurs, og ikke arrayet du oppretter tidligere.

Jeg ville også strukturert arrayet litt annerledes, for koden over vil gi 5 resultater på: n, k, p, f og e.

Kode

while ($row = mysql_fetch_assoc($result)) {
	$res[] = array(
		'n' => $row['navn'],
		'k' => $row['karb'],
		'p' => $row['prot'],
		'f' => $row['fett'],
		'e' => $row['enh']
	);
}
Da kan du enkelt loope igjennom det senere slik

Kode

foreach ( $res as $row ) {
	echo $row['n'] . $row['k'] . $row['p'];
}
Edit: Ser du fikk svar her mens jeg skrev. Koden som kom over er bedre da du kun får èn loop, og ikke to som i ditt, og mitt, eksempel.
Sist endret av ma10as; 22. desember 2011 kl. 21:45.
Zepur's Avatar
Trådstarter
Sitat av Pløyd Vis innlegg
Hei!

Jeg kodet om litt, jeg. Fjerne exit-ene. Du bruker { } i noen deler av koden og ikke i andre, men jeg valgte å bruke det overalt. Jeg har ikke testet koden!

Jeg ser forøvrig at du setter $enhet, men aldri bruker den. Den settes også i min kode, men jeg aner ikke hvor skulle bruke den. I lista som printes ut antakeligvis?

Kode: http://pastebin.com/3Wttm83f
Vis hele sitatet...
Tuller du?! Det der er jo helt konge!

Mye finere enn jeg hadde fra før av, óg det fungerer (med litt tweaking). Tusen takk!

$enhet henger igjen fra en tidligere versjon, men den skal i bruk, ja.


ma10as: jeg prøvde med $res, men da ville ikke koden slutte å kjøre..
Sist endret av Zepur; 22. desember 2011 kl. 21:47.
Ah, beklager. Bruker ikke for-løkker så ofte, men du må selvfølgelig bruke count-metoden. $res er et nested array der første ledd tar 5 indekser (n, k, p, f, e). Du må derfor kjøre count på ett av de flaggene for å få riktig lengde. F. eks

Kode

for ( $i = 0; $i < count($res['n']); $i++ )
Selvom du allerede har fått det til synes jeg det er greit å få en klarhet i dette