login  Naam:   Wachtwoord: 
Registreer je!
 Forum

UPDATE- en SELECT-query met inner join

Offline Guido2 - 14/08/2010 15:29 (laatste wijziging 17/08/2010 13:07)
Avatar van Guido2Nieuw lid Ik wil een UPDATE maken over de tabel 'verslag', maar heb daarvoor de gegevens nodig van nog twee tabellen.

Van lijst heb ik 'extra 9' nodig. Dat is de gebruikersnaam.

Van verslag heb ik 'ww nodig. Dat is het wachtwoord.'

'extra 9' en 'ww' vraag ik op met de volgende form action.

  1. Gebruikersnaam<br>
  2.  
  3. <form action="vs4.php" method="post">
  4. <input type="int" name="extra9" value"" ><br><br>
  5. Wachtwoord<br>
  6.  
  7. <input type="text" name="ww" value"" ><br><br>
  8.  
  9. <input type="Submit" name="submit1"value="verslag"><br><br>
  10.  
  11. </form>


De update maak ik in het bestand vs4.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <meta http-equiv="content-type" content="text/html; charset=utf8_unicode_ci" />
  6. <title></title>
  7.  
  8. <link rel= "stylesheet" href="menu_style.css" type="text/css" />
  9. <link href="opmaak.css" rel="stylesheet" type="text/css"/>
  10.  
  11. </head>
  12.  
  13. <div id="container">
  14.  
  15. <div id="header3">
  16.  
  17. <body>
  18. <?php
  19. include ("db_connect.inc.php");
  20.  
  21. // controleren of pagina zichzelf heeft aangeroepen
  22. // via hidden field " bevestiging" van formulier
  23. if (isset($_POST["bevestiging"])){
  24. // query samenstellen
  25. // LET OP: in werkelijkheid nog validatie uitvoeren van de gegevens in $_POST
  26. $query = "UPDATE verslag
  27.  
  28. INNER JOIN getallenlijst
  29. ON (verslag.lemer=getallenlijst.leer)
  30.  
  31. INNER JOIN pas
  32. ON (getallenlijst.leer=pas.extra9)
  33.  
  34. SET
  35.  
  36.  
  37.  
  38. btbll = '". $_POST["btbll"] ."'
  39.  
  40.  
  41.  
  42. WHERE extra9 = '".mysql_real_escape_string($_POST["extra9"]) . "'
  43. AND ww = '".mysql_real_escape_string($_POST["ww"]) . "'";
  44.  
  45.  
  46.  
  47. mysql_query($query);
  48. echo "De volgende opdracht is uitgevoerd: <b>$query</b><br><hr>\n";
  49. echo "Record nummer " .$_POST["id"] . " is bijgewerkt<br>\n";
  50. echo "<a href=\"vs4.php\">Terug</a>";
  51. }
  52. else{
  53. // pagina heeft zichzelf nog niet aangeroepen, gegevens inlezen
  54. $query="SELECT * FROM verslag
  55. INNER JOIN getallenlijst
  56. ON (verslag.lemer=getallenlijst.leer)
  57.  
  58. INNER JOIN pas
  59. ON (getallenlijst.leer=pas.extra9)
  60.  
  61. WHERE extra9 ='". $_GET["id"] ."'";
  62. $resultaat = mysql_query($query);
  63. while (list($rtv_id, $naam, $grp, $rter, $lemer, $btb1, $btb2, $btb3, $btbll) = mysql_fetch_row($resultaat)){
  64.  
  65.  
  66. $rd=$btbll;
  67.  
  68. }
  69. ?>
  70. <h2>Deze gegevens bijwerken:</h2>
  71. <form action="" method="post">
  72.  
  73. <input type="hidden" name="bevestiging" value="1">
  74. <input type="hidden" name="id" value="<?php echo $_GET["id"];?>">
  75.  
  76. <textarea name="btbll" rows="70" cols="95"><?php echo $rd . PHP_EOL . date('(d/m/Y)');?></textarea><br>
  77.  
  78. <hr>
  79. <input type="Submit" value="Gegevens bijwerken">
  80. <input type="Button" value="Terug" onclick="javascript:history.go(-1);">
  81. </form>
  82. <?php
  83. }// else-blok afsluiten
  84. ?>
  85. </body>
  86. </div>


Maar de update mislukt en dat ligt volgens mij aan de UPDATE- en SELECT-query in vs4.php, maar ik zie de fout niet. Wat doe verkeerd?
In het volgende voorbeeld is de gebruikersnaam het getal 1 en het wachtwoord het woord 'wachtwoord'.
PS: ik krijg niet eens een foutmelding als de db_connect.inc.php er niet bij staat.

9 antwoorden

Gesponsorde links
Offline vinTage - 14/08/2010 16:09
Avatar van vinTage Nieuw lid @ je ps:
Zet error_reporting aan en voluit he 
Verder gebruik je in test/devellop stadium best: or die(mysql_error())
Offline Guido2 - 14/08/2010 16:34 (laatste wijziging 01/09/2010 21:51)
Avatar van Guido2 Nieuw lid Met de error_reporting krijg ik een fout in de id.


