Avatar billede tlunde Nybegynder
20. marts 2004 - 10:22 Der er 38 kommentarer og
1 løsning

Hjælp til at opdatere db fra form

Hejsa,
Jeg vil gerne have hjælp til at opdatere en form og gemme data i databasen igen. jeg har rodet en del med det, men har endnu ikke fået det helt til at virke...

Jeg har lavet formen, og den henter også godt nok de rigtige data, men den vil ikke rigtigt gemme igen...

Når jeg har lavet de rettelser jeg skal, skal jeg sendes over til en anden fil hvor db oplysningerne er, og det har jeg skrevet sådan her: action="filmliste_retfilm.php?action=ret" men den skal jo også have id'et med fra det jeg retter? Hvordan går jeg det?
Avatar billede codebase Praktikant
20. marts 2004 - 10:25 #1
action="filmliste_retfilm.php?action=ret?id=10
Avatar billede arne_v Ekspert
20. marts 2004 - 10:25 #2
Hvis du laver en POST og din form har et felt id, så ryger det med over til
din .php uden videre.
Avatar billede tlunde Nybegynder
20. marts 2004 - 10:26 #3
id er jo ikke 10 hver gang? Den skal jo tage det id med der passer til det der skal rettes i databasen. Jeg har prøvet at skrive:
action="filmliste_retfilm.php?action=ret?id=$row[id] men det virker heller ikke. Den tager ikke id'et med over...
Avatar billede tlunde Nybegynder
20. marts 2004 - 10:28 #4
arne_v >> Når jeg submitter min form, tager den så id'et med over til den anden php film, uden at skrive det?
Avatar billede clausjul Nybegynder
20. marts 2004 - 10:28 #5
Så prøv denne

<form action="filmliste_retfilm.php" method="post">
<input type="hidden" name="action" value="ret">
<input type="hidden" name="id" value="<?= $row[id] ?>">
Avatar billede arne_v Ekspert
20. marts 2004 - 10:30 #6
Den sender altid alle felter med i en POST.
Avatar billede arne_v Ekspert
20. marts 2004 - 10:31 #7
Men de skal naturligvis med som felter.

Evt. hidden felter som claus foreslår.
Avatar billede tlunde Nybegynder
20. marts 2004 - 10:32 #8
Dvs. at det er nok jeg bare skriver sådan her:
action="filmliste_retfilm.php?action=ret

Og så ved den godt i den anden fil, hvad for et ID den skal opdatere, når jeg kalder metoden ret i den anden fil?
Avatar billede clausjul Nybegynder
20. marts 2004 - 10:32 #9
Nej, du skal overføre ID'en via hidden fields
Avatar billede arne_v Ekspert
20. marts 2004 - 10:34 #10
Forudsat at id er er felt i formen med en værdi.
Avatar billede tlunde Nybegynder
20. marts 2004 - 10:36 #11
Nu har jeg noget der ser sådan her ud:
<form action="filmliste_retfilm.php" method="post" name="post">
<input type="hidden" name="action" value="ret">
<input type="hidden" name="id" value="<?= $row[id] ?>">

