Avatar billede delphiuser Mester
26. september 2014 - 19:36 Der er 6 kommentarer og
1 løsning

multiple options i mysql

Hej eksperter

Jeg er igang med at lave et ansøgnings skema og det virker som sådan fint nok. det eneste problem jeg har er at jeg kan ikke få den til at lægge alle ens kvalifikationer ind i min database tabel, For jeg ved ikke lige hvad jeg skal gøre.

min tabel ser sådan her ud.

CREATE TABLE `ans` (
  `ans_id` int(11) NOT NULL auto_increment,
  `navn` varchar(100) NOT NULL default '',
  `adr` varchar(100) NOT NULL default '',
  `post` varchar(4) NOT NULL default '',
  `city` varchar(150) NOT NULL default '',
  `dato` date NOT NULL default '0000-00-00',
  `firma` varchar(150) NOT NULL default '',
  `fadr` varchar(100) NOT NULL default '',
  `fpost` varchar(4) NOT NULL default '',
  `fcity` varchar(150) NOT NULL default '',
  `att` varchar(150) NOT NULL default '',
  `emne` varchar(255) NOT NULL default '',
  `person` text NOT NULL,
  `kval` varchar(255) NOT NULL default '',
  `ansoeg` text NOT NULL,
  `tlf` varchar(15) NOT NULL default '',
  `email` varchar(255) NOT NULL default '',
  `cv` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`ans_id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

mit php script ser sådan her ud.

if(isset($_POST['send'])) {
    $navn = $_POST['navn'];
    $adr = $_POST['adr'];
    $post = $_POST['post'];
    $city = $_POST['city'];
    $tlf = $_POST['tlf'];
    $email = $_POST['email'];
    $dato = $_POST['dato'];
    $firma = $_POST['firma'];
    $fadr = $_POST['fadr'];
    $fpost = $_POST['fpost'];
    $fcity = $_POST['fcity'];
    $att = $_POST['att'];
    $emne = $_POST['emne'];
    $person = $_POST['person'];
    $ansoeg = $_POST['ansoeg'];
    echo '<div id="afs">';
    echo '<p id="sender">'.$navn . '<br>'.$adr.'<br>'.$post.' '.$city.'<br>Telefon : '.$tlf.'<br>Email : '.$email.'</p> <p>Dato. '.$dato.'</p>';
    echo '</div>';
    echo '<div id="modt">';
    echo $firma .'<br>'.$fadr.'<br>'.$fpost.' '.$fcity.'<br>ATT: '.$att.'<br><br>MRK. '.$emne.'<br><br>'.nl2br($person);
    echo '</div>';
    echo '<div id="rest">';
    echo 'Jeg har f&oslash;lgende kvalifikationer:<ul>';
    foreach($_POST['kval'] as $kvalop) {
        echo '<li>'.$kvalop.'</li>';
    }
    echo '</ul>';
    echo nl2br($ansoeg).'<br>';
    if(!isset($_POST['cv'])) {
        $cv = 'CV ikke vedlagt';
    } else {
        $cv = 'CV vedlagt';
    }
    echo $cv;
    echo '</div>';
    $sql = "insert into ans(navn, adr, post, city, dato, firma, fadr, fpost, fcity, att, emne, person, ansoeg, tlf, email, cv) values('$navn', '$adr', '$post', '$city', '$dato', '$firma', '$fadr', '$fpost', '$fcity', '$att', '$emne', '$person', '$ansoeg', '$tlf', '$email', '$cv')";
    mysql_query($sql) or die(mysql_error());
*****************************************************************
    $kval = $_POST['kval'];
    foreach($kval as $kvali) {
        mysql_query("update ans set kval='$kvali' where firma='$firma'");
    }
*****************************************************************
    echo 'Din ans&oslash;gning er gemt.';
}       
?>
jeg har lavet det sådan at den viser ens ansøgning og også gemmer den i mysql. Men som sagt vil den kun tage den sidste kvalifikation jeg vælger. hvad gør jeg forkert. Jeg har lagt stjerner over og under den del med min kvalifikation indlæggelse.

på forhånd tak for hjælpen...

Hilsen Delphiuser
Avatar billede showsource Seniormester
26. september 2014 - 20:33 #1
Du bruger en update af kval i en foreach.
Så ender du jo med at sætte sidste ind !

Lav en tabel med kval mulige kun.
Lav derefter en tabel med kval + hvem.

Kvals:
1 -> Fodbold
2 -> Nørde
3 -> Sove

tabel hvem/hvad:
1 -> 1 -> 1
2 -> 1 -> 3
3 -> 1963 -> 2
4 -> 1963 -> 3
Avatar billede showsource Seniormester
26. september 2014 - 20:41 #2
kvals tabel:
id -> unique autoincrem. navn -> unique

hvemhvad tabel
(ingen grund til numering)

hvemref, index
kvalid, index ( fås fra kvalstabel )

Og ja, så har du jo en "hvem" tabel med:
id -> autonum + navn m.m.
Avatar billede showsource Seniormester
26. september 2014 - 21:04 #3
Kik lige her:
http://www.eksperten.dk/spm/852973

Og nej, lottostatistik.dk er på for tiden !
( Vil ha' min egne server ud at stå )

Men rigtig opbygning af DB med de rigtige INDEX er primærmt !
Avatar billede showsource Seniormester
26. september 2014 - 21:06 #4
m -> r
27. september 2014 - 22:03 #5
Det vi har er en 'en-til-mange' relation mellem firma og kvalifikation.  Hvert firma har et enkelt navn, en adresse, o.s.v., men kan have mange kvalifikationer.  En-til-mange relationer kan ikke rummes i en enkelt database tabel.  I dit tilfælde har du, ud over ans tabellen, brug for en kvalifikationer tabel.  Jeg har i http://christianjorgensen.be/Capture.JPG skitseret ans tabellen med navn, adr, firma, o.s.v., men IKKE kval.  Hver række i kvalifikationer tabellen har felterne firma og kvalifikation.  Hvis firma 'Jørgensen & Søn' har tre kvalifikationer 'glimrende', 'brilliant' og 'pragtfuld' vil tabellen se således ud:

1  Christian & Søn    glimrende
2  Christian & Søn    brilliant
3  Christian & Søn    pragtfuld

Du fylder kvalifikationer i tabellen ved at erstatte din update kode med følgende (ikke testet:)

$kval = $_POST['kval'];
foreach($kval as $kvali)
{
    mysql_query("insert into kvalifikationer (firma, kvalifikation) values('$firma', '$kvali')");
}

Når du så vil trække data ud og se dine firmaer med kvalifikationer bliver det noget i denne henretning:

SELECT navn, adr, firma, o.s.v., kvalifikation
FROM ans
JOIN kvalifikationer ON  ans.firma = kvalifikationer.firma

Lyder det rimeligt
27. september 2014 - 22:05 #6
Linket skulle have været http://christianjorgensen.be/Capture.PNG
Avatar billede showsource Seniormester
05. oktober 2014 - 07:48 #7
I stedet for en INSERT for hver, kan "kval" samles og derefter en INSERT


$insert = "INSERT INTO kvalifikationer (firma, kvalifikation) VALUES ";
$vars = array();

foreach($_POST['kval'] as $kvali)
{
    $vars[] = "(".$firma.",".$kvali.")";
}

$sql = $insert.(implode(",", $vars);

mysql_query($sql);

Utestet, men ideen kan jo nok ses :O)
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