Update functie maken jquery
Ik heb me vandaag verdiept in het versturen van een formulier d.m.v. jQuery en ajax.
Nu lukt het prima, en ik krijg ook de alert "De pagina is geüpdatet", maar vervolgens veranderd het veld box_een_kopje niet in de database.
Nu ligt het denk ik aan de $_POST['kopje1'], dat ik die ook nog als var mee moet geven in de functie UpdateRecord?
Hopelijk kan iemand mij verder helpen om dit werkend te krijgen.
Machiel.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
function UpdateRecord(id)
{
jQuery.ajax({
type: "POST",
url: "update.php",
data: 'id='+id,
cache: false,
success: function(response)
{
alert("De pagina is gepdatet");
}
});
}
</script>
function UpdateRecord(id)
{
jQuery.ajax({
type: "POST",
url: "update.php",
data: 'id='+id,
cache: false,
success: function(response)
{
alert("De pagina is gepdatet");
}
});
}
</script>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
include("config.php");
$var = @$_POST['id'] ;
// Normaal gesproken staat hier een hele lap aan velden, ik heb er nu als voorbeeld even één genomen
$query = "UPDATE `pagina` SET `box_een_kopje` = '".$_POST['kopje1']."' WHERE `id` = '".$var."'";
// Als er een fout in de query zit
if(!$resultaat = mysqli_query($verbinding, $query)) {
echo 'Het invoeren is niet gelukt';
// Als er geen fout in de query zit
} else {
echo 'Het invoegen is gelukt.';
}
// Deze echo's zie je niet maar dat was even om te kijken voor mezelf of de fout aan de query lag
?>
include("config.php");
$var = @$_POST['id'] ;
// Normaal gesproken staat hier een hele lap aan velden, ik heb er nu als voorbeeld even één genomen
$query = "UPDATE `pagina` SET `box_een_kopje` = '".$_POST['kopje1']."' WHERE `id` = '".$var."'";
// Als er een fout in de query zit
if(!$resultaat = mysqli_query($verbinding, $query)) {
echo 'Het invoeren is niet gelukt';
// Als er geen fout in de query zit
} else {
echo 'Het invoegen is gelukt.';
}
// Deze echo's zie je niet maar dat was even om te kijken voor mezelf of de fout aan de query lag
?>
Ik mis ook beveiliging tegen SQL-injection. Dus pas mysqli_real_escape_string() toe.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
function UpdateRecord(id, kopje1)
{
jQuery.ajax({
type: "POST",
url: "update.php",
data: 'id='+id+'&kopje1='+kopje1,
cache: false,
success: function(response)
{
alert("De pagina is gepdatet");
}
});
}
</script> - See more at: http://www.phphulp.nl/php/forum/topic/update-functie-maken-jquery/91343/last/#sthash.U8Cy9SgU.dpuf
function UpdateRecord(id, kopje1)
{
jQuery.ajax({
type: "POST",
url: "update.php",
data: 'id='+id+'&kopje1='+kopje1,
cache: false,
success: function(response)
{
alert("De pagina is gepdatet");
}
});
}
</script> - See more at: http://www.phphulp.nl/php/forum/topic/update-functie-maken-jquery/91343/last/#sthash.U8Cy9SgU.dpuf
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
function UpdateRecord(id, kopje1)
{
jQuery.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'kopje1': kopje1},
cache: false,
success: function(response)
{
alert("De pagina is gepdatet");
}
});
}
</script> - See more at: http://www.phphulp.nl/php/forum/topic/update-functie-maken-jquery/91343/last/#sthash.U8Cy9SgU.dpuf- See more at: http://www.phphulp.nl/php/forum/topic/update-functie-maken-jquery/91343/last/#sthash.w830UA5N.dpuf
function UpdateRecord(id, kopje1)
{
jQuery.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'kopje1': kopje1},
cache: false,
success: function(response)
{
alert("De pagina is gepdatet");
}
});
}
</script> - See more at: http://www.phphulp.nl/php/forum/topic/update-functie-maken-jquery/91343/last/#sthash.U8Cy9SgU.dpuf- See more at: http://www.phphulp.nl/php/forum/topic/update-functie-maken-jquery/91343/last/#sthash.w830UA5N.dpuf
- Aar - op 30/06/2013 20:36:55:
Ik mis ook beveiliging tegen SQL-injection. Dus pas mysqli_real_escape_string() toe.
Klopt, zo ver was ik nog niet.. ik wou het eerst maar eens werkend zien te krijgen.
Ik heb nu alle dingen toegepast.. alleen hoe kan ik die $query echoën? Als ik naar mijn update.php ga zullen de waardes niet meegegeven worden, en in de script tags weet ik ook niet hoe ik het zou moeten doen omdat de query niet in dat bestand staat?
Quote:
Als ik naar mijn update.php ga zullen de waardes niet meegegeven worden - See more at: http://www.phphulp.nl/php/forum/topic/update-functie-maken-jquery/91343/last/#sthash.qnVpF4dW.dpuf
Wat bedoel je? Je kan ze opvragen via $_POST['kopje1']
- Aar - op 30/06/2013 20:36:55:
Dat probeer ik dus te doen.Echo $query eens. Je wet dan welke query er uit wordt gevoerd.
Maar als ik letterlijk $query ga echöen in update.php krijg ik het volgende:
Tussen de '' zal inderdaad niks komen omdat in de update.php geen formulier staat met deze velden erin maar in de index.php.
Hoe kan ik nou controleren of de waardes wel daadwerkelijk goed worden opgegeven en dus een 'ingevulde' query laten zien (in index.php denk ik.. want update.php zal nooit aan $_POST['kopje1'] kunnen komen omdat daar geen formulier staat).
Die echo geef je terug aan javascript.
Daar doe je:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
function UpdateRecord(id, kopje1)
{
jQuery.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'kopje1': kopje1},
cache: false,
success: function(response)
{
alert(response);
}
});
}
{
jQuery.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'kopje1': kopje1},
cache: false,
success: function(response)
{
alert(response);
}
});
}
Dat is wat Ajax doet. Javascript stuurt een verzoek naar de server en krijgt een boodschap terug. Die kan je bv. in een alert steken (of via console.log() ...)
In mijn update.php staat nu het volgende:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
include("config.php");
$var1 = @$_POST['id'];
$var2 = @$_POST['kopje1'];
$query = "UPDATE `bericht` SET `box_een_kopje` = '".$var2."' WHERE `id` = '".$var1."'";
echo $query;
$var1 = @$_POST['id'];
$var2 = @$_POST['kopje1'];
$query = "UPDATE `bericht` SET `box_een_kopje` = '".$var2."' WHERE `id` = '".$var1."'";
echo $query;
En in de script tags staat wat Kris net zei.
Als ik nu op mijn button klik
krijg ik een hele lap tekst terug, namelijk de broncode van de index.php, maar dan niet van de broncode van de pagina waar ik ben (bericht/bewerken) maar de 404 (/404) pagina.
Gewijzigd op 01/07/2013 11:51:07 door Machiel K
update.php moet in de zelfde folder staan als index.php . Is dat zo?
Als dat niet zo is, moet je het pad ook veranderen in de code
bv.
(Hij doet het alleen als ik er een link van maak.. http://website.nl/page/bericht/update.php, index.php staat in dezelfde map als update.php namelijk in bericht. Maar als ik er url: "update.php" van maak werkt het niet)
Ik krijg nu als alert de volgende query:
Dat klopt, want het id waar ik het nu mee test is 1, alleen kopje1 word dus niet goed meegegeven. Heeft dit er ook meerte maken dat bij de button alleen UpdateRecord(id) word meegegeven en kopje1 niet?
Gewijzigd op 01/07/2013 12:12:39 door Machiel K
Niet vergeten om aanhalingstekens toe te voegen (als het geen getal is).
bv.
Code (php)
1
<input type="button" value="Update" onClick="UpdateRecord(<?= $_GET['id']; ?>, 'Hello World');">
Gewijzigd op 01/07/2013 12:06:16 door Kris Peeters
Kris Peeters op 01/07/2013 12:05:31:
Er komt nu inderdaad Hello World in de database te staan, top. Alleen hoe krijg ik hier nu nog de waarde die in kopje1 staat in de database i.p.v. Hello World?
Met in ieder geval lukt het niet.
Dus, er staat een knop. Die staat er al vooraleer de gebruiker er op klikt. Die knop heb jij daar gezet.
Dus dat kan niets te maken hebben met $_POST.
Wat is die knop? Staan er meerdere knoppen?
-----
Zeg, wat ben je eigenlijk aan het doen?
Een formulier verzenden? Toon eens dat formulier.
Je wil iets updaten. Leg eens uit wat er geüpdate hoort te worden.
Gewijzigd op 01/07/2013 12:36:15 door Kris Peeters
Ik haal de gegevens op uit de database en die zet ik alvast als value neer in een input veld. Daarbij heb ik het volgende formulier.
Code (php)
1
2
3
4
5
2
3
4
5
<form method="POST" name="bewerken">
<input type="text" name="kopje1" value="<?=$rij->box_een_kopje; ?>"/>
<textarea name="tekst1"><?= $rij->box_een_tekst; ?></textarea>
<input type="button" id="button_id" value="Update" onClick="UpdateRecord(<?= $_GET['id']; ?>);">
</form>
<input type="text" name="kopje1" value="<?=$rij->box_een_kopje; ?>"/>
<textarea name="tekst1"><?= $rij->box_een_tekst; ?></textarea>
<input type="button" id="button_id" value="Update" onClick="UpdateRecord(<?= $_GET['id']; ?>);">
</form>
Nu wil ik dat als je op deze button klikt de velden box_een_kopje en box_een_tekst worden geüpdatet met de waardes die in de inpit velden kopje1 en tekst1 staan where het id .. is (word gehaald uit $_GET['id']).
Gewijzigd op 01/07/2013 12:54:27 door Machiel K
Dus, we gaan ze lezen waar ze te vinden zijn.
Ik heb af en toe een id toegevoegd aan de markup. Dat is de simpelste manier om die in javascript aan te spreken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<form method="POST" name="bewerken">
<input type="text" id="kopje1" name="kopje1" value="<?=$rij->box_een_kopje; ?>"/>
<textarea id="tekst1" name="tekst1"><?= $rij->box_een_tekst; ?></textarea>
<input type="button" id="button_id" value="Update" onClick="UpdateRecord(<?= $_GET['id']; ?>);">
</form>
<script>
function UpdateRecord(id) {
var kopje1 = $('#kopje1').val();
var tekst1 = $('#tekst1').val();
jQuery.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'kopje1': kopje1, 'tekst1': tekst1},
cache: false,
success: function(response) {
alert(response);
}
});
}
</script>
<input type="text" id="kopje1" name="kopje1" value="<?=$rij->box_een_kopje; ?>"/>
<textarea id="tekst1" name="tekst1"><?= $rij->box_een_tekst; ?></textarea>
<input type="button" id="button_id" value="Update" onClick="UpdateRecord(<?= $_GET['id']; ?>);">
</form>
<script>
function UpdateRecord(id) {
var kopje1 = $('#kopje1').val();
var tekst1 = $('#tekst1').val();
jQuery.ajax({
type: "POST",
url: "update.php",
data: {'id': id, 'kopje1': kopje1, 'tekst1': tekst1},
cache: false,
success: function(response) {
alert(response);
}
});
}
</script>
Lukt dat?
Gewijzigd op 01/07/2013 13:43:24 door Kris Peeters
Gewijzigd op 01/07/2013 14:30:21 door Machiel K
Er is php.
Php is een computerprogramma dat draait op de server.
Er is javascript.
Javascript is een computerprogramma dat draait op de computer van de gebruiker (geïntegreerd in de webbrowser).
De server kan niet zien dat javascript aan het "draaien" is. De server weet niets van wat er in een javascript functie gebeurt.
Omgekeerd al helemaal niet.
Javascript heeft geen php-variabele ter beschikking; javascript weet niet wat er op de server gebeurt.
De taak van php:
- Genereren van HTML, eventueel ook css en javascript.
- verwerken van $_POST, $_GET, ...
De taak van javascript:
-> alles wat gebeurt zonder dat de pagina ververst wordt.
Php en javascript kunnen communiceren via Ajax.
Daarbij stuurt javascript een verzoek naar een bepaalde url (in jouw geval stuurt het een post-verzoek naar update.php, met de post-data)
De server heeft dan die post data ter beschikking, kan die verwerken en geeft een boodschap terug aan javascript
Het is me gelukt, het is toch makkelijker dan ik dacht.. ik ben meer iemand die van iets uit gaat zonder iets te proberen en dat is natuurlijk hartstikke fout. Want hoe kan je nou weten of het goed of fout gaat zonder iets te proberen.. iets voor de komende keren voordat ik een topic start.
Bedankt allen!
:)