Avatar billede butcher Nybegynder
24. september 2003 - 14:08 Der er 3 kommentarer og
1 løsning

Opdatering sletter data

Jeg har 2 sider, en hvor man angiver hvilket produkt der skal opdateres, ser sådan her ud:

<form name="update" method="post" action="op.php">
find produkt, der skal opdateres
  <input name="update" type="text" id="update">
<input type="submit" name="Submit" value="Submit">
</form>

Så er der min op.php:

<?php
$con=mysql_connect("localhost", "root", "xxx")or die("Connect Error: ".mysql_error());
$db="flow";
mysql_select_db($db, $con);
// Request the data
$result = @mysql_query("SELECT * FROM pile WHERE nr = '$_REQUEST[update]'");
if (!$result) {
echo("<p>Error performing query: " . mysql_error() . "</p>");
exit(); }
// Display the data
while ( $row = mysql_fetch_array($result) ) {
?>
<center>
<B> Ret i databasen:</B><BR><BR>
<form action="<?=$PHP_SELF;?>" method="POST" name="form">
<table width="65%" border="5" cellspacing="2" cellpadding="5">

<tr><td><B>Nr:</B></td><td>
<B><input type="text" name="nr" maxlength="12"  size = "40" value="<?=$row[nr];?>"></B></td></tr>
<tr><td><B>Name:</B></td><td>
<B><input type="text" name="name" maxlength="35" size = "40" value="<?=$row[name];?>"></B></td></tr>
<tr><td><B>Size:</B></td><td>
<B><input type="text" name="size" maxlength="40"  size = "40" value="<?=$row[size];?>"></B></td></tr>
<tr><td><B>Page:</B></td><td>
<B><input type="text" name="page" maxlength="8"  size = "40" value="<?=$row[page];?>"></B></td></tr>
<tr><td><B>Ean:</B></td><td>
<B><input type="text" name="ean" maxlength="35"  size = "40" value="<?=$row[ean];?>"></B></td></tr>
<tr><td><B>pieces:</B></td><td>
<B><input type="text" name="pieceseur" maxlength="35"  size = "40" value="<?=$row[pieceseur];?>"></B></td></tr>
<tr><td><B>Netto:</B></td><td>
<B><input type="text" name="netto" maxlength="35"  size = "40" value="<?=$row[netto];?>"></B></td></tr>
</table>
<BR>
<input type="submit" value="opdatér" name="update">
</form>
<?php
}
if(isset($_REQUEST[update])){
$SQL = "UPDATE pile SET nr = '$nr', name = '$name', size = '$size', page = '$page', ean = '$ean', pieceseur = '$pieceseur', netto = '$netto    ' WHERE nr = $_REQUEST[update]";
mysql_query($SQL);
}
mysql_close();
?>

Den viser også data i forms, men når jeg så ændre data og trykker på opdater. bliver alle mine data fjernet :O

Så den kan godt "opdatere", den får bare ikke de nye data med.. :/

min tabelopbygning hvis den skal bruges:
CREATE TABLE `pile` (
  `id` int(11) NOT NULL auto_increment,
  `nr` varchar(15) NOT NULL default '',
  `name` varchar(50) default NULL,
  `size` varchar(20) NOT NULL default '',
  `page` int(3) NOT NULL default '0',
  `ean` int(20) NOT NULL default '0',
  `pieceseur` int(5) NOT NULL default '0',
  `netto` decimal(9,2) NOT NULL default '0.00',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
Avatar billede tjens Nybegynder
24. september 2003 - 14:52 #1
Mangler der ikke $_REQUEST på alle form felterne, inden de bruges i din SQL-UPDATE?

Der skal vel også byttes om på rækkefølgen, så du skriver til databasen, inden du opbygger svar-formen.

Jeg vil egentlig anbefale, at du klipper op.php op i to php-scripts, så du ikke er i tvivl om det er en form-visning eller en databaseupdate der skal udføres.

Som op.php er nu, skal den kaldes 2 gange, og kun anden gang er en update!
Avatar billede butcher Nybegynder
24. september 2003 - 15:03 #2
Den skal du nok liiige præcisere lidt bedre :)
Avatar billede tjens Nybegynder
24. september 2003 - 15:17 #3
Husk på at op.php skal kaldes 2 gange:

Form'en skal sendes tilbage til browseren, med de gamle data i, som allerede virker for dig.

Herefter afslutter op.php, og op.php bliver kaldt forfra, når brugeren er færdig med at taste i felterne.

Derfor starter jeg med at teste om nr. er udfyldt, idet det så er anden gang op.php bliver kaldt, og databasen skal opdateres:

<?php
$con=mysql_connect("localhost", "root", "xxx")or die("Connect Error: ".mysql_error());
$db="flow";
mysql_select_db($db, $con);

// update database if the form has already been filled in:
if(isset($_REQUEST[nr])){
$SQL = "UPDATE pile SET name = '$_REQUEST[name]', size = '$_REQUEST[size]', page = '$_REQUEST[page]', ean = '$_REQUEST[ean]', pieceseur = '$_REQUEST[pieceseur]', netto = '$_REQUEST[netto]' WHERE nr = $_REQUEST[nr]";
mysql_query($SQL);
}


// Request the data
$result = @mysql_query("SELECT * FROM pile WHERE nr = '$_REQUEST[update]'");
if (!$result) {
echo("<p>Error performing query: " . mysql_error() . "</p>");
exit(); }
// Display the data
while ( $row = mysql_fetch_array($result) ) {
?>
<center>
<B> Ret i databasen:</B><BR><BR>
<form action="<?=$PHP_SELF;?>" method="POST" name="form">
<table width="65%" border="5" cellspacing="2" cellpadding="5">

<tr><td><B>Nr:</B></td><td>
<B><input type="text" name="nr" maxlength="12"  size = "40" value="<?=$row[nr];?>"></B></td></tr>
<tr><td><B>Name:</B></td><td>
<B><input type="text" name="name" maxlength="35" size = "40" value="<?=$row[name];?>"></B></td></tr>
<tr><td><B>Size:</B></td><td>
<B><input type="text" name="size" maxlength="40"  size = "40" value="<?=$row[size];?>"></B></td></tr>
<tr><td><B>Page:</B></td><td>
<B><input type="text" name="page" maxlength="8"  size = "40" value="<?=$row[page];?>"></B></td></tr>
<tr><td><B>Ean:</B></td><td>
<B><input type="text" name="ean" maxlength="35"  size = "40" value="<?=$row[ean];?>"></B></td></tr>
<tr><td><B>pieces:</B></td><td>
<B><input type="text" name="pieceseur" maxlength="35"  size = "40" value="<?=$row[pieceseur];?>"></B></td></tr>
<tr><td><B>Netto:</B></td><td>
<B><input type="text" name="netto" maxlength="35"  size = "40" value="<?=$row[netto];?>"></B></td></tr>
</table>
<BR>
<input type="submit" value="opdatér" name="update">
</form>
<?php
}

mysql_close();
?>
Avatar billede butcher Nybegynder
24. september 2003 - 15:26 #4
Du er hermed min gud og personlige idol, yes det virkede sq!!

Kan godt se meningen i det, nu hvor koden er blev smidt ned.

Mange tak :D
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