login  Naam:   Wachtwoord: 
Registreer je!
 Forum
Zoeken  Regels  Help
Categorieën > PHP

UPDATE- en SELECT-query met inner join

Guido2 – 14/08/2010 15:29 (Laatst gewijzigd op 17/08/2010 13:07)
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
Daisycon - Verdien geld met uw website

vinTage – 14/08/2010 16:09
@ je ps:
Zet error_reporting aan en voluit he 
Verder gebruik je in test/devellop stadium best: or die(mysql_error())

Guido2 – 14/08/2010 16:34 (Laatst gewijzigd op 01/09/2010 21:51)
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.



valles10 – 01/09/2010 22:10
Je moet in je url wel het id meegeven hé...

website.com/index.php?id=45

Guido2 – 03/09/2010 18:31
Ik verwijs in de code niet naar index.php?id

Is dat het probleem?

Waar moet dat staan?

urqbz – 03/09/2010 20:03
Volgens mij doe je dat al bij get id... In de where clause van je query

Guido2 – 04/09/2010 07:40
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());

Koen – 04/09/2010 10:35
Volgens mij helpt het wel als je mysql_query() rond die string zet. (or die() moet achter mysql_query()!)

MiST – 04/09/2010 13:49
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...

Guido2 – 04/09/2010 15:06 (Laatst gewijzigd op 04/09/2010 20:28)
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-2012 Sitemasters.be - Regels - Gehost door: Vircon - Laadtijd: 0.147s