Avatar billede tanettes Nybegynder
17. juni 2007 - 16:34 Der er 25 kommentarer og
1 løsning

Èn knap til alle felter

Jeg har en liste hvor man skal kunne rette i produkt og pris felterne. den skal sætte de nye ændringer ind i min tabel i databasen og udtrække dem igen.min udtrækning er en while-løkke. jeg vil have min OK knap skal ændre alle rettelserne på én gang så man ikke skal lave en knap til hver enkelt felt. men problemmet er så at, hvis jeg har rettet i et enkelt felt, så overskriver den alle de andre felter med den samme nye ændring.ikke godt. hvordan for jeg lavet én enkelt knap til hele listen?
Giv mig et eksempel fra mine koder
min php-kode:

<?php
$query = mysql_query("SELECT * FROM du_vaelger");
while($row=mysql_fetch_array($query)){

    $pris = $_POST['pris'];
    $produkt = $_POST['produkt'];
         

if (isset($_POST['Submit'])){

mysql_query("UPDATE du_vaelger SET pris='$pris', produkt='$produkt'");
header("location: main2.php");



}

?>   
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../style.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>

<body>
<div id="Layer1" style="position:absolute; width:757px; height:400px; z-index:1; overflow: auto;">
  <table width="689" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><form name="form1" method="post" action="">
        <table width="667" height="38" border="0" cellpadding="0" cellspacing="0" bgcolor="#9A9CA6">
          <tr>
            <td width="31" height="19">&nbsp;</td>
            <td width="539">&nbsp;</td>
            <td width="139">&nbsp;</td>
          </tr>
          <tr>
            <td height="19">&nbsp;</td>
            <td><input name="produkt" type="text" class="box3" id="produkt4" value="<?php echo $row['produkt']; ?>"></td>
            <td><input name="pris" type="text" class="box2" id="pris" value="<?php echo $row['pris']; ?>"></td>
          </tr>
        </table>
        <?php
    }
    ?>

min database-tabel:
CREATE TABLE `du_vaelger` (
  `id` int(11) NOT NULL auto_increment,
  `produkt` varchar(300) NOT NULL,
  `pris` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Data dump for tabellen `du_vaelger`
--

INSERT INTO `du_vaelger` VALUES (1, 'gulve', '160');
INSERT INTO `du_vaelger` VALUES (2, 'papir', '50');
INSERT INTO `du_vaelger` VALUES (3, 'vask', '100');
INSERT INTO `du_vaelger` VALUES (4, 'olie', '40');
Avatar billede jakobdo Ekspert
17. juni 2007 - 17:23 #1
Dine 4 ting i tabellen, har jo ID 1, 2, 3 og 4.
De ID'er skal du angive i din while løkke, hvor du laver input felterne.
F.eks.:

<td><input name="produkt[<?=$row['id'];?>]" type="text" class="box3" id="produkt4" value="<?php echo $row['produkt']; ?>"></td>
            <td><input name="pris[<?=$row['id'];?>]" type="text" class="box2" id="pris" value="<?php echo $row['pris']; ?>"></td>

Så vil du vide hvilke felter du så senere skal opdatere.
For du mangler en WHERE i din SQL UPDATE.
Så du opdatere jo alt.
Avatar billede tanettes Nybegynder
17. juni 2007 - 18:04 #2
ok.Hvad skal der så stå I min sql update med WHERE ... ?
Avatar billede tanettes Nybegynder
17. juni 2007 - 18:16 #3
ok.Hvad skal der så stå I min sql update med WHERE ... ?
Avatar billede jakobdo Ekspert
17. juni 2007 - 18:32 #4
Noget i denne stil:

<?php
//Husk at forbind til din MYSQL
if(isset($_POST['Submit']))
{
    foreach($_POST[produkt] AS $key => $value)
    {
        $pris = $_POST['pris'][$key];
        $produkt = $value;
        mysql_query("UPDATE du_vaelger SET pris='$pris', produkt='$produkt' WHERE id = $value LIMIT 1");
    }
    header("location: main2.php");
}
?>
Avatar billede tanettes Nybegynder
18. juni 2007 - 17:27 #5
Jeg kan ikke få det til at virke. den indsætter ikke de nye ændringer når man taster dem ind i felterne...
hvor er fejlen.. hvordan skal den så se ud?
her er min kode:
<?php
session_start();
include('db.php');
?>
<?php
$query = mysql_query("SELECT * FROM du_vaelger ");
while($row=mysql_fetch_array($query)){

//$pris = $_POST['pris'];
//$produkt = $_POST['produkt'];
         

if (isset($_POST['Submit']))
{
foreach($_POST['produkt'] AS $key => $value)
{
$pris = $_POST['pris'][$key];
$produkt = $value;

mysql_query("UPDATE du_vaelger SET pris='$pris', produkt='$produkt' WHERE id = $value LIMIT 1");
}
header("location: main2.php");
}
?>   
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../style.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>

<body>
<div id="Layer1" style="position:absolute; width:757px; height:400px; z-index:1; overflow: auto;">
  <table width="689" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><form name="form1" method="post" action="">
        <table width="667" height="38" border="0" cellpadding="0" cellspacing="0" bgcolor="#9A9CA6">
          <tr>
            <td width="31" height="19">&nbsp;</td>
            <td width="539">&nbsp;</td>
            <td width="139">&nbsp;</td>
          </tr>
          <tr>
            <td height="19">&nbsp;</td>
            <td><input name="produkt[<?=$row['id'];?>" type="text" class="box3" id="produkt4" value="<?php echo $row['produkt']; ?>"></td>
            <td><input name="pris[<?=$row['id'];?>" type="text" class="box2" id="pris" value="<?php echo $row['pris']; ?>"></td>
          </tr>
        </table>
        <?php
    }
    ?>
        <input type="submit" name="Submit" value="OK">
      </form></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    </tr>
  </table>
</div>
</body>
</html>
Avatar billede jakobdo Ekspert
18. juni 2007 - 20:45 #6
Har du et link til din side?
Avatar billede tanettes Nybegynder
19. juni 2007 - 19:53 #7
nej jeg er ved at lave den i dreamweaver og databasen i phpmyadmin
Avatar billede jakobdo Ekspert
19. juni 2007 - 21:04 #8
Hvordan tester du så din kode?
Har du en lokal server?
Eller har dreamweaver en intern server den afvikler kode på?
Avatar billede jakobdo Ekspert
19. juni 2007 - 21:05 #9
Ellers må du kontakte mig via msn: jakobdo {at} hotmail -DOT- com
Avatar billede tanettes Nybegynder
20. juni 2007 - 19:46 #10
jeg har en WAMP server. en gratis test server. http://www.wamp5.com/
er ved at være i nød med min kode. ofre 1000 point til dig hvis du kan hitte ud af koden så den virker, for jeg er gået helt blank.
Avatar billede jakobdo Ekspert
20. juni 2007 - 21:31 #11
Kan du ikke fange mig på msn?
Avatar billede tanettes Nybegynder
21. juni 2007 - 19:22 #12
bruger kun MSN til privat desværre. jeg kan lige uploade den på mit websted hvis det kan hjælpe dig. sender dig lige et link
Avatar billede tanettes Nybegynder
21. juni 2007 - 19:45 #13
Avatar billede jakobdo Ekspert
22. juni 2007 - 08:33 #14
Din kode er helt forkert! :o)

