Hallo, ik probeer een UPDATE uit te voeren maar dit lukt niet zo als het zou moeten....

Ik heb een formulier welke data uit de DB haalt, dit gaat goed... Als ik zeg Aanpassen dan moet hij een UPDATE script draaien, dit gaat gedeeltelijk goed...

Hij neemt de gegevens mee naar de pagina en dit krijg ik ook te zien... maar dan... dan doet hij niets....

Het zal ongetwijfeld heel eenvoudig zijn maar ik kom er niet uit...

Dit is het script wat het zou moeten uitvoeren...

Dus ik ga van " form1.php " naar " form2.php " waar hij dus wel de aanpassingen laat zien, ik wil deze tussen stap doen om de vraag te stellen weet je het zeker... dit hoeft opzicht niet maar vond ik wel handig....

waar gaat het mis ?!


<?php

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

include ("db_config.php");

if (isset($_POST['opslaan']))
{

$naam = mysql_real_escape_string($_POST['naam']);
$datum = mysql_real_escape_string($_POST['datum']);
$sku = mysql_real_escape_string($_POST['sku']);
$reden = mysql_real_escape_string($_POST['reden']);
$optie = mysql_real_escape_string($_POST['optie']);
$ontvangen = mysql_real_escape_string($_POST['ontvangen']);
$land = mysql_real_escape_string($_POST['land']);
$afhaal = mysql_real_escape_string($_POST['afhaal']);
$afgerond = mysql_real_escape_string($_POST['afgerond']);
$note = mysql_real_escape_string($_POST['note']);

$sql = "UPDATE pakket SET

naam = '$naam',
datum = '$datum'
sku = '$sku',
reden = '$reden',
optie = '$optie'
ontvangen = '$ontvangen',
land = '$land',
afhaal = '$afhaal'
afgerond = '$afgerond',
note = '$note'

WHERE

id='".$_GET['id']."'";

$update = mysql_query($sql)or die(mysql_error());

}

?>
Aha, ik zie het.
Je moet dan in je action je id meesturen:
test.php?id=42 (of wat dan ook)

Een beetje laat gezien helaas.
ik ga morgen verder, je horen er weer van.
Ik denk dat het dan wel moet lukken. Wel zou de code aanzienlijk op de schop kunnen gaan, met diverse punten die ik al eerder opgenoemd hebt. Het kan je in ieder geval mogelijk onduidelijkheden of zelfs frustraties schelen ;-)
Zijn we weer....

Het lukt nog niet zo als het zou moeten...

Ik heb een formulier waar alles netjes in komt, alleen krijg ik in de pagina die hem afwerkt een fout op regel 43 maar daar staat ?>

De link die hij mee geeft is " slijter/test.php?id=42 " hij heeft dus id 42 die hij moet aanpassen met de volgende gegevens....

de foutmelding is " Parse error: syntax error, unexpected $end in /home/moto/domains/###.nl/public_html/slijter/test.php on line 43 "


<?php
error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', 1); 

include ("db_config.php");

if ($_SERVER['REQUEST_METHOD']=="POST")
 {
     
    $naam      = mysql_real_escape_string($_POST['naam']);
    $datum     = mysql_real_escape_string($_POST['datum']);
    $sku       = mysql_real_escape_string($_POST['sku']);
    $reden     = mysql_real_escape_string($_POST['reden']);
    $optie     = mysql_real_escape_string($_POST['optie']);
    $ontvangen = mysql_real_escape_string($_POST['ontvangen']);
    $land      = mysql_real_escape_string($_POST['land']);
    $afhaal    = mysql_real_escape_string($_POST['afhaal']);
    $afgerond  = mysql_real_escape_string($_POST['afgerond']);
    $note      = mysql_real_escape_string($_POST['note']);

$sql = "UPDATE pakket SET
 
        naam      = '$naam',
        datum     = '$datum', 
        sku       = '$sku',
        reden     = '$reden',
        optie     = '$optie',
        ontvangen = '$ontvangen',
        land      = '$land',
        afhaal    = '$afhaal' ,
        afgerond  = '$afgerond',
        note      = '$note' 

        WHERE 

        id='".mysql_real_escape_string($_GET['id'])."';        
       

$update = mysql_query($sql)or die(mysql_error());

}

?>
Er mist een dubbele quote die de string van $sql afsluit. Zo moet hij werken:
<?php
$sql = "UPDATE pakket SET
[even ingekort]
WHERE
id='".mysql_real_escape_string($_GET['id'])."'";
?>
Dat ziet er inderdaad beter uit, ik was al {()} aan het tellen :) maar die waren zo ver ik kon zien in orde.....
Kleurtjes tellen in lappen PHP-codes helpt ook vaak. Zo zag ik dat die quotes blauw waren in plaats van rood. ;-)

Verder nog een goede tip, om problemen met missende id's in de URL tegen te gaan: Gebruik isset() om te controleren of er een id in de URL voorkomt.
<?php
if(isset($_GET['id'])) {
	// er is een ID bekend, voer het script uit!
} else {
	echo "Er is geen ID in de URL bekend.";
}
?>
Heb ik een andere vraag.. op een of andere manier wil hij niet de spatie mee posten in de post... komt dat door deze code ??

mysql_real_escape_string

of is daar een andere oorzaak voor ??
Nee, mysql_real_escape_string beschermt de querie tegen ongewenste tekens, door deze onveilig te maken.
Ik zie ook geen vorm van validatie in je script. Verder is deze functie verouderd, en dient dit mysqli_real_escape_string() te zijn, met aanpassing van de rest van de mysql-functies.

Een ingeving: Misschien is de spatie die je invoert net te veel voor de maximale waarde van het datababaseveld?
- Ariën - op 26/01/2016 16:00:40

Kleurtjes tellen in lappen PHP-codes helpt ook vaak. Zo zag ik dat die quotes blauw waren in plaats van rood. ;-)

Verder nog een goede tip, om problemen met missende id's in de URL tegen te gaan: Gebruik isset() om te controleren of er een id in de URL voorkomt.
<?php
if(isset($_GET['id'])) {
	// er is een ID bekend, voer het script uit!
} else {
	echo "Er is geen ID in de URL bekend.";
}
?>



Ja goede.... eeuh.... kleurtjes ?? ik zit in mijn browser te klooien :) dus zie alleen kleurtjes zodra ik het hier neer zet eigenlijk...

Moet dreamweaver maar eens gaan activeren denk ik....

Toevoeging op 26/01/2016 16:10:10:

- Ariën - op 26/01/2016 16:07:32

Nee, mysql_real_escape_string beschermt de querie tegen ongewenste tekens, door deze onveilig te maken.
Ik zie ook geen vorm van validatie in je script. Verder is deze functie verouderd, en dient dit mysqli_real_escape_string() te zijn, met aanpassing van de rest van de mysql-functies.

Een ingeving: Misschien is de spatie die je invoert net te veel voor de maximale waarde van het datababaseveld?


Nee het gaat al met 2 tekens zodra er een spatie komt zet hij alles na de spatie niet door... dus mijn naam Roland Reijerse zet hij door als Roland.... terwijl het eerste formulier dit wel netjes mee neemt....

Reageren