Multidesk.be » Forums » PHP » UPDATE query

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Rob_Vloemans op donderdag 14 februari 2008 om 15:50:44.
Rob_Vloemans' avatar
Multiviteit: 18
Wat is er hier verkeerd aan de query? Want in de echo is de juiste waarde wel te zien die gewijzigd is.. (als ik $result als comment zet natuurlijk) Alleen word het niet naar de database geschreven...

PHP
  1.  
  2. <?php
  3. $db= sqlite_open("blogdb.sdb");
  4. $sql="UPDATE BlogItems SET (BlogItemTitle, BlogItemAuthor, BlogItemDate, BlogItemText)";
  5.         $sql .= "VALUES ('";
  6.         $sql .= $_POST["BlogItemTitle"] ."', '" ;
  7.         $sql .= $_POST["BlogItemAuthor"] ."', '" ;
  8.         $sql .= $_POST["BlogItemDate"] ."', '" ;
  9.         $sql .= $_POST["BlogItemText"] ."');";
  10.         $result = sqlite_query($db, $sql) or die ("FOUT: " . sqlite_last_error());
  11.        
  12.         echo("<h2>Blogitem successfully updated</h2>");
  13.         echo("The following data have been inserted:<br/><br/>\n");
  14.         echo("Title: <b>"$_POST["BlogItemTitle"] . "</b><br/>");
  15.         echo("Author: <b>"$_POST["BlogItemAuthor"] . "</b><br/>");
  16.         echo("Date: <b>"$_POST["BlogItemDate"] . "</b><br/>");
  17.         echo("Text: <b>"$_POST["BlogItemText"] . "</b><br/>");
  18.         echo("<br/><a href=\"admin.php\">back to admin</a>");
  19. ?>
  20.  
Good old vinyl
^ Reactie #1 geschreven door SMG op donderdag 14 februari 2008 om 16:05:52.
SMG's avatar
Multiviteit: 12000
Moderator
Beste methode: Toon je de SQL die wordt uitgevoegd, maw plaats de sqlite_query als comment en plaats er echo $sql; voor
Die SQL code kan je dan uitvoering bekijken en zien waar de fout zich precies bevindt ;)
Deze tekst werd het laatst bewerkt voor 27.44 % door SMG op donderdag 14 februari 2008 om 16:09:04.
^ Reactie #2 geschreven door thekid op donderdag 14 februari 2008 om 17:20:42.
thekid's avatar
Multiviteit: 5273
Moderator
is dit geen mix tussen een insert en een update statement?

CODE
  1.  
  2. UPDATE table SET field1 = '', field2 = '', field3 = '' where fieldId = 1;
  3.  

CODE
  1.  
  2. INSERT INTO table(field1, field2, field3) VALUES('', '', '');
  3.  
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #3 geschreven door Simon op donderdag 14 februari 2008 om 21:09:07.
Simon's avatar
Multiviteit: 3742
Jep, thekid heeft gelijk. Je hebt INSERT en UPDATE door elkaar gemixt.
Meer info over de juiste update-statements vind je hier.
Deze tekst werd het laatst bewerkt voor 9.28 % door Simon op donderdag 14 februari 2008 om 21:12:16.
^ Reactie #4 geschreven door Rob_Vloemans op vrijdag 15 februari 2008 om 09:39:33.
Rob_Vloemans' avatar
Multiviteit: 18
Toch niet hoor...

Dit werkt.. Ik kan de titel dus veranderen.. maar de titel verandert wel op elke rij.. elk record dus.. dus er moet nog een where bij.. Maar die krijg ik er niet goed achter.. krijg ik steeds een error

code die werkt..
PHP
  1. $sql="UPDATE BlogItems SET BlogItemTitle='"$_POST['BlogItemTitle'];


code die er nog achter moet..
PHP
  1. WHERE BlogItemID=".$_GET['id'];


Good old vinyl
^ Reactie #5 geschreven door Martijn op vrijdag 15 februari 2008 om 10:45:31.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Hoewel minder gekend, is dat wel een werkend statement in MySQL; dat is dus in principe niet fout (wat niet wegneemt dat je het misschien toch beter aanpast).

