webForumDet fria alternativet

Problem med SQL/PHP-kod

20 svar · 1 287 visningar · startad av lillebror

lillebrorMedlem sedan apr. 20041 687 inlägg
#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?

dectgapMedlem sedan sep. 20021 542 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'];
}

?

lillebrorMedlem sedan apr. 20041 687 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. :)

dectgapMedlem sedan sep. 20021 542 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?

kjellMedlem sedan dec. 1999519 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.

lillebrorMedlem sedan apr. 20041 687 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>
PeeerMedlem sedan mars 20025 362 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);
lillebrorMedlem sedan apr. 20041 687 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
kjellMedlem sedan dec. 1999519 inlägg
#9

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

PeeerMedlem sedan mars 20025 362 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.

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

Har du provat nått annat än ESSA?

dectgapMedlem sedan sep. 20021 542 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.

kjellMedlem sedan dec. 1999519 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.

lillebrorMedlem sedan apr. 20041 687 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å?

:)

PeeerMedlem sedan mars 20025 362 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?

lillebrorMedlem sedan apr. 20041 687 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?

PeeerMedlem sedan mars 20025 362 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.

lillebrorMedlem sedan apr. 20041 687 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

lillebrorMedlem sedan apr. 20041 687 inlägg
#19

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

PeeerMedlem sedan mars 20025 362 inlägg
#20

lillebror skrev:

....attans också! :e

Surt du §e

Genererad på 383 ms · cache AV · v20260730165559-full.f96bc7eb