Notice: Undefined index: id in /var/accounts/CN20081547/zoeki/vs4.php on line 66

Als ik in regel 66 extra9 vervang door de id van verslag houd ik dezelfde foutmelding:
WHERE rv_id ='". $_GET["id"] ."'";

Als ik in regel 66 extra9 laat staan en "id" achter GET vervang door rv_id krijg ik ook dezelfde foutmelding.
WHERE extra9 ='". $_GET["rv_id"] ."'";

Als ik hier de id van de tabel 'pas' zet, krijg ik dezelfde foutmelding.
WHERE pasid ='". $_GET["id"] ."'";

Als ik het nu omdraai, verandert de foutmelding ook niet.
WHERE extra9 ='". $_GET["pasid"] ."'";

Achter beide query's heb ik 'or die' gezet.

  1. if (isset($_POST["bevestiging"])){
  2. // query samenstellen
  3. // LET OP: in werkelijkheid nog validatie uitvoeren van de gegevens in $_POST
  4. $query = "UPDATE verslag
  5.  
  6. INNER JOIN getallenlijst
  7. ON (verslag.lemer=getallenlijst.leer)
  8.  
  9. INNER JOIN pas
  10. ON (getallenlijst.leer=pas.extra9)
  11.  
  12. SET
  13.  
  14.  
  15.  
  16. btbll = '". $_POST["btbll"] ."'
  17.  
  18.  
  19.  
  20. WHERE extra9 = '".mysql_real_escape_string($_POST["extra9"]) . "'
  21. AND ww = '".mysql_real_escape_string($_POST["ww"]) . "'"or die(mysql_error());


  1. $query="SELECT * FROM verslag
  2. INNER JOIN getallenlijst
  3. ON (verslag.lemer=getallenlijst.leer)
  4.  
  5. INNER JOIN pas
  6. ON (getallenlijst.leer=pas.extra9)
  7.  
  8. WHERE extra9 ='". $_GET["id"] ."'"or die(mysql_error());


Maar dan verandert de foutmelding niet.

In het blok waarin tekst geupdatet moet worden, staat de volgende foutmelding, maar variabele rd is volgens mij wel gedeclareerd:

<blockquote class='PHPError' style='display:none;border:1px dotted black;background-color:#DDDDDD;padding:0px 20px 20px 20px;margin-left:50px;'><br />
<b>Notice</b>: Undefined variable: rd in <b>/var/accounts/CN20081547/zoeki/vs4.php</b> on line <b>82</b><br />

Nu blijkt dat mijn versie in NetBeans een andere regelverdeling heeft dan deze site. Ik zoek nu de fout in regel 66: $rd=$btbll;

Ik haal deze vergelijking weg en gebruik daarna alleen $btbll.

Maar de foutmelding blijft hetzelfde, weer op regel 66. Alleen nu krijg ik de bovenstaande tekst in mijn tekstvak niet meer... Ik zet de variabele weer terug.

Kortom, ik kom er niet uit.


Offline valles10 - 01/09/2010 22:10
Avatar van valles10 HTML interesse Je moet in je url wel het id meegeven hé...

website.com/index.php?id=45
Offline Guido2 - 03/09/2010 18:31
Avatar van Guido2 Nieuw lid Ik verwijs in de code niet naar index.php?id

Is dat het probleem?

Waar moet dat staan?
Offline urqbz - 03/09/2010 20:03
Avatar van urqbz PHP interesse Volgens mij doe je dat al bij get id... In de where clause van je query
Offline Guido2 - 04/09/2010 07:40
Avatar van Guido2 Nieuw lid Deze where clause heb ik al op alle mogelijke manieren veranderd, maar dat blijkt de fout niet te zijn.

WHERE extra9 ='". $_GET["id"] ."'"or die(mysql_error());
Offline Koen - 04/09/2010 10:35
Avatar van Koen PHP expert Volgens mij helpt het wel als je mysql_query() rond die string zet. (or die() moet achter mysql_query()!)
Offline MiST - 04/09/2010 13:49
Avatar van MiST Lid maak een view, en laat daar je query op los? 

Volgens mij is een update met join clause niet zo kosjer.. 

op een view nu ook eigenlijk niet, maar ja, dat zal wsl makkelijker zijn...
Offline Guido2 - 04/09/2010 15:06 (laatste wijziging 04/09/2010 20:28)
Avatar van Guido2 Nieuw lid Ik heb de regel als volgt gewijzigd.

WHERE extra9 ='". $_GET["id"] ."'"mysql_query()or die(mysql_error());

Maar ik krijg de volgende foutmelding

Parse error: syntax error, unexpected T_STRING in /var/accounts/xxx/xxx/xxx.php on line 66

Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.215s