Forum > Övriga serverspråk > PHP
Hejsan.
Som säkert några vet så försöker jag lära mig PHP och det går faktiskt åt rätt håll. Jag har lyckats med saker jag inte trodde jag skulle klara av. Men hust som helst.
Jag vill validera ett formulär. Om man inte kryssat i svar alternativen skall det skrivas ut att man glömt en fråga. Detta fungerar till en viss del.
Jag har just nu sju frågor, om jag svarar på alla frågor utom fråga 3 så kommer det upp att jag inte svarat på den tredje frågan. Men när sidan laddas om så är alla andra frågor nollställda och man tvingas då att svara på allt igen. Det tycker jag är väldigt irrriterande och jag skulle gärna vilja ha lite tips om vad som kan orsaka detta och hur jag löser det.
Min kod finns här: http://www.aspkoll.se/code/Index.asp?id=601
Jag vet att detta inte är den bästa lösningen. Om jag förstått PHP rätt skall det finnas något smidigt inbyggt i PHP som validerar. Men jag har inte kommit igång med det.
Det är också en kodrad som tillhör jQuery Validation där med som ni kan se. Men jag får inte det att fungera heller. Men viktigast just nu är att få valideringen på serversida att fungera och att de övriga besvarade frågorna inte nollställs.
Har ni några tips om hur jag löser detta?
| Skriv utSå här hade jag löst det.
Har förbättrat min kod genom att skapa en klass av formvalideringen.
Spara denna kod i en fil du döper till form_validation.php eller vad du nu döper den till.
http://www.aspkoll.se/code/Index.asp?id=605
Här är själva htmlsidan
http://www.aspkoll.se/code/Index.asp?id=606
EDIT: Såg nu att det var radiofält som ska valideras. Min klass klarar endast textfält. Återkommer när jag har byggt ut den.
Nu har jag löst det..
Det jag gjorde är att lägga till en tom "radio" som är satt som default.
Demo: http://sandbox.chrillemeter.se/formvalidation/
Klassen, FormValidation:
http://www.aspkoll.se/code/Index.asp?id=607
Lägg denna kod längst upp i php-dokumentet för frågeformuläret.
http://www.aspkoll.se/code/Index.asp?id=608
Tack för Chrille. Nu skall jag lägga in detta och se om jag får igång det. Jag återkommer med resultat.
Gör det.
Här är koden för min formulärsida
http://www.aspkoll.se/code/Index.asp?id=609
Det gick inte riktigt som planerat. Det är säkert inget fel i koden du skrivit utan det är nog jag som gjort något fel.
Så här ser min HTML del ut.
<div class="evaluation-div">
<b> 1. Fråga nummer ett. </b><br /><br />
<label for="svar1-ja">Ja</label>
<input type="radio" name="strSvar1" id="svar1-ja" value="Ja" <?php if($form->getFormValue('strSvar1') == 'Ja') : ?>checked="checked"<?php endif; ?> />
<label for="svar1-nej">Nej</label>
<input type="radio" name="strSvar1" id="svar1-nej" value="Nej" <?php if($form->getFormValue('strSvar1') == 'Nej') : ?>checked="checked"<?php endif; ?> />
<br />
<?php echo $form->getErrorMessage('strSvar1'); ?>
<br />
<br />
</div>
Och min PHP del ser ut så här:
include_once('form_validation.php');
$form = new FormValidation;
// Fields that have to be validated.
$form->setInvalidateFields(array(
'strSvar1' => array(
'message' => 'Frågan är inte besvarad.'
),
));
if(!empty($_POST)) {
$form->validate();
if($form->validates()) {
// Här sprarar jag allt i databasen.
}
}
Jag får inget felmeddelande och NetBenas säger att allt är ok, alltså inga felvarningar och sånt i programmet.
När jag kör sidan så stannar den vid första radio-knappen. Kollar jag källkoden så har firefox slutat här och det ser ut så här:
<div class="evaluation-div">
<b> 1. Fråga nummer ett.</b><br /><br />
<label for="svar1-ja">Ja</label>
<input type="radio" name="strSvar1" id="svar1-ja" value="Ja"
Sista raden i detta kodstycke är rödmarkerad i firefox visa källkod så någon stans här bör ju felet vara. Men vad är det som är fel?
Du har glömt att lägga till en radioval som är blankt.
<input type="radio" name="strSvar1" value="" checked="checked" />Eller så sätter du att ena svarsalternativet som standardsvar.
Om man inte väljer något av svarsalternativen, returneras inget från radio och checkboxar.
Därför måste det finnas ett alternativ som är default.
Gjorde ett demo av din sida, http://sandbox.chrillemeter.se/form...tion/lpmaxi.php
Jag kan inte ha en tomt radioval. Jag måste sätta ja eller nej som markerad som standardsvar i så fall.
edit.
Jag testade även att köra med ett blank radio val men sidan slutar att skriva ut resten av sidan och nu slutar den här:
<form method="post" action="medarbetare-evaluation.php" id="evaluation-form">
<fieldset>
<legend>Utvärdering</legend>
<div class="evaluation-div">
<b> 1. Frågan </b><br /><br />
<input type="radio" name="strSvar1" value="" checked="checked" />
<input type="radio" name="strSvar1" id="svar1-ja" value="Ja" />
<label for="svar1-ja">Ja</label>
<input type="radio" name="strSvar1" id="svar1-nej" value="Nej" />
<label for="svar1-nej">Nej</label>
<br />
Om du sätter Ja eller Nej som standardval, behöver du inte kolla om radiovalet är tomt, då det alltid har ett värde.
Att du får en vit sida när du skriver ut error message, är för mig en gåta.
Hur ser all kod ut. om du har möjlighet att posta den så gör det, så kan man analysera bättre.
Eftersom jag har satt alla frågor som har radio knappar med ett standradvärde ikryssat så behöver jag inte validera dom. Men det ser lite dumt att att redan valen är gjorda men det får va så.
Men din första kod du skrev funkar väl tipp vanliga input-fält och det kommer nog till anvndining i nästa moment i detta grejer jag håller på med.
Men det är fortfarande helt blanka felmeddelande som jag skrev i min andra tråd men det kan vi snacka om där.
Eftersom jag har satt alla frågor som har radio knappar med ett standradvärde ikryssat så behöver jag inte validera dom. Men det ser lite dumt att att redan valen är gjorda men det får va så.
Men din första kod du skrev funkar väl tipp vanliga input-fält och det kommer nog till anvndining i nästa moment i detta grejer jag håller på med.
Men det är fortfarande helt blanka felmeddelande som jag skrev i min andra tråd men det kan vi snacka om där.
JApp, min klass funkar på textfält med.
Ja precis, och om det är ok för dig så kommer jag använda den snart. Men jag fattar ju om det inte är ok. Eftersom det är du som ligger bakom den.
Det är ok. Alltid trevligt när folk får användning för ens kod.