og lidt længere oppe har jeg dette:
if($action=="ret"){
$rettet = date('d/m/Y H:i:s');

mysql_query("UPDATE www_filmliste SET rettet = '$rettet', titel = '$titel', udg_dato = '$udg_dato', instruktoer = '$instruktoer', kategori = '$kategori', tilladt = '$tilladt', varighed = '$varighed', sprog = '$sprog', skuespillere = '$skuespillere', beskrivelse = '$beskrivelse', andet = '$andet', pic_url = '$pic_url' WHERE id = '$id'") OR die(mysql_error());

Men der sker ikke noget når jeg submitter formen? Den foretager ikke rettelser i min database?
Avatar billede tlunde Nybegynder
20. marts 2004 - 10:44 #12
Er der noget jeg har gjort forkert her, eller mangler der noget?
Avatar billede clausjul Nybegynder
20. marts 2004 - 11:27 #13
Står der en id-værdi i din html kildekode?
Avatar billede tlunde Nybegynder
20. marts 2004 - 11:45 #14
Er det denne du mener fra formen:
<input type="hidden" name="id" value="<?= $row[id] ?>">

??
Avatar billede clausjul Nybegynder
20. marts 2004 - 12:13 #15
Ja, er der en værdi i denne? Altså skal $row[id] have en værdi i form af et tal
Avatar billede tlunde Nybegynder
20. marts 2004 - 12:17 #16
Ja, det skal være et tal...
Avatar billede clausjul Nybegynder
20. marts 2004 - 12:43 #17
Er du sikker på, at din SQL er korrekt... ? Prøv at skrive
echo("UPDATE www_filmliste SET rettet = '$rettet', titel = '$titel', udg_dato = '$udg_dato', instruktoer = '$instruktoer', kategori = '$kategori', tilladt = '$tilladt', varighed = '$varighed', sprog = '$sprog', skuespillere = '$skuespillere', beskrivelse = '$beskrivelse', andet = '$andet', pic_url = '$pic_url' WHERE id = '$id'");

og se om $id er der.
Avatar billede tlunde Nybegynder
20. marts 2004 - 12:54 #18
hvor sskal jeg udskrive denne wcho, så jeg kan se den?
Avatar billede clausjul Nybegynder
20. marts 2004 - 13:00 #19
I din php-kode selvfølgelig
Avatar billede tlunde Nybegynder
20. marts 2004 - 13:43 #20
Når jeg skriver det ud i samme film som hvor formen er, så ser det ud til at det bliver skrevet ud rigtigt nok:

UPDATE www_filmliste SET rettet = '', titel = '101 Dalmatinere', udg_dato = '22-11-2000', instruktoer = 'Stephen Herek', kategori = '', tilladt = '', varighed = '76', sprog = 'Dansk, Engelsk', skuespillere = 'Joan Plowright, Jeff Daniels, Glenn Close, Joely Richardson', beskrivelse = '101 Dalmatiner vil betage store som små i denne eventyrs komedie, fem gange Academy Award nomineringer er det blevet til for Glenn Close, forrygende god i rollen som den pels fikserede dame. Aldrig er der blevet brugt så mange og så søde hvalpe i nogen anden film', andet = 'Theatrical Trailer
"The magic is real" Special Effects Featurette
"Dogs Stars" Featurette
"Cruella De Vil" Music Video by Dr. John
"Connect The Spots" Interactive Game', pic_url = 'http://www.rent-a-movie.dk/pics/film/0023.jpg' WHERE id = '23'
Avatar billede tlunde Nybegynder
20. marts 2004 - 13:43 #21
Men hvorfor updater den så ikke feltet i databasen?
Avatar billede tlunde Nybegynder
20. marts 2004 - 13:55 #22
Hvorfor ser dette egentlig sådan her ud: <?= $row[id] ?> ??? Skal der været et = tegn?? og kan man ikke bare skrive <? $id ?>??
Avatar billede clausjul Nybegynder
20. marts 2004 - 14:04 #23
Har du prøvet at køre denne i phpmyadmin:


UPDATE www_filmliste SET rettet = '', titel = '101 Dalmatinere', udg_dato = '22-11-2000', instruktoer = 'Stephen Herek', kategori = '', tilladt = '', varighed = '76', sprog = 'Dansk, Engelsk', skuespillere = 'Joan Plowright, Jeff Daniels, Glenn Close, Joely Richardson', beskrivelse = '101 Dalmatiner vil betage store som små i denne eventyrs komedie, fem gange Academy Award nomineringer er det blevet til for Glenn Close, forrygende god i rollen som den pels fikserede dame. Aldrig er der blevet brugt så mange og så søde hvalpe i nogen anden film', andet = 'Theatrical Trailer
"The magic is real" Special Effects Featurette
"Dogs Stars" Featurette
"Cruella De Vil" Music Video by Dr. John
"Connect The Spots" Interactive Game', pic_url = 'http://www.rent-a-movie.dk/pics/film/0023.jpg' WHERE id = '23'
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:05 #24
nej, det prøver jeg lige...
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:09 #25
Der var heller ikke nogle fejl når jeg kører det i phpmyadmin
Avatar billede clausjul Nybegynder
20. marts 2004 - 14:14 #26
prøv at skrive

$result = mysql_query("UPDATE www_filmliste SET rettet = '$rettet', titel = '$titel', udg_dato = '$udg_dato', instruktoer = '$instruktoer', kategori = '$kategori', tilladt = '$tilladt', varighed = '$varighed', sprog = '$sprog', skuespillere = '$skuespillere', beskrivelse = '$beskrivelse', andet = '$andet', pic_url = '$pic_url' WHERE id = '$id'") OR die(mysql_error());

echo($result)

Hvad siger den? Hvis den siger false, så er den ikke blevet opdateret, hvis true, så er det godt nok meget mærkeligt.
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:21 #27
Den returnere 1, når jeg skriver $result ud? HVad betyder det?
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:23 #28
Er disse rigtige nok også:
<input type="hidden" name="action" value="ret">
<input type="hidden" name="id" value="<?=$id ?>">
Avatar billede clausjul Nybegynder
20. marts 2004 - 14:26 #29
Hvis du ser i din kildekode (HTML-source)

<input type="hidden" name="action" value="ret">
<input type="hidden" name="id" value="23">

så er det korrekt, så du bliver nok nødt til at komme med hele koden her.
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:28 #30
okay, her kommer hele svineriet så :)

