Ik schaam me bijna maar ik krijg iets vreselijks simpels niet voor mekaar en loop nu al een uur te klooien
Ik heb een tabel in Mysql met gegevens van een persoon en die wil ik updaten nadat er een formuliertje is ingevuld. Dat staat en werkt tot het moment waarop de query wordt uitgevoerd. ipv de tekst krijg ik de naam van de variabele
de query ziet er nu zo uit
$sql = 'UPDATE `member_basic` SET `first_name` = \'$HTTP_POST_VARS[first_name]\' WHERE `id` = 1 ';
die id heb ik nu even zo staan om te testen maar dat wordt straks een session_id ..dus daar even niet op letten
Ik heb het geprobeerd zonder de aanhalingstekens, met dubbele aanhalingstekens voor en achter en de enkele weg met de '".$variable."' manier.... als ik echo $HTTP_POST_VARS['first_name'] doe geeft hij netjes de naam ik heb verbinding met de db en heb de juiste user/pw met de juiste machtiging
wie doet het licht aan want ik zie het even niet meer?
je hoort punten te gebruiken bij enkele quotes:
<?php
$sql = 'UPDATE `member_basic` SET `first_name` = '.$HTTP_POST_VARS[first_name].' WHERE `id` = 1 ';
?>
done.
Het is inderdaad wel een fraai brokje ellende...
<?
$sql = 'UPDATE `member_basic` SET `first_name` = \'$HTTP_POST_VARS[first_name]\' WHERE `id` = 1 ';
?>
Maak daar eens het volgende van:
<?
$sql = "
UPDATE
member_basic
SET
first_name = '".mysql_real_escape_string($_POST['first_name'])."'
WHERE
id = 1
";
?>
Kortom:
- De string waarin je de query zet, begint en eindigt met dubbele quotes
- De query noteer je over meerdere regels, wordt het een stuk leesbaarder
- Backtics ` help je naar de eeuwige jachtvelden, die troep hoort niet thuis in een fraai stukje SQL
- Variabelen haal je buiten quotes
- http_post_vars en zijn familieleden, worden al jaren niet meer gebruikt. Gebruik dus gewoon $_POST e.d.
- Wat dacht je van beveiliging? Een $_POST mag NOOIT zo maar in een query staan, SQL-injection ligt op de loer. Escapen dus! (met PDO zijn eenvoudiger oplossingen beschikbaar)
Dat was het denk ik wel, ga er maar eens mee aan de slag.
Ps. Vergeet niet te controleren of de query wel is gelukt...
is al de 2e maal dat ik na iets te posten nog even verder knutsel en het antwoord vindt...
mysql_query("UPDATE member_basic SET first_name = '$first_name_value' WHERE id = 1");
die werkt dus wel ik dacht dat ik die combinatie al had gehad maar ik liep alles wat ik kon verzinnen nog eens na en deze was de juiste...geen idee waarom het steeds fout ging maar ik kan weer verder
In eerste instantie had ik een iets nettere versie maar dat werkte niet. Wat ik toen had gedaan was in PhpMyadmin die query invoeren en er een php van laten maken om te kijken of ik er dan kon komen...met die backtricks dus als resultaat. Ik vind het sowiesoo verwarrend wanneer je nu enkele aanhalingstekens moet gebruiken en wanneer dubbel en wat het verschil is.
Ik heb net ook even jouw stukje geprbeerd maar dan krijg ik de volgende error
unexpected T_CONSTANT_ENCAPSED_STRING en dat is waar ik ook eerder tegen aan liep, vervolgens dus begon met het omgooien van de aanhalingstekens etc.
enig idee wat de reden van die error is? want ik wil idd wel een veiligere code hebben
Quotes zoals ik ze toepas:
- In PHP gebruik ik altijd enkele quotes om een string te quoten.
- In HTML gebruik ik altijd dubbele quotes (is verplicht)
Uitzondering: SQL
Een query, dus de SQL-string in zijn geheel, zet ik tussen dubbele quotes. Dit omdat je volgens de SQL-standaard enkele quotes moet gebruiken om een string in SQL te quoten:
SELECT
kolomnaam
FROM
tabelnaam
WHERE
naam = 'Frank'
En omdat ik geen zin heb om al deze quotes te moeten escapen, is het handig om deze string in PHP tussen dubbele quotes te zetten:
<?php
$sql = "
SELECT
kolomnaam
FROM
tabelnaam
WHERE
naam = 'Frank'
";
?>
Met deze eenvoudige regeltjes kan ik prima uit de voeten. Of het de beste oplossing is? Geen idee.