webForumDet fria alternativet

Problem att läsa in multipla värden från databas i formulär

PHP

3 svar · 251 visningar · startad av lillebror

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

Hej!

Jag visste inte riktigt i vilket av forumen PHP och HTML som jag skulle posta i eftersom det berör båda. Men då jag känner problemet ligger mer åt PHP-hållet fick det bli här.

Läget är följande. Jag har en sida med inställningar som varje användare kan konfigurera. På denna sida finns det fyra checkboxar som kan fyllas i (olika flygbehörigheter man kan ha). Dessa värden lagras och hämtas från en databas. Nu har jag dock stora problem att "loopa" ut dessa värden i mitt formulär. Vet inte riktigt vilken teknik jag ska använda mig av. Foreach och While har jag testat.

Så här ser koden ut där jag hämtar informationen ut:

<?php 
	$RSobj = showUserData($_SESSION["username"]);
	$RSobj_rating = showUserRatings($_SESSION["uid"]);
?>

Så här ser koden ut för formuläret:

<tr style="background-color: #F1EEE9;">
		<td style="text-align: right;background-color: #F1EEE9; padding: 5px 0 5px 5px;"><label for="ratings">Behörigheter:</label></td>
		<td style="padding-bottom: 5px;">&nbsp;</td>
		<td style="background-color: #c4c4c4; padding: 5px 0 5px 15px;">
		
		<?php if(mysql_num_rows($RSobj_rating) <> 0) { ?>
				<input type="checkbox" name="ratings[]" value="1" <?php foreach($RSobj_rating['ratingID'] as $value) { if($value == '1') { echo "CHECKED"; } } ?>>&nbsp;Single Engine Piston (SEP)<br />
				<input type="checkbox" name="ratings[]" value="2" <?php foreach($RSobj_rating['ratingID'] as $value) { if($value == '1') { echo "CHECKED"; } } ?>>&nbsp;Sjö<br />
				<input type="checkbox" name="ratings[]" value="3" <?php foreach($RSobj_rating['ratingID'] as $value) { if($value == '1') { echo "CHECKED"; } } ?>>&nbsp;Multi Engine<br />
				<input type="checkbox" name="ratings[]" value="4" <?php foreach($RSobj_rating['ratingID'] as $value) { if($value == '1') { echo "CHECKED"; } } ?>>&nbsp;IR<br />
				<?php
			 } else { ?>
				<input type="checkbox" name="ratings[]" value="1">Single Engine Piston (SEP)<br />
				<input type="checkbox" name="ratings[]" value="2">Sjö<br />
				<input type="checkbox" name="ratings[]" value="3">Multi Engine<br />
				<input type="checkbox" name="ratings[]" value="4">IR<br />
		
		<?php } ?>
		</td>
</tr>

Något förslag på lösning? :OO

Medlem sedan aug. 20002 975 inlägg
#2

Hur lagrar du dina värden? Vilket format m.m.

Hur ser funktionen showUserRatings() ut ?

Medlem sedan apr. 20041 597 inlägg
#3

Matte skrev:

Hur lagrar du dina värden?

Jag lagrar dessa värden som heltal låt säga från 1-9 beroende på hur många alternativ (checkboxar) jag har.

Matte skrev:

Hur ser funktionen showUserRatings() ut ?

Så här:

function showUserRatings($ID) {
	
	$sqlSelect = "SELECT ratingID FROM tblmemberratings WHERE memberID = $ID";
	$RSobj = mysql_query($sqlSelect) or die (mysql_error());

	return $RSobj;
}

Kontentan av detta är ju att det kan komma ex. 4 st "ratingID" vid en körning. Det är detta jag måste hantera och loopa ut i formuläret för att kunna bocka för de alternativ som redan är valda och finns sparade i databasen.

Medlem sedan aug. 20002 975 inlägg
#4

Om jag förstod din tabellstruktur rätt så borde det gå att göra så här:

Ditt formulär:

$input = array(
  1 => array('Single Engine Piston (SEP)', ''),
  2 => array('Sjö', ''),
  3 => array('Multi Engine', ''),
  4 => array('IR', '')
);

$sqlSelect = "SELECT ratingID FROM tblmemberratings WHERE memberID = {$_SESSION['uid']}";
$RSobj = mysql_query($sqlSelect) or die (mysql_error());

while ($row = mysql_fetch_assoc($result)) {
   $input[$row['ratingID']][1] = ' checked="checked"';
}

foreach ($input as $index => $val) {
   echo "<input type=\"checkbox\" name=\"ratings[]\" value=\"$index\"$val[1] />$val[0]<br />\n";
}

Eller:

$input = array(
  1 => 'Single Engine Piston (SEP)',
  2 => 'Sjö',
  3 => 'Multi Engine',
  4 => 'IR'
);

$sqlSelect = "SELECT ratingID FROM tblmemberratings WHERE memberID = {$_SESSION['uid']}";
$RSobj = mysql_query($sqlSelect) or die (mysql_error());

$ratings = array();

while ($row = mysql_fetch_assoc($result)) {
   $ratings[] = $row['ratingID'];
}

foreach ($input as $index => $val) {
   $checked = in_array($index, $ratings) ? ' checked="checked"', '';
   echo "<input type=\"checkbox\" name=\"ratings[]\" value=\"$index\"$checked />$val<br />\n";
}

Och när du sparar formuläret:

$sql = "DELETE FROM tblmemberratings WHERE memberID = {$_SESSION['uid']}";
mysql_query($sql) or die("SQL: $sql <br>".mysql_error());

if (isset($_POST['ratings'])) {

   foreach ($_POST['ratings'] as $rating) {
      $values[] = "({$_SESSION['uid']}, '$rating')";
   }
   
   $sql = "INSERT INTO tblmemberratings (memberID, ratingID) ".implode(", ", $values);
   mysql_query($sql) or die("SQL: $sql <br>".mysql_error());

}
272 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)