Selve formen:
--------------
            <form action="filmliste_retfilm.php" method="post" name="post">
            <table width="90%" border="0" cellpadding="0" cellspacing="0">
              <tr class="tekstafsnit">
                <td width="19%">Titel:</td>
                <td width="2%">&nbsp;</td>
                <td width="79%">
                <input type="hidden" name="action" value="ret">
                <input type="hidden" name="id" value="<?=$id ?>">
                <input name="titel" type="text" value="<? echo $titel ?>" id="titel" size="30" style="border: 1 solid #000000">
                </td>
                </tr>
              <tr class="tekstafsnit">
                <td valign="middle">Udgivelsesdato:</td>
                <td valign="middle">&nbsp;</td>
                <td valign="top"><input name="udg_dato" type="text" value="<? echo $udg_dato ?>" id="udg_dato" size="30" style="border: 1 solid #000000">
                  (Eks. 10-02-2004)</td>
                </tr>
              <tr class="tekstafsnit">
                <td>Instrukt&oslash;r:</td>
                <td>&nbsp;</td>
                <td><input name="instruktoer" type="text" id="instruktoer" value="<? echo $instruktoer ?>" size="30" style="border: 1 solid #000000">
                  </td>
              </tr>
              <tr class="tekstafsnit">
                <td>Kategori:</td>
                <td>&nbsp;</td>
                <td>
                  <table width="100%" border="0" cellpadding="3" cellspacing="0">
                    <tr valign="middle" class="tekstafsnit">
                      <td><input type="checkbox" name="box[]" value="Action">Action</td>
                      <td><input type="checkbox" name="box[]" value="Drama">Drama</td>
                      <td><input type="checkbox" name="box[]" value="Musical">Musical</td>
                        <td><input type="checkbox" name="box[]" value="Animation">Animation</td>
                      </tr>
                    <tr valign="middle" class="tekstafsnit">
                      <td><input type="checkbox" name="box[]" value="Eventyr">Eventyr</td>
                      <td><input type="checkbox" name="box[]" value="Krimi">Krimi</td>
                      <td><input type="checkbox" name="box[]" value="Kærlighed">Kærlighed</td>
                        <td><input type="checkbox" name="box[]" value="Børne film">Børne film</td>
                      </tr>
                    <tr valign="middle" class="tekstafsnit">
                      <td><input type="checkbox" name="box[]" value="Familie film">Familie film</td>
                      <td><input type="checkbox" name="box[]" value="Sci-Fi">Sci-Fi</td>
                        <td><input type="checkbox" name="box[]" value="Danske film">Danske film</td>
                      <td><input type="checkbox" name="box[]" value="Gyser">Gyser</td>
                      </tr>
                    <tr valign="middle" class="tekstafsnit">
                      <td><input type="checkbox" name="box[]" value="Thriller">Thriller</td>
                        <td><input type="checkbox" name="box[]" value="Disney film">Disney film</td>
                      <td><input type="checkbox" name="box[]" value="Komedie">Komedie</td>
                      <td><input type="checkbox" name="box[]" value="TV-serie">TV-serie</td>
                      </tr>
                    <tr valign="middle" class="tekstafsnit">
                      <td><input type="checkbox" name="box[]" value="Dokumentar">Dokumentar</td>
                      <td><input type="checkbox" name="box[]" value="Krigsfilm">Krigsfilm</td>
                      <td><input type="checkbox" name="box[]" value="Western">Western</td>
                      </tr>
                    </table>
                  </td>
              </tr>
              <tr class="tekstafsnit">
                <td>Tilladt for:</td>
                <td>&nbsp;</td>
                <td>
                  <select name="tilladt" id="tilladt" style="border: 1 solid #000000">
                  <option value="Tilladt for alle">» Tilladt for alle
                  <option value="Tilladt for alle, men frarådes børn under 7 år">» Tilladt for alle, men frarådes børn under 7 år
                  <option value="Tilladt for børn over 11 år">» Tilladt for børn over 11 år
                  <option value="Tilladt for børn over 15 år">» Tilladt for børn over 15 år
                  </select>
                  </td>
              </tr>
              <tr class="tekstafsnit">
                <td>Varighed i minutter:</td>
                <td>&nbsp;</td>
                <td>                  <input name="varighed" type="text" value="<? echo $varighed ?>" id="varighed" size="30" style="border: 1 solid #000000">
                (Kun tal)</td>
                </tr>
              <tr class="tekstafsnit">
                <td>Filmens sprog:</td>
                <td>&nbsp;</td>
                <td><input name="sprog" type="text" id="sprog" size="30" value="<? echo $sprog ?>" style="border: 1 solid #000000">
