Volledige versie bekijken : Select option via mysql



Emtec
14 September 2009, 14:58
Ik ben een php site aan het ontwerpen. Hierop probeer ik hetvolgende te bereiken:

Tijdens de registratie moet de gebruiker aangeven of hij actief is binnen 1 van de aangegeven sectoren. Hiervoor maak ik gebruik van 'select' met ja en nee antwoorden.



<label for="sector1">Sector1</label>
<select name="sector1" id="select8">
<option value="Nee" selected>Nee</option>
<option value="Ja">Ja</option>
</select><br />


Deze waardes worden weggeschreven in de database.

Vervolgens wil ik de gebruikers de mogelijkheid geven om hun keuze aan te passen. Hiervoor laad ik hun originele antwoord uit de database.. Maar hoe kan ik dit originele antwoord als selected laten verschijnen op het aanpassingsformulier? Zodat ze niet telkens alle activiteiten moeten aanpassen.

Emtec
14 September 2009, 15:17
<? if($row_settings['sector1'] == Ja) {
$opt1="selected";
} else {
$opt2="selected";
}
?>

<label for="sector1">Sector1</label>
<select name="sector1" id="select8">
<option value="Nee" <? echo $opt2; ?>>Nee</option>
<option value="Ja" <? echo $opt1; ?>>Ja</option>
</select><br />

Dit zou de klus kunnen klaren ;).. maar dan moet ik voor elke sector zo een aparte if else statement aanmaken... en mits het er 29 zijn zou het nogal lang worden. is er een andere methode?

Snakey
14 September 2009, 16:15
Een lijst laten maken van je sectoren waarin je dan datzelfde zal doen en dan met een lus de lijst overlopen. Zo hoef je het maar 1 keer schrijven.

ultddave
14 September 2009, 16:39
- Eerst haal je alle nuttige rijen uit de MySql database.

- Dan haal je rij per rij uit dat resultaat dmv een while lus.

- Dan extract je die rij, zodat je elke 'cel' uit die rij hebt.

- En dan kijk je of die sector == "Ja". ;)

Voorbeeld:



$result = mysql_query("SELECT * FROM `sectoren`);

// $result bevat nu de hele tabel 'sectoren'

while($row = mysql_fetch_array($result)){
{
// $row is nu een rij van $result. Bij elke 'loop' wordt de volgende rij genomen.

extract($row);

// Elke cel van $row wordt gesplists. De data zit in de variabele die wordt
// aangemaakt met als naam: de titel van de kolom.
// Voorbeeld: Als je een tabel hebt met een kolom die heet "sector".
// Dan zal de waarde van de cel in die kolom van rij $row, in de variabele
// $sector zitten.

If($sector == "Ja")
$opt1="selected";
else
$opt2="selected";

}


Geen lange code voor nodig zoals je ziet. ;)
Hopelijk is het wat duidelijk. Anders vraag je het maar.

PS: Als het nog sneller moet, dan kan je uiteraard ook gewoon "1" of "0" in je database schrijven. Bij het evalueren van de if test bespaar je dan wat tijd. Maar bij het omzetten van "ja" naar 1 en "Nee" naar 0 dmv een If Else test, verlies je dan weer tijd. ;)

PS: Je moet de array $row niet extracten. Als je dat niet doet, bespaar je ook wat tijd. Maar ik vind het overzichtelijker ;).

PS: Damn, Snakey was me voor :D.

Mvg,
Dave

Emtec
17 September 2009, 13:15
Na nog wat proberen heb ik het goed werkend gekregen.. bedankt ;).

Zou je misschien ook een oplossing weten voor het volgende? Het is de bedoeling dat dit script het aantal clicks telt en vervolgens de bezoeker doorverwijst naar de website die in de database staat. Ben er al een tijdje aan aan het prullen :).



<?php
$id=$_GET['id'];
include('dbc.php');
$sql="UPDATE users SET clicks=clicks+1 WHERE id='$id'";
$res=mysql_db_query($dbname,$sql,$link);
$rs_link = mysql_query("select website from users where id=$id");
$row_settings = mysql_fetch_array($rs_link);

header("Location: $row_settings['website'] ");

?>


Al verschillende vormen uitgetest..

ultddave
17 September 2009, 15:58
De waarde in de Database aanpassen lukt vermoed ik?

Voor het forwarden naar een andere pagina, gebruik ik meestal JavaScript.
Kan zijn dat het met PHP ook gaat, maar heb het nog nooit gedaan/geprobeerd ;).



<script type="text/javascript">

function wait5()
{
window.setTimeout("forward()",5000);
}

function forward()
{
top.location = "http://www.xxxx.com/test.html";
}
</script>



Je moet dus de functie wait5() aanroepen na het updaten van de database. Wait5, wacht 5 seconden en stuurt je dan naar de gegeven website normaal gezien. ;)

Dat kan je uiteraard aanpassen of weglaten.

Nadeel: Ik denk niet dat je kan forwarden naar andere websites. Dan krijg je zo een IE balk bovenaan de pagina die zegt dat wegens beveiliging, scripts en active-x besturingselementen zijn uitgeschakeld.

PS: Ik denk dat alleen IE8 dit doet.

Als je forward naar een file bijvoorbeeld; "forum.php" op dezelfde server, zou dat zonder probleem moeten gaan.

Mvg,
Dave

- Misschien heeft iemand anders een betere oplossing?

Emtec
17 September 2009, 19:54
Feit is dat het script wel werkt.. voor zolang er gaan php waarde in de header moet worden ingevoegd. Als ik gebruik maak van een echte link werkt het dus wel..

Emtec
17 September 2009, 20:06
Opgelost.. probleem zat hem in de aanhalingstekens (vreemd eig.. zou gezworen hebben dat ik dit de eerste keer had)..



<?php
$id=$_GET['id'];
include('dbc.php');
$sql="UPDATE users SET clicks=clicks+1 WHERE id='$id'";
$res=mysql_db_query($dbname,$sql,$link);
$rs_link = mysql_query("select website from users where id=$id");
$row_settings = mysql_fetch_array($rs_link);

header ('Location: '.$row_settings['website']');

?>


Bedankt voor je reactie ultddave ;)

ultddave
17 September 2009, 20:19
Inderdaad, had het niet gezien :D. (y)

Graag gedaan trouwens. ;)

Dan weet ik dus vanaf nu, dat het ook met php gaat ^^.

Mvg,
Dave