webForumDet fria alternativet

Problem med SQL/PHP-kod

PHPur PHP

20 svar · 1 287 visningar · startad av lillebror

Medlem sedan apr. 20041 597 inlägg
Frågan#1

Jag har fått hjälp med felsökning av min SQL-sats i SQL-forumet. Där verkar inte felet ligga utan det verkar vara något skumt med själva PHP-koden när jag skriver ut resultatet.

$airport = "'ESSA'";

$sqlSelect = "SELECT metar FROM tblMetar WHERE codeID = $airport";
echo $sqlSelect;
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
while($row = mysql_fetch_array($RSobj)) {
echo "".$row[metar]."";
}

Det jag vet helt säkert är at det finns en post med "codeID" = ESSA. Den borde skrivas ut men istället är det helt tomt på skärmen. Någon som kan se vad som är fel?

Medlem sedan sep. 20021 655 inlägg
#2

Bättre med

$airport = "'ESSA'";

$sqlSelect = "SELECT metar FROM tblMetar WHERE codeID = $airport";
echo $sqlSelect;
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
while($row = mysql_fetch_array($RSobj)) {
	echo $row['metar'];
}

?

Medlem sedan apr. 20041 597 inlägg
#3

Jag testade att ändra "echo"-raden längst ned men det är fortfarande helt tomt vid själva utskriften. Jättekonstigt! Det var aldrig några problem när jag använde ASP. :)

Medlem sedan sep. 20021 655 inlägg
#4

Om det är helt tomt tyder det på att det blir något fel tidigare i skriptet, eftersom annars borde din SQL-sats ha skrivits ut.

Hur ser skriptet ut ovanför den koden du visade?

Medlem sedan dec. 1999757 inlägg
#5
$airport = 'ESSA';

$sqlSelect = "SELECT metar FROM tblMetar WHERE codeID = '" . $airport . "'";
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
while($row = mysql_fetch_array($RSobj)) {
	echo $row['metar'] . '<br />' . "\n";
}

Testa den. Skippade din echo av sql-frågan för den använder du förmodligen bara i testsyfte antar jag.
Sedan ska ju variabeln $airport köras i sql-frågan vilket den förmodligen inte gör i ditt exempel. Singelfnuttarna ska vara fysiskt placerade i sql-frågan. Såvida du inte explicit efterfrågar dessa förstås.

Medlem sedan apr. 20041 597 inlägg
#6

Här är ett litet större utdrag ur filen med lite mer kod både före och efter aktuell sql-sats...

<!--<div id="meny">
	<?php
	//show_menu($dbHost, $dbUser, $dbPassword, $dbName, $_SESSION["username"]);
	show_menu($_SESSION["username"]);
	?>
	</div>-->

	<div id="metar"><?php
	#ShowMetar(); 

	$airport = "'ESSA'";

	$sqlSelect = "SELECT metar FROM tblMetar WHERE codeID = $airport";
	#echo $sqlSelect;
        $RSobj = mysql_query($sqlSelect) or die (mysql_error());
	
	while($row = mysql_fetch_array($RSobj)) {
	echo $row['metar'];
	}
	?></div>
	<div id="menu"><?php show_menu($_SESSION["username"]);?></div>
	
	<div id="content"> 
	  <!--<div id="content_inline_left">--> 
	    <p class="heading1">Rubrik</p>
Medlem sedan mars 20025 907 inlägg
#7

Och du är säker på att du har några rader i databasen som uppfyller villkoret då?
Prova

$airport = "'ESSA'";
$sqlSelect = "SELECT metar FROM tblMetar WHERE codeID = $airport";
echo $sqlSelect;
$RSobj = mysql_query($sqlSelect) or die (mysql_error());
echo 'Antal träffar: ' . mysql_num_rows($RSobj);
Medlem sedan apr. 20041 597 inlägg
#8

Det står faktiskt noll träffar vilket jag tycker är MYCKET konstigt :e Nu har jag bifogat en bild från tabellen där man klart och tydligt ser att ESSA existerar som en post!

tabell.jpg
Medlem sedan dec. 1999757 inlägg
#9

Och där finns ju inget värde som har 'ESSA' utan det står ESSA

Medlem sedan mars 20025 907 inlägg
#10

Det är inte så att du har två uppsättningar av databasen. En som du tror att du arbetar mot (och där posten finns) och en som du arbetar mot (och där posten inte finns). Har gjort det felet ett par gånger själv ett par gånger :r

Eller det är inte så att du har ett blanksteg eller två efter ESSA metarkolumnen!? Ser nästan ut så på bilden.

Medlem sedan sep. 200436 inlägg
#11
 
$airport = "ESSA";
$sqlSelect = "SELECT metar FROM tblMetar WHERE codeID = '$airport'";

