Avatar billede gulvflaesk Nybegynder
30. august 2010 - 15:46 Der er 14 kommentarer og
1 løsning

Opdatere information i database

Hej Eksperter,

Jeg sidder og laver en lille webshop, og vil gerne have et ekstrem simpelt CMS hvor jeg kan rette og oprette produkter. Opret af produkter fungere fint, men opdateringen kan jeg ikke finde ud af.

Håber i kan/vil hjælpe...

Her er koden jeg har på admin-siden:

$result = mysql_query("SELECT * FROM products ORDER BY id DESC");


while($row = mysql_fetch_array($result))
  {
  echo "<form action=\"update.php\" method=\"post\">";
  echo "<b>ID: </b>" . $row['id'] . "<br />";
  echo "<input type=\"text\" name=\"title\" value=" . $row['title'] . " /><br />";
  echo "<input type=\"text\" name=\"body\" value=" . $row['body'] . " /><br />";
  echo "<input type=\"text\" name=\"price\" value=" . $row['price'] . " /><br />";
  echo "<input type=\"text\" name=\"image\" value=" . $row['image'] . " /><br /><br />";
  echo "<input type=\"submit\" value=\"Opdater produkt\" /><br /><br /><br />";
  }

mysql_close($con);


Her er koden i update.php som jeg ikke kan finde ud af at fremstille:

$sql="UPDATE INTO products (title, body, price, image)
VALUES
('$_POST[title]','$_POST[body]','$_POST[price]','$_POST[image]')";

if (!mysql_query($sql,$con))
  {
  die('Fejl: ' . mysql_error());
  }
echo "Produktet er opdateret";

mysql_close($con);


Fortsat god dag til alle :-)
Avatar billede Slettet bruger
30. august 2010 - 16:04 #1
Uden at have undersøgt det i detaljer: Der skal ikke være noget "INTO" i UPDATE sætningen.
- det bruges kun i INSERT
Avatar billede Slettet bruger
30. august 2010 - 16:07 #2
Syntaxen for UPDATE i SQL ser således ud: UPDATE table SET col1=value, col2=value, ... WHERE colX=value

Et eksempel på at opdaterer information på Produkt #1 kunne se således ud:
mysql_query("UPDATE `products` SET `title` = '{$_POST["title"]}', `body` = '{$_POST["body"]}', `price` = {settype($_POST["price"], "float")}, `image` = '{$_POST["image"]}' WHERE `id` = 1");
Avatar billede Slettet bruger
30. august 2010 - 16:07 #3
Og faktisk skal hvert felt/værdi-par nævnes specifikt:

UPDATE tabel SET felt1='blabla', felt2='sniksnak', felt3='slut' WHERE id='prid'

Se:http://dev.mysql.com/doc/refman/5.0/en/update.html
Avatar billede gulvflaesk Nybegynder
30. august 2010 - 22:08 #4
Tak for alle Jeres svar.

Men jeg forstår det ikke, kan man ikke bare få det som virker til at indsætte i databasen ikke bare kan omkodes til at opdatere.

Jeg kan ganske enkelt ikke finde ud af at omsætte Jeres informationer til mit site.

Hvor skal det indsættes og hvad skal evt. væk fra koden...

Når jeg indsætter dette:

$sql="UPDATE `products` SET `title` = '{$_POST["title"]}', `body` = '{$_POST["body"]}', `price` = {settype($_POST["price"], "float")}, `image` = '{$_POST["image"]}' WHERE `id` = 1";

Istedet for dette:
$sql="UPDATE INTO products (title, body, price, image) VALUES ('$_POST[title]','$_POST[body]','$_POST[price]','$_POST[image]')";

Får jeg følgende fejl:
Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/user1/html/ehandel/update.php on line 11
Avatar billede Slettet bruger
30. august 2010 - 22:25 #5
Prøv denne:

$sql="UPDATE products SET ".
  "title='".      mysql_real_escape_string($_POST["title"])      ."',".
  "body='".    mysql_real_escape_string($_POST["body"])    ."',".
  "price='".    mysql_real_escape_string($_POST["price"])    ."',".
  "image='".  mysql_real_escape_string($_POST["image"])  ."' ".
  "WHERE id='1'  ";
