V vagann Medlem sedan juli 2011 171 inlägg Frågan 2 sep. 2012 20:08 #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 ?
ändra $_POST['namn'] till $_POST['testar'], eller vad menar du?
V vagann Medlem sedan juli 2011 171 inlägg 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
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>
V vagann Medlem sedan juli 2011 171 inlägg 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
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
V vagann Medlem sedan juli 2011 171 inlägg 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 ?
@nders Medlem sedan juni 2000 32 967 inlägg 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.
V vagann Medlem sedan juli 2011 171 inlägg 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>';
@nders Medlem sedan juni 2000 32 967 inlägg 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>
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>';
?>
V vagann Medlem sedan juli 2011 171 inlägg 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
@nders Medlem sedan juni 2000 32 967 inlägg
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
V vagann Medlem sedan juli 2011 171 inlägg 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 :/
<?
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>';
}
V vagann Medlem sedan juli 2011 171 inlägg 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....
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)
V vagann Medlem sedan juli 2011 171 inlägg 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>
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)
V vagann Medlem sedan juli 2011 171 inlägg 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