Avatar billede superrex Nybegynder
15. maj 2003 - 11:09 Der er 7 kommentarer og
1 løsning

Problemmer med insert update funktion

Jeg har denne kode som skriver værdien af 3 varer ned i en mysql database.
Det virker faktisk næsten perfekt, men når der allerede står en post i databasen og jeg kommer med 2 eller 3 poster som skal skrives opdatere den kun den post som allerede står i databasen. Det gør den fordi jeg her (if(mysql_num_rows($query) != 0) spørger om der allerede er noget i databasen og hvis der er det skal den opdatere den post.
Hvordan gør jeg sådan at jeg kan opdatere den ene post der allerede er der og insætter de nye poster som ikke er der? Håber at det er godt nok beskrevet.

Min kode!

$conn = mysql_connect("$dbname","$username","$password");
mysql_select_db($database,$conn) or die ("Kunne ikke åbne database");
$query = mysql_query("SELECT * FROM hardware WHERE username='$UID'");


if(mysql_num_rows($query) != 0) {
    $row = mysql_fetch_array($query);   
    echo "DER ER NOGET I DATABASEN!"; ?><br><br><?


for ($i=0;$i<count($query);$i++){
mysql_query("UPDATE hardware SET antal=$varer_antal[$i], dato='$varer_dato[$i]', subtotal='$varer_subtotal[$i]' WHERE username='$varer_bruger[$i]' and varenummer=$varer_varenr[$i]");
}
echo "<font color=\"darkgreen\">UPDATE"; ?><br><?   
} else {
    echo "DER ER INGENTING I DATABASEN!"; ?><br><br><?
for ($i=0;$i<count($query);$i++){
mysql("hardware","INSERT INTO hardware VALUES ('$varer_dato[$i]','$varer_bruger[$i]','$varer_type[$i]','$varer_varenr[$i]','$varer_antal[$i]','$varer_pris[$i]','$varer_subtotal[$i]')");

}
echo "<font color=\"darkgreen\">INSERT"; ?><br><?
}
mysql_close($conn);



Lige et dump!

# MySQL-Front Dump 2.2
#
# Host: localhost  Database: hardware
#--------------------------------------------------------
# Server version 3.23.52-nt


#
# Table structure for table 'hardware'
#

CREATE TABLE `hardware` (
  `dato` varchar(100) NOT NULL default '',
  `username` varchar(100) NOT NULL default '',
  `navn` varchar(100) NOT NULL default '',
  `varenummer` varchar(100) NOT NULL default '',
  `antal` varchar(100) NOT NULL default '',
  `pris` varchar(100) NOT NULL default '',
  `subtotal` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`varenummer`)
) TYPE=MyISAM;



#
# Dumping data for table 'hardware'
#
INSERT INTO hardware VALUES("13-05-03","thn","Printer","2345","5","500","2500");
INSERT INTO hardware VALUES("13-05-03","thn","Netkort","3456","5","50","250");
INSERT INTO hardware VALUES("13-05-03","thn","IBM PC","1234","5","1000","5000");
Avatar billede avminarm Juniormester
15. maj 2003 - 11:47 #1
jeg er ikke helt klar over hvad du vil - vil du blot indsætte nye varer i databasen??, men ellers er det nok fordi - databasen er jo ikke tom og derfor vile den jo finde en række i DB og derfor opdaterer den - det er kun nå DB er tom den indsætter
Avatar billede sthen Nybegynder
15. maj 2003 - 11:55 #2
Du er nødt til at skrue dit script lidt anderledes sammen, som forsøgt forklaret her.

Du er nødt til at sige:

Hvis den_vare_jeg_har_skrevet_nummeret_på_her står i databasen {
UPDATE .....
}
else
{
INSERT
}

Altså undersøge om den vare du har med at gøre nu, i forvejen er i databasen. Hvis den er det -> UPDATE ellers INSERT
Avatar billede superrex Nybegynder
15. maj 2003 - 11:57 #3
@sthen
Det har du helt ret i! men ved du hvordan man gør det?
Avatar billede superrex Nybegynder
15. maj 2003 - 11:59 #4
@avminarm
Jeg vil gerne kunne opdatere en vare hvis den allerede findes og insert hvis den ikke gør.
Avatar billede avminarm Juniormester
15. maj 2003 - 13:22 #5
*UTESTET* - men ideen er ok:
sørg for alle dine varer har et unikt ID:
CREATE TABLE `hardware` (
id int(11) NOT NULL auto_increment,
`dato` varchar(100) NOT NULL default ''


hvis de har det kan du lægge alle ID i et array og tjekke om ID er i dette array med in_array()

noget ala:

$conn = mysql_connect("$dbname","$username","$password");
mysql_select_db($database,$conn) or die ("Kunne ikke åbne database");
$query = mysql_query("SELECT * FROM hardware WHERE username='$UID'");

while($rowarr = mysql_fetch_array($query)){
  $varearray[] = $rowarr['id']; //benyttede ID'er sættes i et array
}

?>
<br><br>
<?
if(in_array($_POST['id'],$varearray){ //Varen er i ARRAYET hvis din vare bestilling kommer fra en form afsendt med POST
$row = mysql_fetch_array($query);   
echo "DER ER NOGET I DATABASEN!";
for ($i=0;$i<count($query);$i++){
mysql_query("UPDATE hardware SET antal=$varer_antal[$i], dato='$varer_dato[$i]', subtotal='$varer_subtotal[$i]' WHERE username='$varer_bruger[$i]' and varenummer=$varer_varenr[$i]");
}
echo "<font color=\"darkgreen\">UPDATE"; ?><br>

<?   
}elseif(!in_array($_POST['id'],$varearray){ //Varen er IKKE i ARRAYET hvis din vare bestilling kommer fra en form afsendt med POST
    echo "DER ER INGENTING I DATABASEN!"; ?><br><br><?
for ($i=0;$i<count($query);$i++){
mysql("hardware","INSERT INTO hardware VALUES ('$varer_dato[$i]','$varer_bruger[$i]','$varer_type[$i]','$varer_varenr[$i]','$varer_antal[$i]','$varer_pris[$i]','$varer_subtotal[$i]')");

}
echo "<font color=\"darkgreen\">INSERT"; ?><br><?
}
mysql_close($conn);
Avatar billede superrex Nybegynder
15. maj 2003 - 14:51 #6
Jeg har heller ikke testet det men det ser rigtigt ud og ideen er god, så du får dine point.
Avatar billede superrex Nybegynder
15. maj 2003 - 14:51 #7
Glemte og sige tak for hjælpen!
Avatar billede avminarm Juniormester
15. maj 2003 - 14:59 #8
var så lidt ;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