(Adskil med komma og mellemrum)</td>
                </tr>
              <tr class="tekstafsnit">
                <td>Skuespillere:</td>
                <td>&nbsp;</td>
                <td>                  <input name="skuespillere" type="text" value="<? echo $skuespillere ?>" id="skuespillere" size="30" style="border: 1 solid #000000">
                (Adskil med komma og mellemrum)</td>
                </tr>
              <tr class="tekstafsnit">
                <td>Beskrivelse:</td>
                <td>&nbsp;</td>
                <td><p>
                  <textarea name="beskrivelse" cols="50" rows="7" id="beskrivelse" style="border: 1 solid #000000"><? echo $beskrivelse ?></textarea>
                  (Ret ikke  i HTML koden)  </p>
                  </td>
                </tr>
              <tr class="tekstafsnit">
                <td>Ekstra materiale:</td>
                <td>&nbsp;</td>
                <td><textarea name="andet" cols="50" rows="7" id="andet" style="border: 1 solid #000000"><? echo $andet ?></textarea>
(Ret  ikke i HTML koden) </td>
                </tr>
              <tr class="tekstafsnit">
                <td>Tilf&oslash;j URL til billede:</td>
                <td>&nbsp;</td>
                <td><input name="pic_url" type="text" id="pic_url" value="<? echo $pic_url ?>" size="50" style="border: 1 solid #000000">
                  </td>
                </tr>
              <tr class="tekstafsnit">
                <td height="27" colspan="3"><div align="center"><strong><font color="#FF0000">Husk at udfylde
                  ALLE felter inden filmen tilf&oslash;jes til databasen...                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      </font></strong></div></td>
                </tr>
              <tr class="tekstafsnit">
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td><strong>
                  <input type="submit" name="Submit" value="Opdater filmen..." style="border: 1 solid #000000">
                  </td>
                </tr>
              </table>
            </form>
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:28 #31
og det kode der skulle gemme det i databasen:
---------------------------------------------
<?
db_con();
// Henter filmen der er valgt
$query = mysql_query("SELECT * FROM www_filmliste WHERE id = '$id'");
while ($row = mysql_fetch_array($query))
{
$titel = $row[titel];
$udg_dato = $row[udg_dato];
$instruktoer = $row[instruktoer];
$varighed = $row[varighed];
$sprog = $row[sprog];
$skuespillere = $row[skuespillere];
$beskrivelse = $row[beskrivelse];
$andet = $row[andet];
$pic_url = $row[pic_url];
}