Avatar billede gulvflaesk Nybegynder
30. august 2010 - 22:40 #6
Hej T4NK3R,

Det er fantastisk!! Tusinde tak for hjælpen så langt...

Den virker kun når jeg ændre ID 1, når jeg prøver at ændre ID 2 sker der ingenting. Men som sagt ID 1 virker...

Ved du tilfældigvis hvordan at det automatisk tager det ID jeg ændrer :-)
Avatar billede Slettet bruger
31. august 2010 - 00:04 #7
Du skal jo på én eller anden måde have splittet dine produkter op.
I dit første indlæg pumper du ALLE produkterne ud - med en <form> for hver
- ingen </form> - dén går ikke.

Jeg ville lægge dem ud i en link-liste - som man kan klikke på, og "åbne" dem ét af gangen, på et rette-dokument (<form>), rette og gemme.

Altså 3 php-dokumenter (foruden det du allerede bruger til at oprette med):

1 produktListe.php:
echo "<a href='retProdukt.php?id=".$row['id']."'>".$row['title']."</a><br>";

2 retProdukt.php: som henter og viser det ene produkt i en form.
"SELECT * FROM products WHERE id='".mysql_real_escape_string($_GET["id"])."'"
<form action="gemProdukt.php" method="POST">
echo "<input type='hidden' name='id' value='".$_GET["id"]."'>";
+ <input>'er for resten af felterne ( som i din oprettelsesformen)
</form>

3 gemProdukt.php: som modtager rettelserne fra retProdukt.php, og UPDATE'er databasen:

$sql="UPDATE products SET ".
  "title='".      mysql_real_escape_string($_POST["title"])      ."',".
  "body='".    mysql_real_escape_string($_POST["body"])    ."',".
  "price='".    mysql_real_escape_string($_POST["price"])    ."',".
  "image='".  mysql_real_escape_string($_POST["image"])  ."' ".
  "WHERE id='".mysql_real_escape_string($_POST["image"])."'  ";

- og tilsidst sender dig tilbage til produktListe.php
Avatar billede gulvflaesk Nybegynder
31. august 2010 - 15:42 #8
Nu har jeg lavet listen, så linket kommer ud for hvert ID og linker til retprodukt.php:

$result = mysql_query("SELECT * FROM products ORDER BY id DESC");

while($row = mysql_fetch_array($result))
  {
  echo "<a href=\"retprodukt.php?id=".$row['id']."\">";
  echo "<b>" . $row['title'] . "</b>";
  echo "</a><br />";


Det virker vist, jeg kommer til siden og ID'et står øverst men felterne er tomme på retprodukt.php:


$sql = mysql_query("SELECT * FROM products WHERE id='".mysql_real_escape_string($_GET["id"])."'");

  echo "<form action=\"gemprodukt.php\" method=\"post\">";
  echo "<b>ID: </b>".$_GET["id"]."<br />";
  echo "<input type=\"text\" name=\"title\" value=".$_GET["title"]." /><br />";
  echo "<input type=\"text\" name=\"body\" value=".$_GET["body"]." /><br />";
  echo "<input type=\"text\" name=\"price\" value=".$_GET["price"]." /><br />";
  echo "<input type=\"text\" name=\"image\" value=".$_GET["image"]." /><br /><br />";
  echo "<input type=\"submit\" value=\"Opdater produkt\" /><br /><br /><br />";
  echo "</form>";


gemprodukt.php ser sådan ud:

$sql="UPDATE products SET ".
  "title='".      mysql_real_escape_string($_POST["title"])      ."',".
  "body='".    mysql_real_escape_string($_POST["body"])    ."',".
  "price='".    mysql_real_escape_string($_POST["price"])    ."',".
  "image='".  mysql_real_escape_string($_POST["image"])  ."' ".
  "WHERE id='".mysql_real_escape_string($_POST["id"])."'  ";
 
  echo ("Hurra!");


Tusinde tak for hjælpen indtil videre, håber at du måske kan hjælpe mig i mål :-)

På forhånd mange tusinde tak!
Avatar billede Slettet bruger
31. august 2010 - 17:47 #9
retprodukt.php
Du skal jo liige ha' rystet data'ene ud af databasen - og så bruge dem i value'rne:

