login  Naam:   Wachtwoord: 
Registreer je!
 Forum

waarde in echo zetten? (Opgelost)

Offline pascalbianca - 19/08/2016 00:41
Avatar van pascalbiancaNieuw lid Mijn vorige post was netjes door de heren uitgelegd.
Nu zit ik met een vraag.

De jquery die alles invuld.:
  1. <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  2. <script type="text/javascript">
  3. $(document).ready(function(){
  4. $('#leden').on('change', function() { // wanneer #leden verandert
  5. var bgrang_val = $('option:selected', this).attr('attr-bgrang'); // waarde van attr-bgrang ophalen
  6. $('#bgrang').val( bgrang_val ); // waarde in de input #bgrang zetten
  7. });
  8. });
  9. </script>


Hier word dus #bgrang netjes in de input veld ingevuld, maar hoe kan ik die in een echo lijn laten zien?

Had al iets in de trend van
  1. echo #bgrang

geprobeerd maar dat werkt niet.

Hoe wel?

10 antwoorden

Gesponsorde links
Offline Thomas - 19/08/2016 10:49 (laatste wijziging 19/08/2016 10:50)
Avatar van Thomas Moderator Allereerst: JavaScript is (in dit geval) clientside, deze code is actief in de browser. PHP is serverside, deze code is actief op de webserver. Het resultaat hiervan wordt (meestal) als HTML-document (met JavaScript) naar de client (de browser) gestuurd. Indien je dus dingen aan het doen bent in JavaScript (clientside) dan zal deze informatie eerst teruggestuurd moeten worden naar de webserver voordat je hier iets in PHP mee kunt doen.

Dan naar je vraagstuk. Ik vind deze opzet apart. Je selecteert al een waarde in een dropdown, waarom zou je deze opnieuw ergens anders willen herhalen? :/.

Je kunt de inhoud van een element invullen/wijzigen met .html(inhoud).
Bedankt door: Jointjeff
Offline pascalbianca - 20/08/2016 11:38
Avatar van pascalbianca Nieuw lid Ik zal even kijken of ik precies krijg uitgelegd en getoond en wat ik nog moet , hopelijk dat jullie dit klein scriptje met mij kunnen afmaken, meer heb ik niet nodig dan is het klaar.

Mijn db ziet zo eruit.:
mysql db

Mijn layout ziet er zo uit.:
Layout

