Variabelen invoegen
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?
Code (php)
1
2
3
2
3
<?php
$sql = 'UPDATE `member_basic` SET `first_name` = '.$HTTP_POST_VARS[first_name].' WHERE `id` = 1 ';
?>
$sql = 'UPDATE `member_basic` SET `first_name` = '.$HTTP_POST_VARS[first_name].' WHERE `id` = 1 ';
?>
done.
Code (php)
1
2
3
2
3
<?
$sql = 'UPDATE `member_basic` SET `first_name` = \'$HTTP_POST_VARS[first_name]\' WHERE `id` = 1 ';
?>
$sql = 'UPDATE `member_basic` SET `first_name` = \'$HTTP_POST_VARS[first_name]\' WHERE `id` = 1 ';
?>
Maak daar eens het volgende van:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
$sql = "
UPDATE
member_basic
SET
first_name = '".mysql_real_escape_string($_POST['first_name'])."'
WHERE
id = 1
";
?>
$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...
Edit: Tikfoutje...
Gewijzigd op 01/01/1970 01:00:00 door Frank -
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
De query van Frank lijkt me prima
Thnxs
- 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:
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:
Met deze eenvoudige regeltjes kan ik prima uit de voeten. Of het de beste oplossing is? Geen idee.
toch?
juist, alhoewel ze tussen quotes ook werken, maar het is netter en sneller.
Weet ik veel, ik gebruik geen MySQL xD
Edwin schreef op 20.06.2007 00:41:
Zie het stukje 'variabelen haal je buiten quotes'.en als je een variable in je query hebt dan gebruik je '".$variable ."'
toch?
toch?
Arjan Schuurman schreef op 20.06.2007 09:21:
Leg eens uit wat dit met MySQL te maken heeft, snap dat even niet.Weet ik veel, ik gebruik geen MySQL xD
Wanneer je PDO gebruikt, dan gebruik je dit soort constructies (met dank aan de handleiding):
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
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
Gewijzigd op 01/01/1970 01:00:00 door Frank -
PDO is zo te zien idd iets waar ik in moet duiken. dank je