$result = mysql_query("SELECT * FROM products WHERE id='".mysql_real_escape_string($_GET["id"])."'");
$row = mysql_fetch_array($result);

  echo "<form action=\"gemprodukt.php\" method=\"post\">";
  echo "<b>ID: </b>".$_GET["id"]."<br />";
  echo "<input type=\"text\" name=\"title\" value=".$row["title"]." /><br />";
  echo "<input type=\"text\" name=\"body\" value=".$row["body"]." /><br />";
  echo "<input type=\"text\" name=\"price\" value=".$row["price"]." /><br />";
  echo "<input type=\"text\" name=\"image\" value=".$row["image"]." /><br /><br />";
  echo "<input type=\"submit\" value=\"Opdater produkt\" /><br /><br /><br />";
  echo "</form>";


Og i gemprodukt - eksekvere $sql'en:

$sql="UPDATE products SET ".
  "title='".      mysql_real_escape_string($_POST["title"])      ."',".
  "body='".    mysql_real_escape_string($_POST["body"])    ."',".
  "price='".    mysql_real_escape_string($_POST["price"])    ."',".
  "image='".  mysql_real_escape_string($_POST["image"])  ."' ".
  "WHERE id='".mysql_real_escape_string($_POST["id"])."' ";
if (mysql_query($sql))
    echo "<html><head><script>alert('Hurraaaa');window.location.href='produktliste.php'</script></head></html>";
else
    echo "<html><body>Problem ved opdatering:".mysql_error()."</body></html>";
Avatar billede gulvflaesk Nybegynder
31. august 2010 - 23:03 #10
Nu har jeg indsat det præcis som du har skrevet, og det får ganske vist det hele frem i felterne i <form>'en, men når jeg ændre f.eks. en title så kommer den med "Hurraaa "-besked men det bliver ikke ændret i databasen :-(

Hvad kan det skyldes?

Tak for din fantastiske tålmodighed med mig :-)
Avatar billede Slettet bruger
31. august 2010 - 23:41 #11
Det var mystisk.. Er du sikker ?
- Måske er listen bare cachet (viser det samme som sidst uden at spørge serveren)
For hvis den kommer ud og siger "hurraaaa" - så lykkedes det UPDATE'n (sgu)!

Du kan evt. prøve at udskrive HVAD den opdaterede - altså hvordan UPDATE-sætningen så ud.
Hvis du ændrer:
    echo "<html><head><script>alert('Hurraaaa');window.location.href='produktliste.php'</script></head></html>";
til
    echo "<html><head><script>alert('Hurraaaa: $sql');window.location.href='produktliste.php'</script></head></html>";
Avatar billede gulvflaesk Nybegynder
01. september 2010 - 00:29 #12
Den skriver følgende ud:

<html><head><script>alert('Hurraaaa: UPDATE products SET title='T-shirt',body='Beskrivelse',price='45.00',image='test.png' WHERE id='' ');window.location.href='produktliste.php'</script></head></html>

Kan det passe at jeg mangler et ID?
Avatar billede Slettet bruger
01. september 2010 - 09:36 #13
Ja, det er præcis dét som er galt - det er fordi du har fjernet det skjulte id-felt


echo "<form action=\"gemprodukt.php\" method=\"post\">";
  echo "<input type='hidden' name='id' value='".$_GET["id"]."' /><br />";
  echo "<input type=\"text\" name=\"title\" value=".$row["title"]." /><br />";
  echo "<input type=\"text\" name=\"body\" value=".$row["body"]." /><br />";
  echo "<input type=\"text\" name=\"price\" value=".$row["price"]." /><br />";
  echo "<input type=\"text\" name=\"image\" value=".$row["image"]." /><br /><br />";
  echo "<input type=\"submit\" value=\"Opdater produkt\" /><br /><br /><br />";
echo "</form>";
Avatar billede gulvflaesk Nybegynder
01. september 2010 - 09:45 #14
Sådan! Det virker! Jubiii!

Tusinde tak for din store tålmodighed, og fantastiske hjælp!

Skriv et svar så jeg kan overføre point...

Du er et herligt menneske T4NK3R!
Avatar billede Slettet bruger
01. september 2010 - 11:53 #15
Selv tak - Sådan ER vi bare, her i branchen : )
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