no12Medlem sedan sep. 200240 inlägg Jag har på en sida ett inmatningsformulär. Detta formulär skapas dynamiskt av php beroende på vilka värden som finns i databasen. Jag vill kolla att användaren har fyllt i allt i formuläret m ha javascript innan jag skickar det vidare till den sida som sätter in allt i databasen.
Formuläret ser ut så här :
echo "<form name='allquestions' method='post' onSubmit='return validateform();' action='$PHP_SELF'>";
while ($inqtype=mysql_fetch_array($result1)) {
//echo "RubrikID: $inqtype[0] = FrågaID: $inqtype[2]<br>";
if ($inqtype[0] == $inqtype[2]) { // kollar så att rubriken och frågan har samma id, om inte så hoppar den vidare till nästa id.
if ($temp != $inqtype[1]) { // Kollar om rubrik redan är utskriven för frågan.
echo "<hr width='400' align='left'>";
echo "<H4>$inqtype[1]</H4>"; // Rubrik
$temp = $inqtype[1];
}
echo "<b>$inqtype[3]</b><br>"; // Fråga
}
else {
continue;
}
if ($inqtype[5] == "alt") { //om det är en alternativ-fråga; skriv ut alternativen
$sql2 = "SELECT * FROM Question_alternative WHERE QID = '$inqtype[4]'";
$result2 = queryDB($sql2, $link);
while ($alternative=mysql_fetch_row($result2)) {
for ($i=2; !empty($alternative[$i]); $i++) { // skriver ut så många alternativ som man har angett för frågan.
$j = ($i - 1);
echo "<input type='radio' name='Alt[$inqtype[4]]' value='alt$j'>$alternative[$i]<br>"; echo "<input type='hidden' name='alt_number' value='$inqtype[4]'>";
}
}
echo "<p>";
}
echo "<input type='submit' name='send' value='Skicka svar'>";
echo "</form>";
I min javascripts-funktion (validateform) har jag provat div. olika metoder för att komma åt de variabler som finns i formuläret men jag lyckas inte. Hur ska jag skriva för att komma åt dessa??
Har provat med denna syntaxen :
var jsvariabel = "<?php echo ("$Alt[$inqtype[4]]"); ?>";
men det vill inte fungera. Nån som vet hur man gör eller har nån bättre idé? Tacksam för svar!
no12Medlem sedan sep. 200240 inlägg Inte nån som har en idé??
Skulle vara mycket tacksam för svar.
Kolla in: http://www.javascript.nu/ du kanske hittar något här!!!
Jo du, varför detta inte fungerar:
var jsvariabel = "<?php echo ("$Alt[$inqtype[4]]"); ?>";
här ger du en variabel ett värde, men det du vill är att en variabel ska kollas om den har något värde och jag vet inte riktigt hur man i javascript kollar om ett text-fält eller liknande har något värde om man inte känner till dess namn! :(
psMedlem sedan juni 2000841 inlägg Med validation brukar jag göra så att om man inte har fyllt i allt korrekt, så kommer man tillbaka till den sidan där man fyllde i, och de val man har gjort är kvar, och så får personen fylla i resterande information.
Så kan man skriva ett litet meddelande ovanför om att dom inte fyllt i allt osv...
JavaScript kan väl vara bra nån gång, men ställer bara till trassel för det mesta.
Kör du valideringen på serversidan så är de mycket "säkrare".
no12Medlem sedan sep. 200240 inlägg Ja, det funkar lika bra det. Men hur gör du för att behålla de värden som användaren redan har fyllt i?? Mina formulär är ganska stora så det är inte så bra om användaren måste fylla i allt på nytt igen ifall han/hon har missat nåt.
Mycket tacksam för svar!
psMedlem sedan juni 2000841 inlägg Eftersom du skickade ett PM om det så får du svar den vägen också ;)
WiZzLeRMedlem sedan juni 2002346 inlägg lol ps... du vet det finns ju andra som oxå vill ha svaret :P
psMedlem sedan juni 2000841 inlägg
WiZzLeR skrev:
lol ps... du vet det finns ju andra som oxå vill ha svaret
Jo helt sant tänkte väl inte riktigt på det.. :)
Postar det jag skickade till no12:
Tjenare!
Du kan göra så att på den sidan som du ska validera om användaren har fyllt i uppgifterna (lämpligtvis samma sida som där användaren fyller i uppgifterna första gången) så gör du så att du kollar om variabeln är satt och om den är det så skriver du ut den. Tex om du har en rullista så kan det se ut så här:
kod:
<select name="estimated">
<option value="">
<?
for($i = 1; $i <= 150; $i++)
{
if(isset($estimated) && $estimated == $i)
{
echo "<option value=\"".$i."\" selected>".$i;
}
else
{
echo "<option value=\"".$i."\">".$i;
}
}
?>
</select>
Här har du alltså kvar valet om "$estimated " redan är satt.
Och likaså i en "input-ruta" kan du göra så här:
kod:
<input type="" value="<?if(isset($minVariabel) { echo $minVariabel; ?>">
osv osv..
hoppas du fattar hur jag menar
Tänk på att om du inte gör något åt variablerna och dom innehåller HTML kod eller liknande så kan det "förstöra" sidan. Kolla lite på den här metoden, den fixar det:
http://www.php.net/manual/en/function.htmlentities.php
NiehlsMedlem sedan juli 2002131 inlägg inte för att det har så mycket med den här tråden att göra, men jag skulle bara tipsa om att stänga av register_globals i php.ini och lära sig använda $_POST[], $_GET[] alternativt $_REQUEST[].
allting blir lite säkrare då.
inte för att vara kodpolis.... :stud
psMedlem sedan juni 2000841 inlägg I PHP 4.3.x är det påslaget som default..
no12Medlem sedan sep. 200240 inlägg Ok, hur gör jag för att kolla att alla varibler är satta? Har provat med följande metod :
if ($send) { // om anv. har tryckt på skicka knappen.
foreach ($HTTP_POST_VARS as $key => $value) {
// kolla så att han har fyllt i allt.
if (!isset ($key) || (empty ($value))) {
//echo "key => $key, value => $value";
$missing = "true";
}
}
if (!isset ($missing)) {
// sätt in allt i databasen.
}
else {
// ge felmeddelande
}
Jag skickar ju med en array i mitt formulär (se första inlägget i denna tråd) så variablen $value är ju aldrig tom. Därför sätts $missing aldrig till true. Hur ska jag göra för att lösa detta?