Har du provat nått annat än ESSA?

Medlem sedan sep. 20021 655 inlägg
#12

kjell skrev:

Och där finns ju inget värde som har 'ESSA' utan det står ESSA

Apostroferna är ju bara för att visa att det är en sträng.
Om apostroferna ligger i $airport eller $sqlSelect spelar ingen roll, även om jag också tycker att det är tydligare ifall de ligger i $sqlSelect.

Medlem sedan dec. 1999757 inlägg
#13

Ser att du har rätt här så jag ger mig på den frågan :)

Gör som föreslaget tidigare och sök något annat eller med LIKE istället.
Kan ju smugit sig något "white-space" eller liknande som gör att man inte kan söka exakt.

Medlem sedan apr. 20041 597 inlägg
#14

Det är inte så att du har två uppsättningar av databasen. En som du tror att du arbetar mot (och där posten finns) och en som du arbetar mot (och där posten inte finns). Har gjort det felet ett par gånger själv ett par gånger

Nej. Har endast en databas...

Eller det är inte så att du har ett blanksteg eller två efter ESSA metarkolumnen!? Ser nästan ut så på bilden.

Kontrollerade det i databasfältet och det finns inga mellanslag efter ex. ESSA.

I skrivandets stund prövade jag med följande sql-sats:

$sqlSelect = "SELECT metar FROM tblMetar WHERE codeID LIKE '%ESSA%'";

Detta verkade göra susen för nu fick jag ut ESSA 251150Z 28004KT 240V310 CAVOK 13/00 Q1016 ALL RWYS DAMP 11-25 PCT BA GOOD NOSIG=

Jag förstår verkligen inte varför jag måste använda LIKE för att exempelvis lyckas få ut ESSA. Ska det inte fungerar med codeID = '$airport' också?

:)

Medlem sedan mars 20025 907 inlägg
#15

lillebror skrev:

Ska det inte fungerar med codeID = '$airport' också?

Jo, om codeID innehåller exakt det som $airport innehåller. Inga extra inledande/avslutande blanksteg eller liknande får finnas (vilket jag fortfarande misstänker att det gör). Kan du inte exportera tabellen och klistra in den här?

Medlem sedan apr. 20041 597 inlägg
#16

I http://www.webforum.nu/showthread.php?s=&forumid=23&threadid=122272 kan man läsa om ursprungsproblemet jag hade.

Kortfattat kan man säga att jag ville få in väderinformationen för olika flygplatser i Sverige från Luftfartsverkets hemsida. De producerade en sida med denna METAR enligt ett visst format så med hjälp av regexp och ett uttryck till det så har jag lyckats få ut den data jag vill ha.

Möjligtvis skulle dessa osynliga tecken kanske försvinna om man använde sig av TRIM eller motsvarande?

Medlem sedan mars 20025 907 inlägg
#17

lillebror skrev:

Möjligtvis skulle dessa osynliga tecken kanske försvinna om man använde sig av TRIM eller motsvarande?

Ja det bör de göra. Kör trim på värdena innan du stoppar in dem i databasen.

Medlem sedan apr. 20041 597 inlägg
#18

När jag tittar mer noggrant i metar.php så ser jag följande:

INSERT INTO tblMetar (codeID, metar) VALUES (' ESNO', ' ESNO 251350Z 32009KT CAVOK 09/M01 Q1014=')
INSERT INTO tblMetar (codeID, metar) VALUES (' ESNQ', ' ESNQ 251350Z VRB02KT 9999 SCT014 BKN043 03/00 Q1014=')
INSERT INTO tblMetar (codeID, metar) VALUES (' ESNS', ' ESNS 251350Z 36006KT CAVOK 08/M00 Q1014=')
INSERT INTO tblMetar (codeID, metar) VALUES (' ESNU', ' ESNU 251350Z 34006KT 9999 BKN049 09/M01 Q1014 14CLRD//=')
INSERT INTO tblMetar (codeID, metar) VALUES (' ESNY', ' ESNY 251350Z AUTO 31010KT 9999 FEW053 11/02 Q1016=')
INSERT INTO tblMetar (codeID, metar) VALUES (' ESOE', ' ESOE 251350Z AUTO 21007KT 9999 NSC 13/05 Q1017 RWY 19 CLEAR and DRY BA GOOD=')

Här ser man klart och tydligt att det är ett mellan slag längst till vänster i båda strängarna....attans också! :e

Jaja...alltid har man lärt sig något! :birp

Medlem sedan apr. 20041 597 inlägg
#19

Nu fungerar det att använda codeID = "ESSA" :) Det var mellanrummen som spökade!

Medlem sedan mars 20025 907 inlägg
#20

lillebror skrev:

....attans också! :e

Surt du §e

137 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)