if($action=="ret"){
$rettet = date('d/m/Y H:i:s');

$result = mysql_query("UPDATE www_filmliste SET rettet = '$rettet', titel = '$titel', udg_dato = '$udg_dato', instruktoer = '$instruktoer', kategori = '$kategori', tilladt = '$tilladt', varighed = '$varighed', sprog = '$sprog', skuespillere = '$skuespillere', beskrivelse = '$beskrivelse', andet = '$andet', pic_url = '$pic_url' WHERE id = '$id'") OR die(mysql_error());

echo($result);
}
?>
Avatar billede clausjul Nybegynder
20. marts 2004 - 14:30 #32
Aha, nu ved jeg hvorfor!

Prøv denne

<?
db_con();

if ($action == "") {
// Henter filmen der er valgt
$query = mysql_query("SELECT * FROM www_filmliste WHERE id = '$id'");
while ($row = mysql_fetch_array($query))
{
$titel = $row[titel];
$udg_dato = $row[udg_dato];
$instruktoer = $row[instruktoer];
$varighed = $row[varighed];
$sprog = $row[sprog];
$skuespillere = $row[skuespillere];
$beskrivelse = $row[beskrivelse];
$andet = $row[andet];
$pic_url = $row[pic_url];
}
}

if($action=="ret"){
$rettet = date('d/m/Y H:i:s');

$result = mysql_query("UPDATE www_filmliste SET rettet = '$rettet', titel = '$titel', udg_dato = '$udg_dato', instruktoer = '$instruktoer', kategori = '$kategori', tilladt = '$tilladt', varighed = '$varighed', sprog = '$sprog', skuespillere = '$skuespillere', beskrivelse = '$beskrivelse', andet = '$andet', pic_url = '$pic_url' WHERE id = '$id'") OR die(mysql_error());

echo($result);
}
?>
Avatar billede clausjul Nybegynder
20. marts 2004 - 14:31 #33
Det er nemlig fordi du allerede har tildelt variabler før databasen skulles opdateres. ;-)
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:31 #34
hvad betød det når den returnerede 1?
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:33 #35
Øhh...okay, nu ser det godt nok ud til at det virker...hvad va fejlen?
Avatar billede tlunde Nybegynder
20. marts 2004 - 14:39 #36
smid et par og du får nogle points...
Avatar billede clausjul Nybegynder
20. marts 2004 - 14:46 #37
1 = OK
0 = Ikke OK.
Fejlen var nemlig, at du hentede data fra databasen med den id (under // Henter filmen der er valgt) og disse får tildelt variabler $titel, $udg_dato m.m. og samme variabler bliver lagt ind i databasen igen og derfor bliver den ikke opdateret.
Avatar billede tlunde Nybegynder
21. marts 2004 - 11:24 #38
clausjul >> Et eller andet et gået galt da vi har rodet med koden :) Den opdatere godt nok fra formen til databasen, men nu nulstiller den bare den row der hedder kategori?? Har du en ide om hvad det kan skyldes?
Avatar billede tlunde Nybegynder
21. marts 2004 - 11:27 #39
Nå, fandt selv ud af det...manglede lige en funktion:
$kategori = implode(", ", $_POST["box"]);
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
Computerworld tilbyder specialiserede kurser i database-management

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