Invoegen in mysql i.c.m. superglobals

Pagina: 1
Acties:

  • josvane
  • Registratie: Oktober 2002
  • Laatst online: 21:51
Hallo,

Op dit moment ben ik bezig met het schrijven van een script. Dit script voert een aantal waardes in de database in.

Nou draaide dit script op een oudere versie van php. Waarmee ik als volgt de gegevens in de database zet.
PHP:
1
mysql_query("INSERT INTO mobile_phones (waarde1, waarde 2)VALUES ('$waarde1,'$waarde2')") or die (mysql_error());

Dit werkte gewoon
Nu moet (wil) ik op de nieuwe server werken met superglobals en moet het volgens mij als volgt. Het script geeft aan dat alles succesvol is verlopen, alleen hij voert niks in
PHP:
1
mysql_query("INSERT INTO mobile_phones (waarde1, waarde 2)VALUES ('{$_POST['waarde1']},'{$_POST['waarde2']}')") or die (mysql_error());

Als ik nu voor de query het volgende doe! Dan gaat het wel goed.
PHP:
1
2
$waarde1 = $_POST['waarde1'];
$waarde2 = $_POST['waarde2'];

Doe ik het zo op de juiste manier of kan het ook zo als ik dacht in manier 2

Groeten Jos

  • ludo
  • Registratie: Oktober 2000
  • Laatst online: 01-03 18:17
Manier 2 kan ook, alleen moet je dan wat handiger omgaan met quotes ;)

Zo zou ik het doen:
PHP:
1
mysql_query("INSERT INTO mobile_phones (waarde1, waarde 2) VALUES ('" . $_POST['waarde1'] . "', '" . $_POST['waarde2'] . "')") or die (mysql_error());

  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 10-03 13:21

tombo_inc

uhuh

idd, binnen enkele quotes kan je geen variabelen zetten want die worden dan niet geparsed. je moet dus gewoon dubbele quotes gebruiken en sowieso altijd vars buiten quotes houden.

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


  • josvane
  • Registratie: Oktober 2002
  • Laatst online: 21:51
Het werkt thanks.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Er zit een verschil tussen deze twee, je benadert een andere index:
PHP:
1
2
"tekst $array['bla'] tekst";
"tekst " . $array['bla'] . " tekst";


De eerste zoekt naar de index 'bla', de tweede naar bla... Andere mogelijkheden:
PHP:
1
2
"tekst {$array['bla']} tekst";
"tekst $array[bla] tekst";


En dat is informatie die allemaal gewoon in de php-handleiding staat.
Tombo_inc schreef op zaterdag 26 februari 2005 @ 16:50:
idd, binnen enkele quotes kan je geen variabelen zetten want die worden dan niet geparsed. je moet dus gewoon dubbele quotes gebruiken en sowieso altijd vars buiten quotes houden.
De enkele quotes zijn onderdeel van de string-inhoud dus dat slaat nergens op in deze context.

[ Voor 36% gewijzigd door ACM op 26-02-2005 17:09 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:23

crisp

Devver

Pixelated

Die laatste manier zal in oudere PHP versies bla als constant beschouwen, dus dat levert dan een ander resultaat op:
PHP:
1
2
3
$array = array('bla' => 'foo', 'woei' => 'bar');
define('bla', 'woei');
echo "tekst $array[bla] tekst";

Intentionally left blank


  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 10-03 13:21

tombo_inc

uhuh

ACM schreef op zaterdag 26 februari 2005 @ 17:08:
Er zit een verschil tussen deze twee, je benadert een andere index:
PHP:
1
2
"tekst $array['bla'] tekst";
"tekst " . $array['bla'] . " tekst";


De eerste zoekt naar de index 'bla', de tweede naar bla... Andere mogelijkheden:
PHP:
1
2
"tekst {$array['bla']} tekst";
"tekst $array[bla] tekst";


En dat is informatie die allemaal gewoon in de php-handleiding staat.
[...]

De enkele quotes zijn onderdeel van de string-inhoud dus dat slaat nergens op in deze context.
ik had het over de query niet over arrays

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:23

crisp

Devver

Pixelated

$_POST is ook een array ;)

anyway, dit zou gewoon moeten werken voor zover ik kan zien (afgezien van het feit dat het mbt SQL-injection misschien niet zo safe is):
PHP:
1
mysql_query("INSERT INTO mobile_phones (waarde1, waarde2 )VALUES ('{$_POST['waarde1']},'{$_POST['waarde2']}')") or die (mysql_error());

Intentionally left blank


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Tombo_inc schreef op zaterdag 26 februari 2005 @ 17:40:
ik had het over de query niet over arrays
Dan snap ik je punt niet en als ik je wel snap was het irrelevant. $_POST is een array zoals crisp al roept en die array werd in een string met double quotes gebruikt, dat er toevallig ook single quotes in stonden was niet relevant, behalve dan vanwege de verkeerde index in de array.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Ik denk dat hij bedoelt dat '$var' niet geparsed wordt. Stel dat $var de waarde abc heeft dan is de zonet gegeven string nog steeds '$var'. "$var" zou wel "abc" worden.

Verder denk ik dat Tombo_inc het probleem niet goed begrijpt. Hij denkt volgens mij dat de code niet werkt puur omdat bla tussen enkele quotes staat, maar dat heeft er in princiepe niet zo veel mee te maken. Dat omdat het ook niet zou werken tussen dubbele quotes of wat voor leestekens dan ook.

[ Voor 34% gewijzigd door Michali op 27-02-2005 12:14 ]

Noushka's Magnificent Dream | Unity

Pagina: 1