login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Update Multiple rows werkt niet (Opgelost)

Offline Ruultje - 08/10/2009 04:17 (laatste wijziging 08/10/2009 04:18)
Avatar van RuultjeNieuw lid Ik zit met een volgend probleem. Ik probeer het al vanaf maandagavond ervoor te zorgen dat ik meerdere tabellen in één keer kan updaten middels een query. Het lukt wel wanneer ik iets nieuws toevoeg (met INSERT) maar niet wanneer ik iets wil wijzigen. Heb al diverse dingen geprobeerd, nog wat scrips gezocht maar ze willen allen niet werken. De ene keer voegt hij niets toe, de andere keer voegt hij wel iets toe maar zet hij overal dezelfde waarde neer. Deze tabel (uren) wordt zelf gekoppeld aan de tabel diensten. De id daarvan wordt ook verwezen aan de uren. Dus zijn er drie werkzaamheden verricht dan komen deze drie keer in de urentabel te zijn met drie keer dezelfde id dus. Hij schrijft deze echter niet naar de database. Bij print_r zie ik wel dat hij het juiste daarin wél selecteert. Maar niet naar de database. Hieronder de code. Wat gaat hier fout? Zit zelfs (zoals nu alweer) tot diep in de nacht te zoeken naar de fout maar kan niks vinden. Nu maar gaan slapen want moet er over vier uur weer uit ;) . Hieronder in ieder geval de code.

  1. <?php
  2. $sql="SELECT * FROM uren WHERE id = '5'";
  3. $result=mysql_query($sql);
  4. $count = mysql_num_rows($result);
  5.  
  6. ?>
  7. <table width="500" border="0" cellspacing="1" cellpadding="0">
  8. <form name="form1" method="post" action="">
  9. <tr>
  10. <td>
  11. <table width="500" border="0" cellspacing="1" cellpadding="0">
  12.  
  13.  
  14. <tr>
  15. <td align="center"><strong>Id</strong></td>
  16. <td align="center"><strong>Taak</strong></td>
  17. <td align="center"><strong>Uren</strong></td>
  18. </tr>
  19. <?php
  20. while($rows=mysql_fetch_array($result)){
  21. ?>
  22. <tr>
  23. <td align="center"><input type="text" name="id[]" value="<?php echo $rows['id'] ?>"></td>
  24. <td align="center"><input name="taak[]" type="text" value="<?php echo $rows['taak'] ?>"></td>
  25. <td align="center"><input name="uur[]" type="text" value="<?php echo $rows['uur']; ?>"></td>
  26.  
  27. </tr>
  28. <?php
  29. }
  30. ?>
  31. <tr>
  32. <td colspan="4" align="center"><input type="submit" name="submit" value="Bewerk"></td>
  33. </tr>
  34. </table>
  35. </td>
  36. </tr>
  37. </form>
  38. </table>
  39. <?php
  40.  
  41. if(isset($_POST['submit'])){
  42.  
  43. for($i=0;$i<$count;$i++){
  44. $id = mysql_escape_string($_POST['id']);
  45. $taak = mysql_escape_string($_POST['taak']);
  46. $uur = mysql_escape_string($_POST['uur']);
  47.  
  48. $sql1="UPDATE uren SET taak='$taak[$i]', uur='$uur[$i]' WHERE id='$id'";
  49. $result1=mysql_query($sql1)
  50. or die ("Er is niets bewerkt");
  51. echo "Uren zijn bijgewerkt";
  52. }
  53. }
  54.  
  55. ?>


En de gegevens die doorgegeven worden maar zo niet terecht komen in de database.

  1. [id] => Array ( [0] => 5 [1] => 5 [2] => 5 )
  2. [taak] => Array ( [0] => Programmeren [1] => Design [2] => Administratie )
  3. [uur] => Array ( [0] => 3 [1] => 3 [2] => 2)
  4. )

8 antwoorden

Gesponsorde links
Offline jaronneke - 08/10/2009 08:25 (laatste wijziging 08/10/2009 08:26)
Avatar van jaronneke MySQL interesse
  1. <?php
  2. foreach ($_POST['id'] AS $key => $value)
  3. {
  4. echo $key.":".$value."<br />";
  5. }
  6.  
  7. echo "<br />";
  8. #of
  9.  
  10. foreach ($_POST AS $key2 => $value2)
  11. {
  12. if (!empty($_POST[$key2]))
  13. {
  14. echo $key2.":".$value2."<br />";
  15. }
  16. }
  17. ?>
Offline ArieMedia - 08/10/2009 08:42 (laatste wijziging 08/10/2009 08:48)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
jaronneke schreef:
[..code..]

lol, weet je wel wat je hier controleert bij de if?
Inderdaad, of de value bestaat... en wat zeg je in de foreach?
as $key => $value..

Kortom.. een controle of $value niet leeg is, is beter.. nu ben je 2 dingen door elkaar aan het halen

Edit: Daarnaast leuk dat je kan uitleggen hoe een foreach werkt, maar bij jou reacties zie ik niks anders dan een functie die je een keertje rondgalmt.. Maar ik hoor jou nooit iets zeggen hoe je het toepast en daar erger ik me nogal aan.. Dus kan jij een voorbeeld geven hoe jij die foreach wil gebruiken in dit script?

