lillebrorMedlem sedan apr. 20041 687 inlägg
Hej!
Jag håller på och designar ett eget forum just nu och har kommit till ett litet problem. I forumet så finns det en snabbvalsfunktion där man kan välja vilket forum man vill besöka. Eftersom de olika forumen är indelade i olika kategorier så har jag i OPTION-taggen i formuläret loopat ut kategorin och sen de forumen som finns där under. Denna lösning fungerar bra så när som på ett undantag. När en användare väljer något annat än de rödmarkerade alternativen i den bifogade bilden blir det av förklarliga skäl fel i koden eftersom den mottagande funktionen förväntar sig ett forumID som den då aldrig får.
Hur kan man lösa valideringen på något smart sätt? Skulle vilja ha kategorierna kvar om det är möjligt för tydlighetens skull :)
Peter SMedlem sedan dec. 20025 484 inlägg
Exempel: Sätt -1 som värde i de <option>-element som inte skall gå att välja:
<option value="-1">===========</option>
Om "OK"-knappen är till för att skicka iväg besökaren kan du sedan göra så här:
<form onsubmit="return this.elements['namn_på_select'].options[this.elements['namn_på_select'].selectedIndex].value != -1">
Alternativt lägga ovanstående i en funktion. Typ.
lillebrorMedlem sedan apr. 20041 687 inlägg
På det hela taget så fungerar det väldigt bra Peter! :) Tack för hjälpen! Nu får jag inte problemen med felaktiga värden i SQL-frågorna och det är bra.
Dock skulle jag vilja att det inte gick att välja dessa rader med "-1" samtidigt som man klickar på OK-knappen. För användaren kommer bara till ett forum som inte finns i databasen och det känns inte riktigt bra. Kan man lösa det på något sätt?
Peter SMedlem sedan dec. 20025 484 inlägg
Vad menar du med att användaren kommer till ett forum som inte finns? I koden ovan händer ju ingenting om ett ogiltigt val är valt och "OK" trycks ned.
lillebrorMedlem sedan apr. 20041 687 inlägg
Vad jag menar är att det finns inget som stoppar användaren från att klicka på OK-knappen när ett alternativ med value="-1" är valt! :)
Peter SMedlem sedan dec. 20025 484 inlägg
function f(obj){
var elms = obj.form.elements,
opts = obj.options;
elms['namn_på_OK'].disabled = (opts[elms['namn_på_select'].selectedIndex].value == -1);
}
<select onchange="f(this)"...
Om defaultvalet är ogiltigt kan du sätta "OK"-knappen till disabled i HTML-koden.
lillebrorMedlem sedan apr. 20041 687 inlägg
Peter S skrev:
<select onchange="f(this)"...
this - ska det stå så ordagrant eller är det en variabel jag ska sätta dit?
Peter SMedlem sedan dec. 20025 484 inlägg
Det skall stå så. this refererar till <select>-elementet.
lillebrorMedlem sedan apr. 20041 687 inlägg
lillebrorMedlem sedan apr. 20041 687 inlägg
Fungerar klockrent nu. Vilket klippa du är! ;)
lillebrorMedlem sedan apr. 20041 687 inlägg
Denna funktion slutade helt plötsligt att redirecta som den gjorde precis när jag var klar med den. Vet inte riktigt vad jag ställt till med som fått den att ge upp?!:OO Istället för att redirecta till ett annat forum som jag väljer med SELECT-taggen skickar den ut mig till index.php i root-katalogen när det borde vara forumdisplay?forumID=1 exempelvis.
Den mottagande kod jag använder för att hantera formuläret är:
if(trim($_POST['chooseshortcut']) == 'OK') {
$forumdata['forumID'] = trim($_POST['forumshortcutID']);
#echo "FORUM: ".$forumdata['forumID'];
#echo "<script Language='JavaScript'>location.href=('"../forum/forumdisplay.php?forumID=".$forumdata['forumID']."');</script>";
header("Location: ../forumdisplay.php?forumID=".$forumdata['forumID']);
}
Så här ser koden ut i formuläret:
<script language="JavaScript" src="../inc/function.js"></script>
<form action="../inc/include.form.forum.php" method="post">
<?php $RSobj_forum_category = getCategory(); ?>
<table width="100%" cellspacing="0px" cellpadding="0px">
<tr>
<td style="font-size: 10px; font-weight: bold; width: 38%;">Snabbval:</td>
</tr>
<tr>
<td style="width: 38%;">
<SELECT name="forumshortcutID" size="1" onchange="f(this)">
<?php while($forumcategory = mysql_fetch_array($RSobj_forum_category)) {
$RSobj_shortcut = showShortcutForumList($forumcategory['categoryID']); ?>
<OPTION value="-1"><?php echo $forumcategory['title']; ?>
<OPTION value="-1">===============================
<?php while($shortcut = mysql_fetch_array($RSobj_shortcut)) { ?>
<?php if($shortcut['forumID'] == $RSobj_forum['forumID']) { ?>
<OPTION value="<?php echo $shortcut['forumID']; ?>" SELECTED>- <?php echo $shortcut['title'];
} else { ?>
<OPTION value="<?php echo $shortcut['forumID']; ?>">- <?php echo $shortcut['title'];
}
} ?>
<OPTION value="-1">
<?php }
?>
</SELECT>
</td>
<td align="left"><input name="chooseshortcut" type="submit" value="OK" /></td>
</tr>
</table>
</form>
Javascriptet:
function f(obj) {
var elms = obj.form.elements,
opts = obj.options;
elms['chooseshortcut'].disabled = (opts[elms['forumshortcutID'].selectedIndex].value == -1);
}
Någon med skarpa ögon som kan komma på vad det är för fel?!
Peter SMedlem sedan dec. 20025 484 inlägg
Hur ser formulärkoden ut då den skickats till webbläsaren?
lillebrorMedlem sedan apr. 20041 687 inlägg
Jag vill minnas när jag kollade att variabeln och värdet var mottaget korrekt i formulärhanteringsfunktionen. Var det det du syftade på?
Finns det någon funktion som man kan göra en paus med i programkoden för att kunna se vad en echo-sats innehåller för värde? Annars flimrar det bara förbi och man hinner inte se :)
Här är länken till aktuell sida:
http://www.flygfyren.nu/forum/forumdisplay.php?forumID=1
Peter SMedlem sedan dec. 20025 484 inlägg
Vad händer om du kommenterar bort
header("Location: ../forumdisplay.php?forumID=".$forumdata['forumID']);
och skriver ut
$forumdata['forumID']
lillebrorMedlem sedan apr. 20041 687 inlägg
Jag har försökt att remma dem med det går ju så fort så man hinner aldrig se vad variabeln innehåller för värde...
Peter SMedlem sedan dec. 20025 484 inlägg
Jo, men om du kommenterar bort header-raden navigeras du ju inte vidare. Då bör du kunna se vad variabeln innehåller.
lillebrorMedlem sedan apr. 20041 687 inlägg
Jag har ju remmat bort den men jag åker vidare till till index.php ändå x(
Dock upptäckte jag en annan kodsnutt jag har ibörjan av sidorna för att kontrollera att querystringarna är korrekta. De remmade jag tills vidare eftersom om forumID visar sig vara noll kan det vara här processen stannar. Koden är som följer:
<?php
if($_GET['forumID'] == '') {
echo "<script Language='JavaScript'>location.href=('forum.php');</script>";
} else {
$RSobj_thread = getForumThreads($_GET['forumID']);
$RSobj_forum = showActiveForum($_GET['forumID']);
}
?>
lillebrorMedlem sedan apr. 20041 687 inlägg
I den bifogade filen ser man hur som helst att forumID är rätt för respektive forum i select-satsen.
Peter SMedlem sedan dec. 20025 484 inlägg
Värdet i ditt action-attribut i <form>-taggen är ../inc/include.form.forum.php. Skall det vara så?
lillebrorMedlem sedan apr. 20041 687 inlägg
Peter S skrev:
Värdet i ditt action-attribut i <form>-taggen är ../inc/include.form.forum.php. Skall det vara så?
Ja det ska stämma.
Blir så arg för att jag uppenbarligen lyckats förstöra det hela :e Även när jag remmat det mesta åker jag ju raka vägen till index.php...