Lukt dit niet:
PHP
  1.  
  2. <?php
  3. $db= sqlite_open("blogdb.sdb");
  4. $sql="UPDATE BlogItems SET (BlogItemTitle, BlogItemAuthor, BlogItemDate, BlogItemText)";
  5.         $sql .= "VALUES ('";
  6.         $sql .= $_POST["BlogItemTitle"] ."', '" ;
  7.         $sql .= $_POST["BlogItemAuthor"] ."', '" ;
  8.         $sql .= $_POST["BlogItemDate"] ."', '" ;
  9.         $sql .= $_POST["BlogItemText"] ."') WHERE BlogItemID='".$_GET['id']."';";
  10.         $result = sqlite_query($db, $sql) or die ("FOUT: " . sqlite_last_error());
  11.        
  12.         echo("<h2>Blogitem successfully updated</h2>");
  13.         echo("The following data have been inserted:<br/><br/>\n");
  14.         echo("Title: <b>"$_POST["BlogItemTitle"] . "</b><br/>");
  15.         echo("Author: <b>"$_POST["BlogItemAuthor"] . "</b><br/>");
  16.         echo("Date: <b>"$_POST["BlogItemDate"] . "</b><br/>");
  17.         echo("Text: <b>"$_POST["BlogItemText"] . "</b><br/>");
  18.         echo("<br/><a href=\"admin.php\">back to admin</a>");
  19. ?>
  20.  
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #6 geschreven door Rob_Vloemans op vrijdag 15 februari 2008 om 11:18:22.
Rob_Vloemans' avatar
Multiviteit: 18
Het is deze query die ik moet uitvoeren.. Maar dan natuurlijk wel voor alle velden, hier is het alleen maar voor de tekst (tekstveld)..

CODE
  1.  
  2. UPDATE BlogItems
  3. SET BlogItemID = 5 , BlogItemText = 'Bla Bla bla bla!! bla bla'
  4. WHERE ROWID = 5
  5.  
Good old vinyl
^ Reactie #7 geschreven door Martijn op vrijdag 15 februari 2008 om 11:33:57.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Je zal dan toch meerdere queries moeten uitvoeren hoor...

Wat lukt er niet met die onderstaande query?

De where-clausule zou moeten kunnen werken zoals ik in je aangepaste code (in mijn vorige reactie) heb gezet.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #8 geschreven door Rob_Vloemans op vrijdag 15 februari 2008 om 11:58:40.
Rob_Vloemans' avatar
Multiviteit: 18
mmm nope.. kzal zelf nog eens wat prutsen.. Het is ook moeilijk om uit te leggen voor mij.. omdat ik zelf echt nog een noobie ben in php..

Je hoort nog van me..
Deze tekst werd het laatst bewerkt voor 8.31 % door Rob_Vloemans op vrijdag 15 februari 2008 om 11:59:02.
Good old vinyl
^ Reactie #9 geschreven door Martijn op vrijdag 15 februari 2008 om 12:54:01.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
We kunnen je maar proberen verder te helpen hé, beginner of niet ;-).

Probeer dit eens (weet niet of dit is wat je wil bereiken hoor):

PHP
  1. <?php
  2. $db= sqlite_open("blogdb.sdb");
  3. $sql="UPDATE BlogItems SET (BlogItemText)";
  4.         $sql .= "VALUES ('";
  5.         $sql .= addslashes($_POST["BlogItemText"]) ."') WHERE BlogItemID='".addslashes($_GET['id'])."';";
  6.         $result = sqlite_query($db, $sql) or die ("FOUT: " . sqlite_last_error());
  7. ?>
  8.  
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #10 geschreven door Rob_Vloemans op vrijdag 15 februari 2008 om 15:26:13.
Rob_Vloemans' avatar
Multiviteit: 18
Kijk.. ik heb dus een CMS-systeem gemaakt.. Ik kan al blogitems toevoegen en verwijderen.. Ik heb in men CMS-systeem een tabel staan waarin alle blogitems in staan die in de database staan.. Naast elk van die blogitems staan een knop "Change" en een knop "Delete".. De delete knop werkt dus al.. Als ik op de Change knop druk.. Word er een nieuwe pagina geladen met een klein formuliertje waarin Alles staat van die blogitem.. En zo kan ik dus deze gegevens veranderen.. Dan staat er vanonder een knop om die veranderingen door te brengen.. een knop die dus verwijst naar deze pagina..

UpdateBlogItem.php
PHP
  1. <?php
  2. $db= sqlite_open("blogdb.sdb");
  3. $sql="UPDATE BlogItems SET BlogItemTitle='".$_POST['BlogItemTitle'];
  4.         /*
  5.         $sql .= "VALUES ('";
  6.         $sql .= $_POST["BlogItemTitle"] ."', '" ;
  7.         $sql .= $_POST["BlogItemAuthor"] ."', '" ;
  8.         $sql .= $_POST["BlogItemDate"] ."', '" ;
  9.         $sql .= $_POST["BlogItemText"] ."');";
  10.         */
  11.         $result = sqlite_query($db, $sql) or die ("FOUT: " . sqlite_last_error());
  12.        
  13.         echo("<h2>Blogitem successfully updated</h2>");
  14.         echo("The following data have been inserted:<br/><br/>\n");
  15.         echo("Title: <b>"$_POST["BlogItemTitle"] . "</b><br/>");
  16.         echo("Author: <b>"$_POST["BlogItemAuthor"] . "</b><br/>");
  17.         echo("Date: <b>"$_POST["BlogItemDate"] . "</b><br/>");
  18.         echo("Text: <b>"$_POST["BlogItemText"] . "</b><br/>");
  19.         echo("<br/><a href=\"admin.php\">back to admin</a>");
  20. ?>


Wat dit nu al doet.. Is de titel veranderen van elk blogitem.. dus niet alleen van het geselecteerd.. maar van elk blogitem in de database.. en das normaal ook.. omdat er nu geen where bij staat.. (omdat dat voorlopig nog niet lukt)..

Het enigste is dus nog.. Die WHERE... waar en hoe moet die er komen... Ik heb echt al vanalles geprobeerd.. maar ik krijg altijd een error..
Deze WHERE moet er dus nog in..
PHP
  1. BlogItemID=".$_GET['id']


ps(niet op die commentaar regels letten.. die doen blijkbaar toch niets..) zoals ik al zei.. beginner ;)

, alvast bedankt
Deze tekst werd het laatst bewerkt voor 3.6 % door Rob_Vloemans op vrijdag 15 februari 2008 om 15:28:43.
Good old vinyl
^ Reactie #11 geschreven door Martijn op vrijdag 15 februari 2008 om 16:25:08.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Aha, dan zullen we dat eens trachten te fixen ;-).

PHP
  1. <?php
  2. $db= sqlite_open("blogdb.sdb");
  3. $sql="UPDATE BlogItems SET BlogItemTitle='".addslashes($_POST['BlogItemTitle'])."' WHERE BlogItemID='".addslashes($_GET['id'])."'";
  4.        
  5.         $result = sqlite_query($db, $sql) or die ("FOUT: " . sqlite_last_error());
  6.        
  7.         echo("<h2>Blogitem successfully updated</h2>");
  8.         echo("The following data have been inserted:<br/><br/>\n");
  9.         echo("Title: <b>"$_POST["BlogItemTitle"] . "</b><br/>");
  10.         echo("Author: <b>"$_POST["BlogItemAuthor"] . "</b><br/>");
  11.         echo("Date: <b>"$_POST["BlogItemDate"] . "</b><br/>");
  12.         echo("Text: <b>"$_POST["BlogItemText"] . "</b><br/>");
  13.         echo("<br/><a href=\"admin.php\">back to admin</a>");
  14. ?>


Probeer die code eens, lukt dat nog?

Let wel op, je gebruikt $_GET en $_POST door elkaar. Hoewel dat puur technisch gezien perfect mogelijk is, lijkt het mij onwaarschijnlijk in dit geval :-).

Anyway, moest de code niet werken, geef dan even mee welke error je precies krijgt?
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #12 geschreven door Rob_Vloemans op vrijdag 15 februari 2008 om 16:29:43.
Rob_Vloemans' avatar
Multiviteit: 18
Haha.. nice.. het werkt.. Nu dit nog voor alle andere velden en het is gefixed.. Je bent echt superhard bedankt martijn..

Omdat ik nog een noob ben wil ik toch wel even vragen waarvoor de addslashes dient?

Mega hard bedankt..

EDIT: " ' " Lukt wel niet.. dan geeft hij wel een error..
Deze tekst werd het laatst bewerkt voor 11.66 % door Rob_Vloemans op vrijdag 15 februari 2008 om 16:32:49.
Good old vinyl
^ Reactie #13 geschreven door Martijn op vrijdag 15 februari 2008 om 16:53:38.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Addslashes dient om je code te beschermen tegen mogelijke SQL injections. Ik stel voor dat je dit artikel eens doorneemt, zeer nuttig in jouw positie :).

Wat bedoel je precies met je edit?
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #14 geschreven door Rob_Vloemans op vrijdag 15 februari 2008 om 16:56:01.
Rob_Vloemans' avatar
Multiviteit: 18
de titel:

"Let's get physical" werkt niet..
"Lets get physical" werkt wel..
Good old vinyl
^ Reactie #15 geschreven door Martijn op vrijdag 15 februari 2008 om 17:10:50.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Voor mysql dien je addslashes() te gebruiken om je karakters te escapen, voor sqlite echter de functie sqllite_escape_string(). Vervang addslashes() dus even door sqllite_escape_string() en het zou moeten lukken :).
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #16 geschreven door Rob_Vloemans op vrijdag 15 februari 2008 om 17:16:54.
Rob_Vloemans' avatar
Multiviteit: 18
Het werkt.. maar dan word het wel..

Let\'s get physical (die slash komt er dus ook te staan)

ps het is wel sqlite_escape_string() ipv sqllite... maar soit.. deze kleine typfoutjes zijn menselijk.. wou het gewoon ff zeggen ;)
Good old vinyl
^ Reactie #17 geschreven door Martijn op vrijdag 15 februari 2008 om 17:34:57.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Het is inderdaad sqlite, my bad :).

Anyway, waarschijnlijk staat op je server dus magic_quotes_gpc aan (zie artikel). Je kan dus best eerst stripslashes() toepassen op je gpc data en vervolgens die sqlite_escape_string() functie erover laten runnen.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #18 geschreven door Rob_Vloemans op vrijdag 15 februari 2008 om 17:43:22.
Rob_Vloemans' avatar
Multiviteit: 18
Opgelost.. Bedankt hé..
Good old vinyl
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen