webForumDet fria alternativet

2 selectboxar

29 svar · 513 visningar · startad av Thistel · sida 2 av 2

SnakesMedlem sedan okt. 2004392 inlägg
#21

Steady skrev:

Testa med

while ($rad = mysql_fetch_array($result)) {

Skulle tipsa samma sak....
Ta bort " innan och efter $result

ThistelMedlem sedan aug. 200470 inlägg
#22

Får fel meddelande ändå. "Warning: Supplied argument is not valid MySQL result resourse" på raden while ($rad = mysql_fetch_array($result)) {

jawbreakerMedlem sedan jan. 2003296 inlägg
#23

Följande kanske fungerar?

<?
$länk = @mysql_connect("localhost", "root")
or die ("Kunde inte ansluta! Är MySQL igång?");
$databas = mysql_select_db("swaf");

$value = '';
$value2 = '';

if ( isset( $_POST['foo'] ) )
	$value = $_POST['foo'];
elseif ( isset( $_POST['flo'] ) )
	$value2 = $_POST['flo'];
?>

<table cellspacing="0" cellpadding="0" >
<?
if ( !empty( $value ) )
{
	$result = mysql_query('SELECT tbl_37.Serial, tbl_colors.Colors, tbl_37_version.Version, tbl_37.In_service, tbl_37.Withdrawn, tbl_unit.Unit, tbl_37.Latest_code, tbl_37.Previous_codes, tbl_status.Status, tbl_37.Note, tbl_37_picture.Picture'
				. ' FROM tbl_37, tbl_colors, tbl_37_version, tbl_unit, tbl_status, tbl_37_picture'
				. ' WHERE ( ( tbl_colors.ColorsID = tbl_37.Colors ) AND ( tbl_unit.UnitID = tbl_37.Unit ) AND ( tbl_status.StatusID = tbl_37.Status ) AND ( tbl_37_picture.Serial = tbl_37.Serial ) AND ( tbl_37_version.VersionID = tbl_37.Version)) AND (( tbl_37.Version =  ' . $value . ' )OR ( tbl_37.Unit = ' .  $value2 . ' ) )  ORDER BY tbl_37.Serial ' )
				;

	while ( $rad = mysql_fetch_array( $result ) )
	{
		$bgColor = ( ++$i & 1 ) ? '#f6f7f7' : '#ffffff';

		echo "<tr bgcolor=\"$bgColor\"> 
		    <td class=\"databastextBold\" width=\"90\" valign=\"top\">Serial</td>
		    <td class=\"faktatext\" width=\"100\" valign=\"top\">".$rad["Serial"]."</td></tr>";
	}
}
?>
</table>
<?
mysql_close($länk);
?>
aasahMedlem sedan mars 20034 471 inlägg
#24

jawbreaker skrev:

Följande kanske fungerar?...

Knappast. Så som det ser ut från början har $value antingen värdet från foo, flo eller osatt. I det senare fallet blir värdet '' (tom sträng). Din variant (som bara fungerar om du lägger till ett else, eftersom inget händer om foo inte är satt) är en krångligare variant.

Snakes däremot har rätt. Förklaring: Funktionen mysql_fetch_array förväntar sig en resource handler, men när du skriver:
mysql_fetch_array("$result")) så får den en strängrepresentation av denna resource-handler, inte "handtaget" själv.
mysql_fetch_array($result) skickar däremot in rätt värde.

jawbreakerMedlem sedan jan. 2003296 inlägg
#25

Knappast. Så som det ser ut från början har $value antingen värdet från foo, flo eller osatt.

Jag var för lat för att läsa hela tråden innan jag skrev mitt svar innan - jag läste egentligen bara inlägget av Thistel ett par rader ovanför mitt inlägg, så det var den koden jag utgick ifrån. Och där har $value inte värdet från antingen foo eller flo, det är en sak som är Oskar. Där har den antingen värdet från foo, eller ingenting alls - flo har ingenting med $value att göra såvitt jag kan se...

Snakes däremot har rätt.

Jodå, han har rätt såtillvida att det inte ska vara citationstecken kring $result i mysql_fetch_array( $result ).
Det ni däremot inte har lagt märke till är att sql-frågan garanterat blir fel då variablerna $value och $value2 aldrig kommer att ersättas med sina respektive värden (eftersom det är enkelfnuttar istället för citationstecken kring sql-frågan). Det fixade jag till i sql-frågan i min tidigare tråd.
Hur som helst så kommer inte $result innehålla något vettigt innan sql-frågan är fixad. Och så är det egentligen vettigt att kolla så att $result faktiskt fått tillbaka ett recordset innan man försöker använda den:

if ( $result )
{
	while ( $rad = mysql_fetch_array( $result ) )
	{
		...
	}
}
aasahMedlem sedan mars 20034 471 inlägg
#26

jawbreaker skrev:

aasah skrev:

Snakes däremot har rätt.

... Det ni däremot inte har lagt märke till är att sql-frågan garanterat blir fel då variablerna $value och $value2 aldrig kommer att ersättas med sina respektive värden (eftersom det är enkelfnuttar istället för citationstecken kring sql-frågan).

Det har ingen betydelse eftersom $value innehåller ett talvärde. $value får sitt värde, tex 5, och sedan konkatineras detta heltal ihop med strängen och vips har vi en sträng med
'tbl_37.Version = 5' i. Vilket är korrekt syntax. Talvärden ska inte ha ' runt sig i SQL, det behöver bara bokstäver och strängar ha.

jawbreakerMedlem sedan jan. 2003296 inlägg
#27

Nu var det ju iofs inte så jag menade. Efter att jag ändrat sql-frågan så ska $value och $value2 konkateneras in ordentligt. Men i frågan som Thistel skrev i inlägget innan mig så gjorde de inte det. Jämför frågorna igen och se skillnaden...

$query = "SELECT $value FROM foo";

och

$query = 'SELECT $value FROM foo';

ger inte direkt samma resultat...

ThistelMedlem sedan aug. 200470 inlägg
#28

Jag testade jawbreakers variant men det funka inte..testade att modifiera det lite men fick samma fel som tidigare då.

aasahMedlem sedan mars 20034 471 inlägg
#29

jawbreakers if(!empty($value)) ställer till problem med hans sätt att skriva. (Eftersom den är tom om det var floo som hade ett värde och inte foo.)

Testa istället:

<?
$länk = @mysql_connect("localhost", "root")
or die ("Kunde inte ansluta! Är MySQL igång?");
$databas = mysql_select_db("swaf");

if ( isset( $_POST['foo'] ) )
   $value = $_POST['foo'];
elseif ( isset( $_POST['flo'] ) )
   $value = $_POST['flo'];
//Om ingen är satt, kommer $value inte att ha ett värde när den används, 
//varför PHP ger den värdet '' (tom sträng)
?>

<table cellspacing="0" cellpadding="0" >
<?
if ( !empty( $value ) ) {
   $result = mysql_query('SELECT tbl_37.Serial, tbl_colors.Colors, tbl_37_version.Version, tbl_37.In_service, tbl_37.Withdrawn, tbl_unit.Unit, tbl_37.Latest_code, tbl_37.Previous_codes, tbl_status.Status, tbl_37.Note, tbl_37_picture.Picture'
				. ' FROM tbl_37, tbl_colors, tbl_37_version, tbl_unit, tbl_status, tbl_37_picture'
				. ' WHERE   tbl_colors.ColorsID = tbl_37.Colors  AND  tbl_unit.UnitID = tbl_37.Unit  AND  tbl_status.StatusID = tbl_37.Status  AND  tbl_37_picture.Serial = tbl_37.Serial  AND  tbl_37_version.VersionID = tbl_37.Version  AND  tbl_37.Version =  ' . $value . ' ORDER BY tbl_37.Serial ' );

   while ( $rad = mysql_fetch_array( $result ) ) {
      $bgColor = ( ++$i & 1 ) ? '#f6f7f7' : '#ffffff';

      echo "<tr bgcolor=\"$bgColor\"> 
          <td class=\"databastextBold\" width=\"90\" valign=\"top\">Serial</td>
          <td class=\"faktatext\" width=\"100\" valign=\"top\">".$rad["Serial"]."</td></tr>";
   }
}
?>
</table>
<?
mysql_close($länk);
?>

Om detta inte heller funkar, lägg SQL-frågan i en variabel och skriv ut den. Då ser du om frågan ser rätt ut, vilket är första förutsättningen.

ThistelMedlem sedan aug. 200470 inlägg
#30

Men med den koden kommer inte funktionen att bli rätt eftersom value hämta då värde i samma tabel oavset vilken select box jag använt. Vitsen är att att kunna via samma sql fråga häta värde ur tabellen beroende på om jag anger värdet för version eller unit.

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