Du har <html> flere steder.
Ligeledes mangler du at lukke [ efter produkt og pris!
Der står kun: produkt[1 pris[1
Der skal stå:
produkt[1] pris[1] osv...
Avatar billede tanettes Nybegynder
22. juni 2007 - 16:54 #15
skal det sådan ud? for det virker heller ik :(

<td><input name="produkt[<?=$row['id'];?>]" type="text" class="box3" id="produkt4" value="<?php echo $row['produkt']; ?>"></td>
            <td><input name="pris[<?=$row['id'];?>]" type="text" class="box2" id="pris" value="<?php echo $row['pris']; ?>"></td>
Avatar billede tanettes Nybegynder
22. juni 2007 - 17:05 #16
har uploadet dedn igen så du kan se... der kommer godt nok ingen fejlmeddelser, men virker bare ikke.. den overskriver ikke de nye indtastninger
Avatar billede jakobdo Ekspert
22. juni 2007 - 18:36 #17
Test koden her:

<?php
session_start();
include('db.php');
if (isset($_POST['Submit']))
{
    foreach($_POST['produkt'] AS $key => $value)
    {
        $pris = $_POST['pris'][$key];
        $produkt = $value;
        mysql_query("UPDATE du_vaelger SET pris='$pris', produkt='$produkt' WHERE id = $value LIMIT 1");
    }
    header("location: main2.php");
    exit();
}
?> 
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../style.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>

<body>
<div id="Layer1" style="position:absolute; width:757px; height:400px; z-index:1; overflow: auto;">
  <table width="689" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><form name="form1" method="post" action="">
        <table width="667" height="38" border="0" cellpadding="0" cellspacing="0" bgcolor="#9A9CA6">
        <?php
        $query = mysql_query("SELECT * FROM du_vaelger");
                while($row=mysql_fetch_array($query))
                {
        ?>
          <tr>
            <td width="31" height="19">&nbsp;</td>
            <td width="539">&nbsp;</td>
            <td width="139">&nbsp;</td>
          </tr>
          <tr>
            <td height="19">&nbsp;</td>
            <td><input name="produkt[<?=$row['id'];?>]" type="text" class="box3" id="produkt4" value="<?=$row['produkt'];?>"></td>
            <td><input name="pris[<?=$row['id'];?>]" type="text" class="box2" id="pris" value="<?=$row['pris'];?>"></td>
          </tr>
          <?php
          }
          ?>
        </table>
        <input type="submit" name="Submit" value="OK">
      </form></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    </tr>
  </table>
</div>
</body>
</html>
Avatar billede tanettes Nybegynder
22. juni 2007 - 20:50 #18
den kan ikke lide headeren.. kig igen på http://www.enterspace.dk/test/du_vaelger_admin.php
Avatar billede jakobdo Ekspert
22. juni 2007 - 21:00 #19
Laver du output i db.php ?
Har du noget output før header() ?

Det kode skal virke, måske lidt tilretning, men det er godt nok svært at hjælpe dig.
Avatar billede tanettes Nybegynder
22. juni 2007 - 21:15 #20
undskyld jeg er så besværlig.har ikke lavet andet end at bruge den kode du lige har sendt mig, har intet andet tilføjet... giver dig lige databasedumpet :

-- phpMyAdmin SQL Dump
-- version 2.6.1-pl2
-- http://www.phpmyadmin.net
--
-- Vært: 127.0.0.1
-- Genereringstid: 22/06 2007 kl. 21:13:30
-- Serverversion: 4.1.11
-- PHP version: 5.0.4
--
-- Database: `web136720`
--

-- --------------------------------------------------------

--
-- Struktur-dump for tabellen `du_vaelger`
--

CREATE TABLE `du_vaelger` (
  `id` int(11) NOT NULL auto_increment,
  `produkt` text NOT NULL,
  `pris` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

--
-- Data dump for tabellen `du_vaelger`
--

INSERT INTO `du_vaelger` VALUES (1, 'xvxvvx', '50');
INSERT INTO `du_vaelger` VALUES (2, 'bcbcb', '80');
INSERT INTO `du_vaelger` VALUES (3, 'dgdsgdsgdg', '89');
INSERT INTO `du_vaelger` VALUES (4, 'dgdgdgd', '35');
Avatar billede tanettes Nybegynder
22. juni 2007 - 21:19 #21
har ikke lavet andet kode i db.php end det her:
<?php
mysql_connect('db.enterspace.dk', 'xxxxx', 'xxxxx');
mysql_select_db('web136720');
?>
(NOTE: password osv har jeg selvfølgelig ændret lige her)
Avatar billede tanettes Nybegynder
22. juni 2007 - 21:56 #22
men altså.. selvom jeg udkommentere session og header location så den ikke brokker sig over lige det, så indsætter den alligevel ikke de nye indtastninger i felterne i tabellen i databasen... meget meget mystisk
Avatar billede jakobdo Ekspert
22. juni 2007 - 23:31 #23
Så fandt jeg fejlen og nu virker det sgu! :o)

<?php
//http://www.eksperten.dk/spm/783578
session_start();
include('db.php');
if (isset($_POST['Submit']))
{
    foreach($_POST['produkt'] AS $key => $value)
    {
        $pris = mysql_real_escape_string($_POST['pris'][$key]);
        $produkt = mysql_real_escape_string($value);
        $key = intval($key);
        mysql_query("UPDATE du_vaelger SET pris='$pris', produkt='$produkt' WHERE id = '$key' LIMIT 1");
    }
    header("location: main2.php");
    exit();
}
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../style.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--

function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>

<body>
<div id="Layer1" style="position:absolute; width:757px; height:400px; z-index:1; overflow: auto;">
  <table width="689" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td><form name="form1" method="post" action="">
        <table width="667" height="38" border="0" cellpadding="0" cellspacing="0" bgcolor="#9A9CA6">
        <?php
        $query = mysql_query("SELECT * FROM du_vaelger");
                while($row=mysql_fetch_array($query))
                {
        ?>
          <tr>
            <td width="31" height="19">&nbsp;</td>
            <td width="539">&nbsp;</td>
            <td width="139">&nbsp;</td>
          </tr>
          <tr>
            <td height="19">&nbsp;</td>
            <td><input name="produkt[<?=$row['id'];?>]" type="text" class="box3" id="produkt4" value="<?=$row['produkt'];?>"></td>
            <td><input name="pris[<?=$row['id'];?>]" type="text" class="box2" id="pris" value="<?=$row['pris'];?>"></td>
          </tr>
          <?php
          }
          ?>
        </table>
        <input type="submit" name="Submit" value="OK">
      </form></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
    </tr>
  </table>
</div>
</body>
</html>
Avatar billede jakobdo Ekspert
22. juni 2007 - 23:31 #24
Og du får et svar!
Avatar billede tanettes Nybegynder
23. juni 2007 - 10:16 #25
nu virker den perfekt :) du for lige de 200 point.. men syntes du skal have mere så hvordan giver jeg dig det?
Avatar billede jakobdo Ekspert
23. juni 2007 - 10:35 #26
Jeg takker for point.
Man kan ikke give mere end 200 point og det er også ok.
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