while

PHP

7 svar · 272 visningar · startad av webbmannen

Medlem sedan dec. 1999826 inlägg
Trådstart#1

Kan någon vänlig själ säga var jag går bort mig någonstans.

Jag har en söksida som dels kan hämta specifika ord från db:n och nu skulle jag fixa till så det var möjligt att hämta alla ord som började på en viss bokstav. Detta vill sig inte och jag kan inte se felet.

Länken som ska hämta alla ord på A ser ut så här:

<a href="search_word.php?bokstav=A" class="link">A</a>

Koden för utförandet (samma sida som länken) ser ut så här:

if ($bokstav){
$conn = mysql_connect("","","");
mysql_select_db("");
$sql = "SELECT * FROM ordlista WHERE ordet LIKE '$bokstav%'";
$ordet = mysql_query($sql) or die("Select Failed!");
$val = mysql_fetch_array($ordet);
echo "<table width='100%' cellpadding='5'>";
echo "<tr>";
echo "<td bgcolor='#FFFFD7' colspan='2'><b>";
echo "Sökresultat:</b></td></tr>";
	if (!$val['ordet']){
	echo "<tr><td bgcolor='#FFFFD7'><b><font color='red'>";
	echo "Inga träffar!</b> - Ordlistan har inga ord som börjar på $bokstav.</font>";
	echo "</td></tr></table>";
	}
		else{
			while($val = mysql_fetch_array($ordet)) {
			echo "<tr><td bgcolor='#FFFFD7' valign='top' width='20%'><b><font color='red'>";
			echo $val['ordet'];
			echo "</font></b></td>";
			echo "<td bgcolor='#FFFFD7' width='80%'>";
			echo $val['texten'];
			echo "</td></tr>";
			}
		}
	echo "</table>";
unset ($conn);
}

Resultatet av denna kod blir endast en post trots att det finns fler.

/webb

Medlem sedan juni 20001 251 inlägg
#2

Byt

$sql = "SELECT * FROM ordlista WHERE ordet LIKE '$bokstav%'";

mot

$sql = "SELECT * FROM ordlista WHERE ordet LIKE '%$bokstav%'";

------------------
SteveNet

Medlem sedan dec. 1999826 inlägg
#3

Nej det fungerar tyvärr inte (redan testat).

Det är inte själva while:en som det är fel på eller? Jag får ju upp en(1) post både när jag använder mitt och stevenets förslag.

Detta håller så smått på att ge gråa hår ( och det är man känslig för i min ålder ;) )

/webb

Medlem sedan dec. 200012 464 inlägg
#4

Innan din while loop så har du ett anrop till mysql_fetch_array för att kolla om det finns data. Det anropet hämtar första posten och sen kommer du in i while-loopen och den hämtar då andra posten som sedan skrivs ut.
Så istället för att anropa mysql_fetch_array så kan du använda


if (!mysql_num_rows($result)) {
   echo "inga träffar \n";

} else {
  while($val = mysql_fetch_array($ordet)) {
Medlem sedan dec. 1999826 inlägg
#5

LarsG,

Nedan är koden med dina förslag ( som jag uppfattade dem ), men jag får fortfarande bara fram en post :l

$sql = "SELECT * FROM ordlista WHERE ordet LIKE '$bokstav%'";
$ordet = mysql_query($sql) or die("Select Failed!");
echo "<table width='100%' cellpadding='5'>";
echo "<tr>";
echo "<td bgcolor='#FFFFD7' colspan='2'><b>";
echo "Sökresultat:</b></td></tr>";
	if (!mysql_num_rows($ordet)) {
	echo "<tr><td bgcolor='#FFFFD7'><b><font color='red'>";
	echo "Inga träffar!</b> - Ordlistan har inga ord som börjar på $bokstav.</font>";
	echo "</td></tr>";
	}
		else{
			$val = mysql_fetch_array($ordet);
			while($val = mysql_fetch_array($ordet)) {
			echo "<tr><td bgcolor='#FFFFD7' valign='top' width='20%'><b><font color='red'>";
			echo $val['ordet'];
			echo "</font></b></td>";
			echo "<td bgcolor='#FFFFD7' width='80%'>";
			echo $val['texten'];
			echo "</td></tr>";
			}
		}
	echo "</table>";

/webb

Medlem sedan dec. 200012 464 inlägg
#6
$sql = "SELECT * FROM ordlista WHERE ordet LIKE '$bokstav%'";
$ordet = mysql_query($sql) or die("Select Failed!");
echo "<table width='100%' cellpadding='5'>";
echo "<tr>";
echo "<td bgcolor='#FFFFD7' colspan='2'><b>";
echo "Sökresultat:</b></td></tr>";
if (!mysql_num_rows($ordet)) {
echo "<tr><td bgcolor='#FFFFD7'><b><font color='red'>";
echo "Inga träffar!</b> - Ordlistan har inga ord som börjar på $bokstav.</font>";
echo "</td></tr>";
}
else{

[b]// denna rad skall bort helt 
// $val = mysql_fetch_array($ordet);
//[/b]

while($val = mysql_fetch_array($ordet)) {
echo "<tr><td bgcolor='#FFFFD7' valign='top' width='20%'><b><font color='red'>";
echo $val['ordet'];
echo "</font></b></td>";
echo "<td bgcolor='#FFFFD7' width='80%'>";
echo $val['texten'];
echo "</td></tr>";
}
}
echo "</table>";

Så tänkte jag

Medlem sedan dec. 1999826 inlägg
#7

LarsG, ditt namn är skrivet med STORA bokstäver på väggen framför mig - med guldpenna :e

Det fungerar - Ett stort tack :)

/webb

Medlem sedan dec. 200012 464 inlägg
#8

Man kan ju inte riskera att du får gråa hår.

288 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
150 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)