Steady skrev:
Testa med
while ($rad = mysql_fetch_array($result)) {
Skulle tipsa samma sak....
Ta bort " innan och efter $result
29 svar · 513 visningar · startad av Thistel · sida 2 av 2
Steady skrev:
Testa med
while ($rad = mysql_fetch_array($result)) {
Skulle tipsa samma sak....
Ta bort " innan och efter $result
Får fel meddelande ändå. "Warning: Supplied argument is not valid MySQL result resourse" på raden while ($rad = mysql_fetch_array($result)) {
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);
?>
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.
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 ) )
{
...
}
}
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.
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...
Jag testade jawbreakers variant men det funka inte..testade att modifiera det lite men fick samma fel som tidigare då.
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.
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.