Mijn code, is niet netjes maar goed daar ben ik nog mee bezig.:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Wijzig record van MySQLi Database</title>
  5.  
  6. <style>
  7. .centerTable { margin: 0px auto; }
  8. </style>
  9.  
  10. </head>
  11.  
  12. <body>
  13. <?php
  14.  
  15. ini_set('display_errors', 1);
  16.  
  17.  
  18. if(isset($_POST['add'])) {
  19. include_once ('config.php');
  20. //Output any connection error
  21. if ($con->connect_error) {
  22. die('Error : ('. $con->connect_errno .') '. $con->connect_error);
  23. }
  24.  
  25. //test om waarden in variabele te zetten
  26. $GoodGameNaam = $_POST["player"];
  27. $bsgestortnieuw = $_POST["bgnieuwestorting"];
  28. $bgstorting = $_POST["bgstorting"];
  29. $bgstorting = $_POST["bgstorting"];
  30. //sql update waarde UPDATE `tbl_bs` SET `id`=[value-1],`player`=[value-2],`bsgestort`=[value-3],`totbs`=[value-4],`reg_date`=[value-5] WHERE 1
  31.  
  32. $statement = $con->prepare("UPDATE tbl_bs SET bsgestort=? WHERE player=?");
  33.  
  34. $statement->bind_param('ds',$bsgestortnieuw, $GoodGameNaam);
  35. $results = $statement->execute();
  36.  
  37.  
  38. if($results){
  39. print 'Gebruiker is met succes met status aangepast!';
  40. }else{
  41. print 'Fout : ('. $con->errno .') '. $con->error;
  42. }}
  43.  
  44. if(isset($_POST['test'])) {
  45. include_once ('config.php');
  46. //Output any connection error
  47. if ($con->connect_error) {
  48. die('Error : ('. $con->connect_errno .') '. $con->connect_error);
  49. }
  50. $query = $con->prepare("SELECT bsgestort FROM tbl_bs");
  51. $query->execute();
  52. $query->store_result();
  53. $rows = $query->num_rows;
  54. echo $rows;
  55.  
  56. // Return 4 for example
  57. }
  58. ?>
  59.  
  60.  
  61. <form method = "post" >
  62.  
  63. <table width = "400" border = "0" cellspacing = "1" cellpadding = "2" style="margin: 0px auto;">
  64. <tr>
  65. <td width = "100" label for="leden">GGE Naam</label></td>
  66. <td>
  67. <select id="leden" name="leden">
  68. <?php
  69. include_once ('config.php');
  70. //mysqli object georiënteerd - variant #3
  71. $res = $con->query('SELECT * FROM tbl_bs');
  72. if ($res === false) {
  73. die('query failed: '.$con->error);
  74. }else{
  75. // afdrukken van aantal resultaten
  76.  
  77. echo "<option attr-bgnaam=" . $row['player'] . "> Selecteer een lid</option>";
  78. // ophalen van resultaatrijen, gebruik je favoriete fetch functie
  79. while ($row = $res->fetch_assoc()) {
  80. echo "<option attr-bgnaam=" . $row['player'] . " attr-bsgestort=". $row['bsgestort'] ." attr-reg_date=". $row['reg_date'] ." attr-bgstortingtotaal=". $row['totbs'] .">" . $row['player'] . "</option>";
  81. }
  82. // resultaat vrijgeven
  83. $res->free();}
  84. ?>
  85.  
  86. </select>
  87.  
  88. </td>
  89. </tr>
  90. <tr>
  91. <td width = "100"><label for="player">GGE Naam</label></td>
  92. <td><input type="text" id="player" name="player"></td>
  93. </tr>
  94. <tr>
  95. <td width = "200"><label for="bgstorting">Hoeveelheid gestort.:</label></td>
  96. <td><input type="text" id="bgstorting" name="bgstorting"></td>
  97. </tr>
  98. <tr>
  99. <td width = "200"><label for="bgstortingdatum">Hoeveelheid gestort op.:</label></td>
  100. <td><input type="text" id="bgstortingdatum" name="bgstortingdatum"></td>
  101. </tr>
  102. <tr>
  103. <td width = "200"><label for="bgstortingtotaal">Hoeveelheid Totaal gestort.:</label></td>
  104. <td><input type="text" id="bgstortingtotaal" name="bgstortingtotaal"></td>
  105. </tr>
  106. <tr>
  107. <td width = "200"><label for="bgnieuwestorting">Nieuwe Storting.:</label></td>
  108. <td><input type="text" id="bgnieuwestorting" name="bgnieuwestorting"></td>
  109. </tr>
  110. <tr>
  111. <td width = "100"> </td>
  112. <td><input name = "add" type = "submit" id = "add" value = "Wijzig lid"></td>
  113. </tr>
  114.  
  115. <tr>
  116. <td width = "100"> </td>
  117. <td><input name = "test" type = "submit" id = "test" value = "test tellen"></td>
  118. </tr>
  119. </table>
  120.  
  121. </form>
  122.  
  123. <!--dit stukje script geeft de juiste gestorte bs bij gekozen lid en laat ookafgelopen storting zien 20-08-2016.-->
  124. <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  125. <script type="text/javascript">
  126. $(document).ready(function(){
  127. $('#leden').on('change', function() { // wanneer #leden verandert
  128. var bgnaam_val = $('option:selected', this).attr('attr-bgnaam'); // waarde van attr-bgrang ophalen
  129. var bsgestort_val = $('option:selected', this).attr('attr-bsgestort'); // waarde van attr-bgrang ophalen
  130. var bgstortingdatum_val = $('option:selected', this).attr('attr-reg_date'); // waarde van attr-bgrang ophalen
  131. var bgstortingtotaal_val = $('option:selected', this).attr('attr-bgstortingtotaal'); // waarde van attr-bgrang ophalen
  132. $('#player').val( bgnaam_val ); // waarde in de input #bgrang zetten
  133. $('#bgstorting').val( bsgestort_val ); // waarde in de input #bgrang zetten*
  134. $('#bgstortingdatum').val( bgstortingdatum_val ); // waarde in de input #bgrang zetten*bgstortingtotaal
  135. $('#bgstortingtotaal').val( bgstortingtotaal_val ); // waarde in de input #bgrang zetten*bgstortingtotaal
  136. });
  137. });
  138. </script>
  139.  
  140.  
  141. </body>
  142. </html>


Nu zal het denk ik wel van zelf spreken , maar tis de bedoeling dat ik uit de dropdown box de speler selecteer. (dat werkt)
Hij laat dan de naam eronder nogmaals zien, en de rest zoals in de foto.
Maar nu wil ik , wat voor jullie zeer makkelijk zal zijn, maar voor net dat stukje is wat ik nodig heb, is dat ik bij nieuwe storting een waarde invul.
De waarde die staat bij hoeveelheid gestort moet bij totale waarde gezet worden en de nieuwe hoeveelheid gestort
De volgende keer weer hetzelfde liedje.

Ik hoop dat jullie mij kunnen helpen want ik zit hier echt al enkele weken op te stoeien om het werkend te krijgen.
Offline Thomas - 20/08/2016 12:10
Avatar van Thomas Moderator Ik denk dat alles een stuk makkelijker wordt als je dingen in logische componenten splitst.

Het makkelijkste lijkt mij het hebben van een stortingen tabel met de volgende opzet:
id,
datum
speler id (géén speler naam!)
bedrag

Elk record omvat dan één storting en voor elke storting maak je een nieuw record aan. Het totaalbedrag is afleidbaar, dit is immers de som van stortingen van één speler. Het voordeel van het aanmaken van meerdere records is ook dat je dan meteen een historie hebt in plaats van één record waarin alleen een eindresultaat staat opgeslagen waar je niet van weet hoe deze tot stand is gekomen.

Als eenmaal dit fundament is gelegd kun je gaan nadenken over interfaces/formulieren. Je zou bijvoorbeeld een collectie pagina's kunnen hebben die zich bekommeren om stortingen. Je zou bijvoorbeeld kunnen starten met een overzichtspagina van alle stortingen, aflopend gesorteerd met paginering en wat voor toeters en bellen je hier nog aan vast wilt programmeren.

Vervolgens zou je ook een of meer filters bij kunnen maken, waarbij je stortingen van een specifiek persoon bekijkt, of een specfieke periode. En tot slot zou je ook wat knoppen bij kunnen maken voor het toevoegen en wijzigen (maar mogelijk is dat geschiedenisvervalsing?) van stortingen.

Wat hierbij van groot belang is is dat elk onderdeel/elke actie eigenlijk één specifiek (of zo min mogelijk) voorgeschreven doel(en) heeft. Zodra je bewerkingen gaat combineren (zoals in bovenstaande code gebeurt) neem je dan al snel teveel hooi op je vork en tevens vertroebelt dit de werking van de webpagina. Functionaliteit moet helder en eenduidig zijn. Dit kun je vaak makkelijk bereiken door je ontwerp simpel te houden.
Offline pascalbianca - 20/08/2016 14:31
Avatar van pascalbianca Nieuw lid Beste Thomas,

Ik snap jullie verhalen en uitleg wel, maar ik heb al van alles geprobeerd en het wilt gewoon echt niet om dat scriptje af te krijgen.
Ik ben ook bereid om alles te doen om het goed te leren, maar de tijd dringt mij op dit moment even om dat scriptje werkend te krijgen.

Eenmaal werkend heb ik tijd genoeg om jullie de hemden uit het lijf te vragen en alles van voor naar achter te bestuderen.

Ik ga ervoor op mijn knieën als het moet aub help me dit scriptje werkend te krijgen want als je kijkt naar eerdere gestelde 2 vragen ben ik er al lang mee bezig, maar mijn tijd dringt.
Offline Thomas - 20/08/2016 19:58 (laatste wijziging 20/08/2016 19:58)
Avatar van Thomas Moderator
Citaat:
Maar nu wil ik , wat voor jullie zeer makkelijk zal zijn, maar voor net dat stukje is wat ik nodig heb, is dat ik bij nieuwe storting een waarde invul.
De waarde die staat bij hoeveelheid gestort moet bij totale waarde gezet worden en de nieuwe hoeveelheid gestort
De volgende keer weer hetzelfde liedje.

Wanneer wil je dit dan bijwerken? Als je het formulier submit?
Geef eens een concreet voorbeeld met stappen en waarden?
Komt dit alles niet gewoon neer op een aangepaste UPDATE query?

Wat is trouwens het verschil tussen "Hoeveelheid gestort" en "Hoeveelheid Totaal gestort" want je houd alleen maar totalen bij in je database?

Ik snap weinig van dit formulier.

Daarnaast is deze werkwijze ook nogal gevaarlijk. Stel dat je meerdere beheerders hebt die dit formulier kunnen gebruiken. Stel nu dat deze allebei bij dezelfde gebruiker aan het storten zijn. Afhankelijk van hoe jouw UPDATE query in elkaar zit kan dit tot gevolg hebben dat deze beheerders elkanders wijzigingen aan het overschrijven zijn omdat je de database met (ver)oude(rde) informatie voert. Daarnaast heb je dan nog steeds geen historie van hoe een totaalbedrag totstand is gekomen. Als er dan iets onverwachts gebeurt is de verwarring compleet omdat je op geen enkele manier kunt nagaan hoe een bedrag aan zijn waarde komt.
Offline pascalbianca - 20/08/2016 22:03
Avatar van pascalbianca Nieuw lid Ik ben de enigste die dit zal bijhouden dus kan niet mis gaan ivm 2 gebruikers of zo.

Nou voorbeeld en ga van een db uit waar bij mijn naam alles nog op 0 staat.
1> Ik kies mijn naam uit de dropdown.
2> Dan laat hij dus mijn naam nog eens zien eronder.
3> Dan de regel eronder laat hij de laatst ingevulde storting zien die de keer ervoor was gedaan.
4> De regel eronder laat het totaal gestorte zien, dus in start positie zou dit 0 moeten zijn omdat de vorige keer zogenaamd 0 dus niets gestort was.
5> De regel weer eronder is wat nu weer gestort is.

Als de submit knop gedrukt word , moet dus de nieuwe ingevulde waarde bij stap 3 worden opgeslagen worden, maar tevens moet dus de oude waarde wat in stap 3 getoond werd opgeteld worden bij stap 4 en die moet ook opgeslagen worden.

Dus op scherm zou het bv eerst keer zo uitzien.:

GGE Naam.: PascalBianca
Hoeveelheid gestort.: 0
Hoeveelheid gestort.: 2016-08-20
Hoeveelheid Totaal gestort.: 0
Nieuwe Storting.: 100

Dan zou bij de volgende keer dat ik de pagina weer moet gaan invullen dit komen te staan als ik mijn naam kies.:

GGE Naam.: PascalBianca
Hoeveelheid gestort.: 100
Hoeveelheid gestort.: 2016-08-20
Hoeveelheid Totaal gestort.: 100
Nieuwe Storting.: 515

De keer erop.:

GGE Naam.: PascalBianca
Hoeveelheid gestort.: 515
Hoeveelheid gestort.: 2016-08-20
Hoeveelheid Totaal gestort.: 615
Nieuwe Storting.: 230

Ik hoop dat het duidelijk is wat ik bedoel.
Alvast super bedankt dat u wilt helpen.

Groeten Pascal.
Offline Thomas - 21/08/2016 14:36
Avatar van Thomas Moderator Hm, "Hoeveelheid gestort" is dus het bedrag van de laatste storting, deze is afkomstig uit de tabelkolom bsgestort?

Het enige wat je volgens mij hoeft te doen is je UPDATE query kloppend maken?
En misschien je option attribute values van quotes voorzien.
En misschien redirecten nadat je gePOST hebt zodat je geen dubbelposts doet.
En misschien controleren of je invoer numeriek is.
En misschien je hele ontwerp herzien, maar dat terzijde .

Indien alles al werkte zoals het zou moeten (behalve die query dan) dan zou de query zoiets moeten worden:
  1. <?php
  2. $GoodGameNaam = $_POST['player'];
  3. $bsgestortnieuw = $_POST['bgnieuwestorting']; // @todo controleer op numerieke waarde
  4. // de rest van de informatie is NIET RELEVANT
  5.  
  6. $statement = $con->prepare(
  7. 'UPDATE tbl_bs
  8. SET bsgestort = ?, totbs = totbs + ?
  9. WHERE player = ?'
  10. );
  11.  
  12. $statement->bind_param('dds', $bsgestortnieuw, $bsgestortnieuw, $GoodGameNaam);
  13.  
  14. $results = $statement->execute();
  15. ?>

Oftewel je werkt de gegevens van de laatste storting en het totaalbedrag bij met de huidige storting voor de geselecteerde gebruiker.

Dat is alles?
Offline pascalbianca - 22/08/2016 07:16
Avatar van pascalbianca Nieuw lid Beste Thomas,

Super bedankt!!!
Ik heb eindelijk het script werkend!! Super en ook nog 1 dag voor mijn deadline 
Nu kan ik mij eens op het gemak de hele stof eens uitzoeken en kijken hoe allemaal moet.
Wist trouwens niet dat je in een sql statement een optel som kon zetten, weer wat geleerd 
Offline Thomas - 22/08/2016 11:44
Avatar van Thomas Moderator Indien dit vraagstuk is opgelost gelieve deze als zodanig te markeren. Dit doe je door:
- ofwel een reactie die het verlossende antwoord bevat te markeren als oplossing,
- ofwel het topic te markeren als opgelost indien je het vraagstuk zelf inmiddels hebt opgelost (en het is dan misschien ook handig om te vermelden hoe deze oplossing luidt zodat anderen hier ook iets aan hebben)

Dit alles kun je regelen via de icoontjes boven/onder de reactie/het topic.
Offline pascalbianca - 23/08/2016 06:29 (laatste wijziging 23/08/2016 08:57)
Avatar van pascalbianca Nieuw lid Beste Thomas,

Ik heb een foutje gevonden en ook geprobeerd dit opgelost te krijgen maar het lukt niet.
Als ik een player heb met bv de naam, zoals de mijne pascalbianca is er geen probleem met updaten.
Maar is er een player die een naam heeft zoals john snow worden zijn waarde niet geupdate, waarom nou hij laat dan alleen het begin stuk zien van de naam, in dit geval alleen john (zie de foto.: Link).

Zelf vermoed ik dat de fout zit in het stukje java/jquery, alleen ik heb geen idee hoe het opgelost moet worden.

De code van de jquery is.:
  1. <!--dit stukje script geeft de juiste gestorte bs bij gekozen lid en laat ookafgelopen storting zien 20-08-2016.-->
  2. <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  3. <script type="text/javascript">
  4. $(document).ready(function(){
  5. $('#leden').on('change', function() { // wanneer #leden verandert
  6. var bgnaam_val = $('option:selected', this).attr('attr-bgnaam'); // waarde van attr-bgrang ophalen
  7. var bsgestort_val = $('option:selected', this).attr('attr-bsgestort'); // waarde van attr-bgrang ophalen
  8. var bgstortingdatum_val = $('option:selected', this).attr('attr-reg_date'); // waarde van attr-bgrang ophalen
  9. var bgstortingtotaal_val = $('option:selected', this).attr('attr-bgstortingtotaal'); // waarde van attr-bgrang ophalen
  10. $('#player').val( bgnaam_val ); // waarde in de input #bgrang zetten
  11. $('#bgstorting').val( bsgestort_val ); // waarde in de input #bgrang zetten*
  12. $('#bgstortingdatum').val( bgstortingdatum_val ); // waarde in de input #bgrang zetten*bgstortingtotaal
  13. $('#bgstortingtotaal').val( bgstortingtotaal_val ); // waarde in de input #bgrang zetten*bgstortingtotaal
  14. });
  15. });
  16. </script>


UPDATE
Heb de update functie aangepast , zoals jij voorstelde door te doen met ID.
Nu werkt het wel de update functie op die namen met spatie.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.235s