No offence  
Offline Ruultje - 08/10/2009 10:31 (laatste wijziging 08/10/2009 10:35)
Avatar van Ruultje Nieuw lid Ik heb die bovenstaande even toegevoegd. Ik krijg dan dit eruit. Maar hij voegt het nog altijd niet toe in de database.

  1. id: Array
  2. taak:Array
  3. uur:Array
  4.  
  5. Uren zijn bijgewerkt
Offline jaronneke - 08/10/2009 11:06 (laatste wijziging 08/10/2009 11:06)
Avatar van jaronneke MySQL interesse Doe eens alleen dan ,

echo "<pre>";
print_r($_POST['id']);
echo "</pre>";

Wat is daar het resultaat van?
Offline ArieMedia - 08/10/2009 11:15 (laatste wijziging 08/10/2009 11:17)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
jaronneke schreef:
Doe eens alleen dan ,

echo "<pre>";
print_r($_POST['id']);
echo "</pre>";

Wat is daar het resultaat van?
Dat staat bovenaan in de post,
[id] => Array ( [0] => 5 [1] => 5 [2] => 5 ) .

Maar het is slimmer om jou array anders op te delen.. namelijk per taak..
dan ga je dit krijgen:


  1. [Programmeren] => Array([id] => 5 [uur] => 3)
  2. [Design] => Array([id] => 5, [uur] => 3)
  3. [Administratie] => Array([id] => 5, [uur] => 2)
  4. )


En als het ID altijd gelijk aan elkaar is kan je het nog gemakkelijker doen,

  1. Array => 5 (
  2. [Programmeren] => 3)
  3. [Design]=> 3)
  4. [Administratie] => 2)
  5. )
  6. )

Hier staat 5 voor het ID, je geeft hier je taak mee als key en de value is het aantal uren.

Zoals je ziet is dit voor het oog ook al veel gemakkelijker lezen, je hoeft nu niet alles per array bij elkaar te gaan zoeken, je hebt namelijk per taak alles bij elkaar staan.  
Offline Ruultje - 08/10/2009 20:00
Avatar van Ruultje Nieuw lid Oké. Zal eens proberen.

Heb mysql_insert_id erbij toegevoegd. Dan voegt hij wel iets toe aan de database maar zet hij dezelfde gegevens neer. Beter gezegd hij pakt alleen het laatste dat is ingevoerd maar zet dat in elke rij (in deze drie keer.

Bij ID 5 staat dan bijvoorbeeld
Taak Administratie Uren 2
Taak Administratie Uren 2
Taak Administratie Uren 2

Dat is natuurlijk ook niet de bedoeling. Maar hij voegt nu wel iets toe in de database. Maar goed heb liever dat hij dit helemaal goed doet. Wordt er een beetje moedeloos van ;)
Offline ArieMedia - 09/10/2009 09:04
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Probeer het volgende:

Maak een tabel aan "taken" zet hierin je opdrachtgever oid
Tabel taken
id (int), auto_incr, primary_key
opdrachtgever (varchar),
begin_datum (date)
eind_datum (date)

En tabel uren
id (int), auto_incr, primary_key
taak_id (int)
taak (varchar)
uren (int)

  1. <?php
  2. // voorbeeld array
  3. $aTaken = array(5 => array( // taak_id 5
  4. 'programmeren' => 5,
  5. 'design' => 3,
  6. 'administratie' => 2
  7. ),
  8. 6 => array( // taak_id 6
  9. 'programmeren' => 4,
  10. 'design' => 6,
  11. 'overleg' => 1
  12. )
  13. );
  14. foreach($aTaken as $iTaakID => $aTasks) { // Taak_id met taken ophalen
  15. echo '<h2>Taak ID '.$iTaakID.'</h2>';
  16. foreach($aTasks as $sTask => $iDurance) { // de taak en de tijd
  17. $sql = 'INSERT INTO uren
  18. (taak_id, taak, uren)
  19. VALUES ('.$iTaakID.', "'.$sTask.'", '.$iDurance.')';
  20. echo $sql.'<br>';
  21. }
  22. }
  23.  
  24. ?>


Nu zal je PER taak de volgende SQL kunnen uitvoeren:

  1. SELECT taak, uren FROM uren WHERE taak_id = 5

er zit een koppeling tussen taken.id en uren.taak_id

Hopelijk kan je hiermee verder
Offline Ruultje - 09/10/2009 18:51 (laatste wijziging 10/10/2009 02:08)
Avatar van Ruultje Nieuw lid Dankjewel. Ik ga deze zometeen eens uitproberen. Wanneer het gelukt is dan zal ik hem markeren als opgelost. Zo niet dan laat ik het weten. Maar denk dat ik er zo wel ga uitkomen.

Edit: deze werkt in ieder geval wel. Met deze kan ik in ieder geval verder (bouwen).

Nu heb ik nog één probleem en dan moet ik zeker wel verder komen. Maar die vraag zal ik in een nieuw topic stellen. Beter voor het overzicht. In ieder geval bedankt voor deze. Het idee is veel beter en zo is het ook veel makkelijker dan de wanneer de ene tabel geen auto_increment heeft. Denk dat vooral daar het grootste probleem in heeft gezeten.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.241s