Avatar billede artico Novice
17. september 2007 - 14:04 Der er 10 kommentarer og
1 løsning

Validering af felter fra DB

Hej experter!

Jeg prøver at validere en kontaktform, hvor felterne kommer fra en Mysql database, det går fint med at hente ud og poste formen men jeg vil så gerne kunne validere de felter som jeg på forhånd har markeret i DBén og det er her jeg har problemos med af finde ud af at validere? Her er hvad jeg gør og har:

// DB Forespørgsel

$form_result = mysql_query("SELECT
kontaktformularfelter.id,
kontaktformularfelter.feltnavn,
kontaktformularfelter.infotekst,
kontaktformularfelter.felt_type,
kontaktformularfelter.langde,
kontaktformularfelter.valideres,
kontaktformularfelter.admin_type,
kontaktformularfelter.synlig,
kontaktformularfelter.sort
                     
FROM kontaktformularfelter
ORDER BY kontaktformularfelter.sort
                          ") or die(mysql_error());

if($datarow = mysql_fetch_array($result1))

// Udskriver far DB:

if (mysql_num_rows($form_result) > 0) {
    while($formrow = mysql_fetch_assoc($form_result)) {


// Her dannes de felter der så skal valideres:

echo "    <tr>";
echo "    <td valign=\"top\">";
// Tabel celle overskrift
echo $formrow['feltnavn'];

echo "</td>";
echo " <td valign=\"top\">";
if($formrow['felt_type'] == "text") {
echo "<input type=\"text\" name=\"$formrow[id]\" size=\"$formrow[langde]\">";
}

if($formrow['felt_type'] == "textarea") {

echo " <textarea name=\"$formrow[id]\" rows=\"$formrow[langde]\" cols=\"40\"></textarea>";
}


echo "&nbsp;";

// Validering af felt
if($formrow['valideres'] == "on") {
echo "&nbsp;<img src=\"img/ikoner/ikon_mangler.gif\" alt=\"Feltet skal udfyldes!\" border=\"0\">";
echo "<input type=\"hidden\" name=\"val_$formrow[feltnavn]\" value=\"val\">";
}
echo " </td>";
echo "            </tr>";

// Når jeg poster denne form får jeg følgende:

Array
(
    [2] => Viggo Mortensen
    [val_Navn:] => val
    [3] => Merose
    [val_Adresse:] => val
    [1] => 90210
    [4] => Los anderledes
    [5] => viggo@mortensen.com
    [val_Email] => val
    [6] => Det er en iriterende fejl i formen?
    [Send_besked] => Send besked
    [task] => ok
)


// Som i kan se skal [2] valideres ([val_Navn:]) hvor i  mod [1] og [4] ikke skal valideres

// Jeg har prøvet med f.eks en valideringsform som denne:

if($_POST['feltnavn'] == "" && $_POST[val_Navn:] == "val" )
 
  {
    echo "------------------------------------------------";
    echo "<br>";
   
    echo"Husk at udfylde feltet: $_POST[feltnavn]!";
    echo "&nbsp;<img src=\"img/ikoner/ikon_mangler.gif\" alt=\"Skal udfyldes\" border=\"0\">";
    echo "<br>";
    echo "<br>";
    echo" <input type=\"button\" value=\"<< Gå tilbage\" onClick=\"history.back();\">";
    exit();
   
  }

// Jeg tror det er noget med navngivningen af felterne der løser problemos, men ovenstående validering virker ikke ØV, Øv... kan nogen eksperter hjælpe mig videre?

Please help.....
Avatar billede michael_stim Ekspert
17. september 2007 - 14:14 #1
if(!isset($_POST['feltnavn']) || $_POST[val_Navn:] == "val" )

Pröv den.
Avatar billede michael_stim Ekspert
17. september 2007 - 14:16 #2
$_POST[val_Navn:]  hov läste ikke ordentligt ;o)
Har du et felt der hedder val_navn:?
$_POST['val_Navn:']
Avatar billede artico Novice
17. september 2007 - 19:59 #3
Det er det felt der angiver om feltet skal valideres:
echo "<input type=\"hidden\" name=\"val_$formrow[feltnavn]\" value=\"val\">";

Men er felterne navngivet rigtigt?
Avatar billede michael_stim Ekspert
17. september 2007 - 20:39 #4
Nej.
echo "<input type=\"hidden\" name=\"val_".$formrow['feltnavn']."\" value=\"val\">";
Avatar billede artico Novice
17. september 2007 - 21:18 #5
OK, men skulle man ikke hellere bruge id fra DB til at navngive felterne? For felterne kan jo være forskellige ? hmm der er noget der ikke stemmer :-)
Avatar billede artico Novice
17. september 2007 - 21:56 #6
$key_array = array_keys($_POST);
$hent_val = "SELECT id, validering FROM kontaktformularfelter WHERE id IN (" . join(',',$key_array) . ") ORDER BY id";

$feltertilvalidering = array();
$res = mysql_query($hent_hent_val);
while($row = mysql_fetch_assoc($res))
{
echo "<pre>";
print_r($row);
echo "</pre>";

}
// Meeen det virker ikke som det skal ? :-(
Avatar billede michael_stim Ekspert
17. september 2007 - 22:23 #7
$key_array = array_keys($_POST);
$hent_val = "SELECT id, validering FROM kontaktformularfelter WHERE id IN (" . join(',',$key_array) . ") ORDER BY id";

$feltertilvalidering = array();//Hvad bruges den til?
$res = mysql_query($hent_hent_val)or die(mysql_error());//Her har du hent_hent men din sql hedder kun hent. Satte en or die på så man fanger evt fejl.
while($row = mysql_fetch_assoc($res))
{
echo "<pre>";
print_r($row);
echo "</pre>";

}
Avatar billede artico Novice
17. september 2007 - 22:33 #8
Iden er at når formen blir postet og dette blir sendt:
Array
(
    [2] => henrik
    [3] => mvejen 34
    [1] => 3700
    [4] => Rønne
    [5] =>
    [6] =>
    [Send_besked] => Send besked
    [task] => ok
)

// Så skal den gå ind i DB en og checke idérne [2] [3] [4] [1] osv. for at se om disse felter skal valideres.
Og herefter skal de udskrives så de kan blive valideret ?

Det er det jeg forsøger :-)
Avatar billede artico Novice
17. september 2007 - 22:38 #9
Har rettet til og det ser ud til det næsten kommer igennem DBén, men der kommer en fejl:

Unknown column 'Send_besked' in 'where clause' Hvordan kan jeg komme uden om den?
Avatar billede michael_stim Ekspert
18. september 2007 - 00:36 #10
Hvis du ikke har en kolonne der hedder det (er formodentlig knappen) så må du jo lade være med at tage den med.

Kør en foreach og check om det er en nøgle du kan bruge med en if.
Avatar billede artico Novice
04. oktober 2007 - 19:01 #11
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester