login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Meerdere dingen in 1x updaten

Offline Ertje2010 - 06/03/2010 21:19
Avatar van Ertje2010Nieuw lid Hoi,

Ik wil graag d.m.v. een $_POST meerdere velden updaten, denk bijvoorbeeld aan een forum catagorie overzicht met omschrijvingen. Zoals PHPBB/IPB heeft. Nu wil bij zo'n soortgelijk iets met 1 update al die velden kunnen laten updaten.

Moet ik dan binnen die $_POST een loop maken om te checken wat er geupdate moet worden of? Heeft iemand een voorbeeldje?

18 antwoorden

Gesponsorde links
Offline vinTage - 06/03/2010 22:23
Avatar van vinTage Nieuw lid update kolom were condition = 'iets' ?
Offline Jelmerholland - 06/03/2010 23:36
Avatar van Jelmerholland PHP beginner Ga Mysql leren? 
Offline Ertje2010 - 07/03/2010 14:16
Avatar van Ertje2010 Nieuw lid Ik kan MySQL, kan ook joins etc. Echter kom ik hier gewoon even niet uit.

Ik heb deze structuur.

id naam1 naam2

Nu heb ik een formulier die die gegevens uitleest, waarbij je naam2 kunt 'updaten'.
Echter gaat dat nooit werken in 1 query aangezien ik dus alles in 1x wil updaten.

Heeft iemand hier even een klein voorbeeldje van (loopje) want ik kom er nu even niet uit.
Offline YesItIsChris - 07/03/2010 14:20
Avatar van YesItIsChris Nieuw lid http://www.site...aytoString


$sQuery = "UPDATE tblcat SET ".ArraytoString( $_POST, "'key' = 'value'", ', ')." WHERE catid='".$iID."'";
Offline Jelmerholland - 07/03/2010 14:22 (laatste wijziging 07/03/2010 14:23)
Avatar van Jelmerholland PHP beginner Wacht ff:

Je hebt dus een tabel, met:
ID | naam1 | naam2

Nou heb je een formulier, en als je op 'submit' drukt, dan moet hij naam1 updaten?
Of wil je dat hij naam1 EN naam2 update waar ID = [een bepaalde] id?

Je kan gewoon zoiets doen
(safe() is een functie met mysql_real_escape_string(), is altijd beter, scheelt typwerk enzo ;) )
  1. mysql_query("UPDATE tabel
  2. SET(
  3. 'naam1' = safe(".$_POST['naam1']."),
  4. 'naam2' = safe(".$_POST['naam2'].")
  5. )
  6. WHERE ID = ".safe($_GET['id'])."
  7. ");


Zoiets zou moeten werken (zitten vast wat foutjes in, maar het is nog vroeg, ben net wakker ;) )

Is dit wat je bedoelt?
Offline Erwin2010 - 08/03/2010 10:50
Avatar van Erwin2010 Nieuw lid Om globaal het idee te hebben:

Ja, echter is dit niet juist.
Hij laad de gegevens vanuit een while, met daarin id, info/text welke veranderd kan worden.

Nu is de id, en de omschrijving/text dus telkens anders.

vandaar dat je queries krijgt als:

UPDATE tabel SET translation='x' WHERE id=id
UPDATE tabel SET translation='x' WHERE id=id
UPDATE tabel SET translation='x' WHERE id=id
UPDATE tabel SET translation='x' WHERE id=id
UPDATE tabel SET translation='x' WHERE id=id
UPDATE tabel SET translation='x' WHERE id=id

(stel dat ik dus 6 dingen wijzig), dat gaat dus wel in 1 query maar om daar nou op te checken..)

Makkelijker lijkt me dit idee dus.. (gaat niet om 5000 queries per keer trouwens)
Offline Ertje2010 - 08/03/2010 21:32
Avatar van Ertje2010 Nieuw lid Niemand die me snapt, of dit zelf heeft mee gemaakt?
Offline TotempaaltJ - 08/03/2010 22:05
Avatar van TotempaaltJ PHP interesse Je doet gewoon in een for loopje een aantal UPDATE's?
Offline Ertje2010 - 08/03/2010 22:08
Avatar van Ertje2010 Nieuw lid Ja, maar mijn probleem is nu dat ik niet met m'n heldere geest weet hoe ik 'm precies kan checken.

Ik geef alles een hidden input mee die er zo uitziet:
<input type="hidden" name="translation_id" value="13">

En de tekst zelf (content) ziet er altijd zo uit:
<input type="text" name="translation" value="Contact" style="width: 260px;">

Nu kan ik die translation misschien beter omzetten in bijv translation_13 (id nr?)?
Offline vinTage - 08/03/2010 22:11 (laatste wijziging 08/03/2010 22:12)
Avatar van vinTage Nieuw lid Erwin2010/Ertje2010 schizofreen?...


  1. "update tabel set kolom1 = 'a', kolom2 = 'b', kolom3 = 'c' where id = 'id' "



welk account mag ik deactiveren?
Offline Ertje2010 - 08/03/2010 22:20
Avatar van Ertje2010 Nieuw lid Hoe weet je nou van te voren wat de update word als dat elke keer anders kan zijn doordat die velden vanuit MySQL worden gehaald.

Welke wil je deactiveren? Mij maakt het niet uit
Offline Martijn - 08/03/2010 22:29 (laatste wijziging 08/03/2010 22:29)
Avatar van Martijn Crew PHP je maakt een checkboc:
  1. <input type="checkbox" name='voorbeeld[$replyid]' />
  2. <input type='text' name='tekstvakje$replyid' />

waar $replyid het id is van je reply of wat dan ook

dan in php
  1. foreach($_POST['voorbeeld'] as $key=> $value){
  2. mysql_query("UPDATE tabelnaam SET voorbeeldKolom = ".$_POST['tekstvakje'.$key]."") or die(mysql_error());
  3. }
Offline vinTage - 08/03/2010 22:57
Avatar van vinTage Nieuw lid
  1. <form action="" method="post">
  2. <?php
  3. //query naar "forumcats" => fictieve query
  4. $fictief = array(1 => "aap", 2 => "noot", 3 => "vuur");//nameaak db (id/value)
  5. for($i = 1; $i <= count($fictief); $i++) //fictieve fetch
  6. {
  7. ?>
  8. <input name="veldje[<?php echo $i;?>]" type="text" value="<?php echo $fictief[$i];?>" />
  9. <?php
  10. }
  11. ?>
  12. <input name="update" type="submit" value="update" />
  13. </form>
  14.  
  15.  
  16. <?php
  17. if(isset($_POST['update']))
  18. {
  19. foreach($_POST['veldje'] as $key => $val)
  20. {
  21. echo "mysql_query('update tabel set kolom = '".$val."' where id = ".$key.")<br />";
  22. }
  23. }
  24. ?>
Offline Jelmerholland - 08/03/2010 23:17
Avatar van Jelmerholland PHP beginner Wat dacht je ervan de id met een $_GET met te sturen?
Offline vinTage - 08/03/2010 23:21
Avatar van vinTage Nieuw lid
Jelmerhollan schreef:
Wat dacht je ervan de id met een $_GET met te sturen?

\En wat is daar het voordeel/meerwaarde van ?
Offline Jelmerholland - 09/03/2010 08:03
Avatar van Jelmerholland PHP beginner Dan kan je, wat hij wilde, heel gemakkelijk de waarde van je id veranderen toch?
Offline Ertje2010 - 10/03/2010 10:57 (laatste wijziging 10/03/2010 11:38)
Avatar van Ertje2010 Nieuw lid Ik heb nu als query:
  1. foreach($_POST['translation_id'] as $key => $val)
  2. {
  3. mysql_query("UPDATE translation_texts SET translation='".addslashes($_POST['translation'.$key.''])."' WHERE id='".$_POST['translation_id']."'") or die(mysql_error());
  4. }

En html/php
  1. <input type="hidden" name="translation_id" value="'.$translations['id'].'">
  2. <input type="text" name="translation_'.$translations['id'].'" value="'.stripslashes($translations['translation']).'" style="width: 260px;">


Enig idee waarom 't niet werkt?
Bij print_r($_POST) krijg ik door;

  1. Array ( [translation_id] => 68 [translation_52] => Inloggen op %sitename% [translation_53] => Inloggen [translation_54] => Inloggen op %sitename%. [update_translation] => Update translation )


Edit:

Inmiddels dankzij Ontani de oplossing, foreach was fout en even wat dingen aangepast.
Offline Jelmerholland - 10/03/2010 15:24 (laatste wijziging 10/03/2010 15:25)
Avatar van Jelmerholland PHP beginner Geen idee, sorry.
Maar addslashes is verouderd, gebruik hiervoor mysql_real_escape_string()
(zie deze post)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.245s