webForumDet fria alternativet

database fält?

28 svar · 1 383 visningar · startad av vagann

vagannMedlem sedan juli 2011167 inlägg
#1

hej

jag vill göra att så användare ska kunna välja en utav de altranativen (med hjälp av <select>) och sedan spara det i database...

för input type="text" har jag gjort som följande ....

echo 'namn:<br />';
echo '<input type="text" name="namn" value="'.$userinfo['namn'].'" />';

//-----

$namn = mysql_real_escape_string($_POST['namn']);

// uppdaterar databasen när man sparar 

mysql_query("UPDATE `members` SET  `namn` = '". $namn ."', WHERE `id` = '". $_SESSION['id'] ."'") or die(mysql_error());

men hur ska jag göra när det gäller <select>.... tex:

echo ' test?:<br />
<select name="tester: " >
  <option value="1">test1</option>
  <option value="2">test2</option>
</select>';

hur gör man för att spara värdet i databasen ?

voigtann1Medlem sedan juni 20018 810 inlägg
#2

ändra $_POST['namn'] till $_POST['testar'], eller vad menar du?

vagannMedlem sedan juli 2011167 inlägg
#3

jag har redan testat det men det funkar inte , det jag vill gör är att när man väljer en av options ska det sparas in i databasen

voigtann1Medlem sedan juni 20018 810 inlägg
#4

namnet skall vara "tester" inte "tester: ":

http://php.voigt.se/sandbox/wf/vagann/select.php

<?
	if(isset($_POST['tester'])) {
		echo "Värdet: " . $_POST['tester'];
	}
?>

<form action="select.php" method="post">
<?
echo ' test?:<br />
<select name="tester">
  <option value="1">test1</option>
  <option value="2">test2</option>
</select>';
?>
	<input type="submit">
</form>
vagannMedlem sedan juli 2011167 inlägg
#5

funkar utmärkt , men skulle vara bra om det kunde visa den valda alternativen istället för test1 som visas hela tiden,oberoende av valet ... brukar använda

$userinfo['testar']

för att skriva ut värdet från databasen

voigtann1Medlem sedan juni 20018 810 inlägg
#6

Kolla det skriv ut en fråga på varje option och sätt den till checked om den har samma värde som option värdet är

vagannMedlem sedan juli 2011167 inlägg
#7

hmm , jag förstår inte riktigt hur du menar men ska försöka förklara hur jag tänkte ...

<select>
$option = $userinfo['testar']  ;

  <option<?php if($option = "1" ){echo 'selected="selected"'} ?> value ="1">test1</option>
  <option <?php if($option = "2"){ echo 'selected="selected"'} ?>value ="2">test2</option>
 </select>

$option innehåller värdet från databasen ... tänker jag rätt ?

@ndersMedlem sedan juni 200026 914 inlägg
#8

Jag antar att det där är lite pseudo-kod, men:

Det ska vara == i jämförelserna (if-satserna).
Och kolla av dina mellanslag i <option>-koden.

vagannMedlem sedan juli 2011167 inlägg
#9

nu har jag fixat det med jämförelserna men ändå så blir sidan tom , det måste vara lite fel i php delen

echo  $option = $userinfo['testar'];
echo' test?:<br />
    <select name="testar">
        <option <?php if($option == "1" ){echo 'selected="selected"';} ?> value="1">test1</option>
        <option <?php if($option == "2" ){echo 'selected="selected"';} ?> value="2">test2</option>
    </select>';
@ndersMedlem sedan juni 200026 914 inlägg
#10

Du blandar apostrofer och kontext-switchar (<?php ... ?>) hejvilt. Jag tror det är lite tydligare om du gör det så enkelt som möjligt för dig. Du har lite echo på fel ställe också, till exempel på den översta raden.

<?php
$option = $userinfo['testar'];
?>
    <select name="testar">
        <option '<?php if($option == "1" ){ echo 'selected="selected"'; } ?>' value="1">test1</option>
        <option '<?php if($option == "2" ){ echo 'selected="selected"'; } ?>' value="2">test2</option>
    </select>
voigtann1Medlem sedan juni 20018 810 inlägg
#11

eller:

<?
$option = $userinfo['testar']; 

echo ' test?:<br />
<select name="tester">
  <option value="1" '.($option == "1" ? ' checked="checked"' : '').'>test1</option>
  <option value="2" '.($option == "2" ? ' checked="checked"' : '').'>test2</option>
</select>';
?>
vagannMedlem sedan juli 2011167 inlägg
#12

gjorde så men det funkade inte ...

<?php 
$option = $userinfo['testar']; 
?> 
echo' test?:<br />
          <select name="testar"> 
        <option '<?php if($option == "1" ){ echo 'selected="selected"'; } ?>' value="1">test1</option> 
        <option '<?php if($option == "2" ){ echo 'selected="selected"'; } ?>' value="2">test2</option> 
    </select>';

jag måste ha apostofer innan <?php annars kommer det att läsas som html kod .... voigtann , hur tänkte du med checked="checked" ? , hur funkar de till

@ndersMedlem sedan juni 200026 914 inlägg
#13

gjorde så men det funkade inte ...

På vilket sätt funkar det inte? Har du tittat på den resulterande html-koden? Då brukar man få en ledning i vad man gjort fel...

jag måste ha apostofer innan <?php annars kommer det att läsas som html kod

Nej. Då har du gjort något fel (med kontext-switcharna möjligen?). Du kanske måste visa mer kod för att vi ska förstå vad du gör fel.

Jag blev dock lite bortkollrad av alla apostrofer och annat - jag har redigerat mitt inlägg.

mvh

vagannMedlem sedan juli 2011167 inlägg
#14
elseif (isset($_GET['account1']))
{

echo '<form action="page.php?action=UserSettings&account2" method="post">';

$option = $userinfo['testar']; 
echo' test?:<br />
          <select name="testar"> 
        <option value="1" '.if($option == "1" ){ echo 'selected="selected"'; }.'>test1</option>
		<option value="2" '.if($option == "2" ){ echo 'selected="selected"'; }.'>test2</option>
    </select>';
   

echo 'namn:<br />';
echo '<input type="text" name="name" value="'. $userinfo['name'] .'" />';

echo '<input type="submit" value="Spara" />';
echo '</form>';

}

så här ser koden ut just nu , när jag går på sidan så blir den bara tom .... det är så jobbigt med att sidan blir tomt istället för att visa php error :/

voigtann1Medlem sedan juni 20018 810 inlägg
#15
<?
	if(isset($_POST['tester'])) {
		echo "Värdet: " . $_POST['tester'];
	}
?>

<form action="select.php" method="post">
<div>
<?
echo ' test?:<br />
<select name="tester">
  <option value="1">test1</option>
  <option value="2">test2</option>
</select>';

?>
</div>
<div>
<?
$option = $_POST['tester2']; 

echo '
<select name="tester2">
  <option value="1" '.($option == 1 ? ' selected="selected"' : '').'>test1</option>
  <option value="2" '.($option == 2 ? ' selected="selected"' : '').'>test2</option>
</select>';

?></div>
	<input type="submit">
</form>

använd iif() frågan.. är betydligt enklare, vilken datatyp är fältet i databasen? är det en sträng så måste du använda dig av " annars (i detta exemplet så är tester2 nummer, då kollar vi efter ett tal).

eller sätt integer till en sträng:

elseif (isset($_GET['account1']))
{
	$option = strval($userinfo['testar']);
	echo '<form action="page.php?action=UserSettings&account2" method="post">';
	echo 'test?:<br />
			<select name="testar"> 
				<option value="1"'.($option == "1" ? ' selected="selected"' : '').'>test1</option>
				<option value="2"'.($option == "2" ? ' selected="selected"' : '').'>test2</option>
			</select>';
	echo 'namn:<br />';
	echo '<input type="text" name="name" value="'. $userinfo['name'] .'" />';
	echo '<input type="submit" value="Spara" />';
	echo '</form>';
}
vagannMedlem sedan juli 2011167 inlägg
#16

ja , databas fältet är en sträng , för jag hade tänkte ha ord ... använde nummer bara för testa testa metoden... testade med att ha

$option = $userinfo['testar']; 
echo' test?:<br />
          <select name="testar"> 
        <option value="1" '.($option == 1 ? ' selected="selected"' : '').'>test1</option>
  <option value="2" '.($option == 2 ? ' selected="selected"' : '').'>test2</option>
    </select>';

nu syns sidan och jag har möjlighet att ändra värdet i databasen , och sedan visa det ...
problemet är att det inte visar den valde alternativen....

voigtann1Medlem sedan juni 20018 810 inlägg
#17

när uppdatera du värdet och när hämta du $userinfo? uppdatera du innan du hämta $userinfo så bör den ju hämta den nya datan, annars inte vad säger din källkod, vilken bli selected när du visa vad php-koden generera?

(ändrade koden ovan för att konvertera nummer till strängar)

vagannMedlem sedan juli 2011167 inlägg
#18

där så , när det gäller att uppdatera databasen och sedan visa värdet så funkar den som den borde ... men problemet är bara att den inte selekterar(selected="selected") den valda alternativen....

php-koden generera denna html kod

 <select name="testar"> 
        <option value="1" >test1</option>
  <option value="2" >test2</option>
    </select>
voigtann1Medlem sedan juni 20018 810 inlägg
#19

se till att det är rätt datatyp när du kolla efter den, en 1 i nummer är inte samma sak som en "1" i en sträng (databas typ)

vagannMedlem sedan juli 2011167 inlägg
#20

datatypen i databasen är varchar(100)...

för noggrannhetsskull testade jag med bokstäver istället för nummer

$option = strval($userinfo['testar']);
echo' test?:<br />
          <select name="testar"> 
        <option value="test1"'.($option == "test1" ? ' selected="selected"' : '').'>test1</option>
        <option value="test2"'.($option == "test2" ? ' selected="selected"' : '').'>test2</option>
    </select>';

genererar fortfarande samma html kod

131 ms totalt · 3 externa anrop · cache AV · v20260731051352-full.56cc9887
0 ms — hämta statistik (cache)
0 ms — hämta forumlista (cache)
128 ms — hämta tråd, inlägg och bilagor (db)