28. juli 2003 - 21:28Der er
40 kommentarer og 1 løsning
Fra Checkbox til MySQL database
Jeg er ved at oprette en liste over mine film og musik cd'er, som bliver lavet i PHP. Her skal man kunne f.eks oprette en film, og krydse af i nogle checkboxe om lyden evt er dts, dd5.1 stereo eller andet. Det skal være muligt at krydse af i flere boxe på samme tid. Hvordan laves dette? Samtidig - hvilken type skal det være i DB'en. Skal man lave et feldt i DB'en til hver lydenhed?
Min kode er indtil videre følgende :
<HTML> <BODY> <p align="center"><font size="5" face="Arial Black"><b>Opret DVD FILM</b></font></p>
Efter ti år i London, Madrid, Paris og Utrecht kommer Sabios AI-fokuserede program af arrangementer om kundeoplevelser, ‘Disrupt’, for første gang til Danmark.
I det tilfælde, hvor du har en del forskellige options, vil jeg vælge at lave et felt i databasen med type=SET, hvor du kan angive de mulige værdier. Du kan så i din form bruge binære værdier (1,2,4,8,osv) som værdier. Når du indsætter i databasen behøver du så blot, at indsætte en sum af disse værdier.
Hmmm. Jeg synes ikke rigtig at kunne få det til at fungere. Jeg har altså lavet en ekstra fil ved navn test.php som indeholder følgende : <? if (isset($_POST['ok'])) { $lyd = $_POST['lyd']; echo $lyd; } ?>
Dernæst har jeg indsat disse i det rigtige dokument :
Jeg får fint nok de 3 checkbokse frem, og kan også klikke i dem, men de sender ikke noget til DB'en. Der er ingen fejlmeddelelser. Jeg har oprettet feltet "lyd" som en SET funktion i DB'en. Under "Datatype" i DB'en står der nu : "set('1', '2', '4')"
Prøv at slette det felt du har og kør denne query, som du selvfølgelig kan rette til som du vil: ALTER TABLE `dvd` ADD `lyd` SET('dts','digi5.1','stereo') NOT NULL Meningen er så at de har binære værdier som dts = 1 : (0001) digi5.1 = 2 : (0010) stereo = 4 : (0100) osv. du kan tilføje op til 64. Når du så modtager værdier fra din form, gør du sådan: ------------------ if (isset($_POST['lyd'])) { $bin = array_sum($_POST['lyd']); } $bin vil så have den binære værdi af dit valg fra formen. Fx hvis du har valgt: dts og stereo er $bin=5. Når du udfører din query vil de to elementer så blive sat i din database.
Det er ok. Filen test.php var bare ment som en demo, den skal du ikke bruge. Formen skal bare være en del af din nuværende form: ---------------- <HTML> <BODY> <p align="center"><font size="5" face="Arial Black"><b>Opret DVD FILM</b></font></p>
<body bgcolor="#FFFFCC"> <?
if (isset($_POST['Ok']));{ if (isset($_POST['lyd'])) { $bin = array_sum($_POST['lyd']); } $db = mysql_connect("127.0.0.1", "root", ""); mysql_select_db("Film",$db);
Der var en ; for meget, prøv den her: ------------------------------------- <HTML> <BODY> <p align="center"><font size="5" face="Arial Black"><b>Opret DVD FILM</b></font></p>
<body bgcolor="#FFFFCC"> <?
if (isset($_POST['Ok'])) { if (isset($_POST['lyd'])) { $bin = array_sum($_POST['lyd']); } $db = mysql_connect("127.0.0.1", "root", ""); mysql_select_db("Film",$db);
Ok, men hvad er det der ikke virker. Får du nogen fejlmeddelser, eller hvad går der galt? Prøv at rette det her og se om det giver en fejlmeddelelse: --------------------- mysql_query("INSERT INTO dvd(org_titel, org_undertitel, dk_titel, dk_undertitel, instruktoer, test, lyd) VALUES ('$org_titel','$org_undertitel ','$dk_titel','$dk_undertitel','$instruktoer','$test', $bin)") or die(mysql_error()); ---------------------
Warning: Accès refusé pour l'utilisateur: 'ODBC@localhost' (mot de passe: NON) in c:\programmer\easyphp\www\opretdvd.php on line 13
Warning: MySQL Connection Failed: Accès refusé pour l'utilisateur: 'ODBC@localhost' (mot de passe: NON) in c:\programmer\easyphp\www\opretdvd.php on line 13
Warning: MySQL: A link to the server could not be established in c:\programmer\easyphp\www\opretdvd.php on line 13 Accès refusé pour l'utilisateur: 'ODBC@localhost' (mot de passe: NON)
Hmmm, en fransk version. Jeg er ikke så ferm til fransk, men den beklager sig øjensynligt over at den ikke kan connecte til din MySQL-server med de angivne oplysninger. Men den del er jo ikke ændret, så det må være noget med serveren.
Ja, det bliver vidst et gæt. Kan du ikke få den til at tale dansk, eller i det mindste engelsk? ;-) Mit gæt er den er gal med feltet test (eller værdien $test).
Nu virker det. Jeg oprettede et felt mere i DB'en. "Test" og gav den samme atributter som lyd, og vupti....så kørte det. Men hvorfor skulle der både bruges en test og lyd?
'test' er ikke en funktion, det er et felt du har haft hele tiden. Så jeg ved ikke hvad du bruger det til. 'bin' er heller ikke en funktion, men en binær værdi, der repræsenter de lyd-valg du angiver i din form. Prøv at se i din Mysql-mappe: om du ikke har: mysql\share\danish, for så kan du godt ændre sproget på MySQL.
Og mig som troede vi havde løst det. Man kan ikke vælge at oprette et medie, uden at man også vælger en form for lyd. Vælger jeg at indtaste filmens org_titel og klikker ok, for jeg en fejlmeddelelse. Vælger jeg istedet at oprette en films org_titel og samtidig sætter flueben i dts, så fungere det. Kan man ændre dette, så det ikke er nødvendigt at klikke på lyd. Uanset hvad, så skal lyden jo oprettes, men jeg vil gerne undgå det her i opbygning og test fasen
Ja, der var jeg ikke helt vågen. Det skal selvfølgelig være: ----------------------- if (isset($_POST['Ok'])) { if (isset($_POST['lyd'])) { $bin = array_sum($_POST['lyd']); }else{$bin = 0;} $db = mysql_connect("127.0.0.1", "root", ""); mysql_select_db("Film",$db);
Det virker fint. Mange tak. Har lige et spørgsmål her til sidst. Hvis jeg ønsker at gøre brug af den fuktion med binære i på andre måder, samtidig med at jeg stadig har funktionen lyd med. Jeg regner med at db'en stadig skal være "set" og hvordan man laver radio buttons ved jeg også, men mit problem er at jeg gerne vil vælge en region på disken, hvilket jo gøres meget smart ved radiobuttons. Mit problem ligger nok i dette område :
if (isset($_POST['Ok'])) { if (isset($_POST['lyd'])) { $bin = array_sum($_POST['lyd']); }else{$bin = 0;} $db = mysql_connect("127.0.0.1", "root", ""); mysql_select_db("Film",$db);
Hvordan skriver jeg den ekstra funktion ind, så programmet kan kende forskel fra en "$bin" til en anden?
I det tilfælde vil jeg ikke mene, at det er nødvendigt med et SET felt, da du kun skal bruge en værdi i hver række. Men du kan naturligvis sagtens gøre det. Navnet $bin er bare for at illustrere at det er en binær værdi, den kan hedde hvad som helst.
Ok, men hvad nu hvis jeg f.eks ønsker at have en funktion der fortæller hvilket billed der er på skærmen (4:3, 16:9 osv) Her skal man jo på sammen måde som lyd, kunne vælge flere muligheder ved checkbokse.
Opretter lige et spørgsmål et andet sted. Så har du mulighed for at få nogle point, hvis du kan hjælpe mig til at få lavet "funktionen" samtidig med at jeg har "lyd".
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.