unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
jarro - 28/01/2006 13:01
HTML interesse
Hoi allemaal,
Ik heb een foutmelding, die mij behoorlijk onbekend voorkomt..
unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in order.php on line 120
<?
$password = activatiecode(6);
$actcode = activatiecode(12);
$ip = $_SERVER['REMOTE_ADDR'];
$datum = time();
$bestellingen = 1;
$lastvisit = time();
mysql_query("INSERT INTO klantgegevens(voorletters, achternaam, adres, postcode, plaats, telnummer, email, password, ip, bestellingen, land, datum, lastvisit, actcode)
VALUES($_SESSION['voorletters'], $_SESSION['achternaam'], $_SESSION['adres'], $_SESSION['postcode'], $_SESSION['plaats'], $_SESSION['telnummer'], $_SESSION['email'],
$password, $ip, $bestelling, Nederland, $datum, $lastvisit, $actcode)") or die (mysql_error());
?>
<?
$password = activatiecode( 6 ) ;
$actcode = activatiecode( 12 ) ;
$ip = $_SERVER [ 'REMOTE_ADDR' ] ;
$bestellingen = 1 ;
mysql_query ( "INSERT INTO klantgegevens(voorletters, achternaam, adres, postcode, plaats, telnummer, email, password, ip, bestellingen, land, datum, lastvisit, actcode) VALUES($_SESSION ['voorletters'], $_SESSION ['achternaam'], $_SESSION ['adres'], $_SESSION ['postcode'], $_SESSION ['plaats'], $_SESSION ['telnummer'], $_SESSION ['email'],
$password , $ip , $bestelling , Nederland, $datum , $lastvisit , $actcode )") or
die ( mysql_error ( ) ) ; ?>
De foutmelding komt op de hele mysql_query regel, maar ik zie/snap de fout niet:s
Iemand een idee?
Met vriendelijke groet,
jarro
19 antwoorden
Gesponsorde links
Richard - 28/01/2006 13:03 (laatste wijziging 28/01/2006 13:07)
Crew algemeen
die variabelen moet je maar even buiten de string halen:
VALUES(" . $_SESSION['voorletters'] . ", " . $_SESSION['achternaam'] . ",
VALUES( " . $_SESSION ['voorletters'] . " , " . $_SESSION ['achternaam'] . " ,
etc.
EDIT: ik was lekker wel als eerste;)
EDIT2: wat je ook nog kunt doen:
VALUES({$_SESSION['voorletters']}, {$_SESSION['achternaam']},
VALUES( { $_SESSION [ 'voorletters' ] } , { $_SESSION [ 'achternaam' ] } ,
zo laat je die dubbele quotes tenminste nog doen waar ze voor bedoeld zijn:p
BigBug - 28/01/2006 13:03
PHP expert
Zucht, je values zo neerzetten:
<?php
mysql_query("INSERT INTO iets (bla) VALUES ('".$_POST['bla']."')");
?>
<?php
mysql_query ( "INSERT INTO iets (bla) VALUES ('" . $_POST [ 'bla' ] . "')" ) ; ?>
MothZone - 28/01/2006 13:04 (laatste wijziging 28/01/2006 13:05)
PHP ver gevorderde
Variabelen buiten quotes!!!
<?
$password = activatiecode(6);
$actcode = activatiecode(12);
$ip = $_SERVER['REMOTE_ADDR'];
$datum = time();
$bestellingen = 1;
$lastvisit = time();
mysql_query("INSERT INTO klantgegevens(voorletters, achternaam, adres, postcode, plaats, telnummer, email, password, ip, bestellingen, land, datum, lastvisit, actcode)
VALUES('".$_SESSION['voorletters']."', '".$_SESSION['achternaam']."', '".$_SESSION['adres']."', '".$_SESSION['postcode']."', '".$_SESSION['plaats']."', '".$_SESSION['telnummer']."', '".$_SESSION['email']."',
'".$password."', '".$ip."', '".$bestelling."', 'Nederland', '".$datum."', '".$lastvisit."', '".$actcode."')") or die (mysql_error());
?>
<?
$password = activatiecode( 6 ) ;
$actcode = activatiecode( 12 ) ;
$ip = $_SERVER [ 'REMOTE_ADDR' ] ;
$bestellingen = 1 ;
mysql_query ( "INSERT INTO klantgegevens(voorletters, achternaam, adres, postcode, plaats, telnummer, email, password, ip, bestellingen, land, datum, lastvisit, actcode) VALUES('" . $_SESSION [ 'voorletters' ] . "', '" . $_SESSION [ 'achternaam' ] . "', '" . $_SESSION [ 'adres' ] . "', '" . $_SESSION [ 'postcode' ] . "', '" . $_SESSION [ 'plaats' ] . "', '" . $_SESSION [ 'telnummer' ] . "', '" . $_SESSION [ 'email' ] . "',
'" . $password . "', '" . $ip . "', '" . $bestelling . "', 'Nederland', '" . $datum . "', '" . $lastvisit . "', '" . $actcode . "')" ) or
die ( mysql_error ( ) ) ; ?>
[edit] Jexus en bigbug waren me voor
Bart - 28/01/2006 13:05 (laatste wijziging 28/01/2006 13:09)
PHP expert
<?
$password = activatiecode(6);
$actcode = activatiecode(12);
$ip = $_SERVER['REMOTE_ADDR'];
$datum = time();
$bestellingen = 1;
$lastvisit = time();
mysql_query("INSERT INTO klantgegevens(voorletters, achternaam, adres, postcode, plaats, telnummer, email, password, ip, bestellingen, land, datum, lastvisit, actcode)
VALUES('".$_SESSION['voorletters']."',
'".$_SESSION['achternaam']."',
'".$_SESSION['adres']."',
'".$_SESSION['postcode']."',
'".$_SESSION['plaats']."',
'".$_SESSION['telnummer']."',
'".$_SESSION['email']."',
'".$password."',
'".$ip."',
'".$bestelling."',
'Nederland',
'".$datum."',
'".$lastvisit."',
'".$actcode."'")) or die (mysql_error());
?>
<?
$password = activatiecode( 6 ) ;
$actcode = activatiecode( 12 ) ;
$ip = $_SERVER [ 'REMOTE_ADDR' ] ;
$bestellingen = 1 ;
mysql_query ( "INSERT INTO klantgegevens(voorletters, achternaam, adres, postcode, plaats, telnummer, email, password, ip, bestellingen, land, datum, lastvisit, actcode) VALUES('" . $_SESSION [ 'voorletters' ] . "',
'" . $_SESSION [ 'achternaam' ] . "',
'" . $_SESSION [ 'adres' ] . "',
'" . $_SESSION [ 'postcode' ] . "',
'" . $_SESSION [ 'plaats' ] . "',
'" . $_SESSION [ 'telnummer' ] . "',
'" . $_SESSION [ 'email' ] . "',
'" . $password . "',
'" . $ip . "',
'" . $bestelling . "',
'Nederland',
'" . $datum . "',
'" . $lastvisit . "',
?>
kokx - 28/01/2006 13:06 (laatste wijziging 28/01/2006 13:09)
Onbekend
die mysql regel moet zo: (denk ik)
<?php
mysql_query("INSERT INTO klantgegevens(voorletters, achternaam, adres, postcode, plaats, telnummer, email, password, ip, bestellingen, land, datum, lastvisit, actcode) VALUES(". $_SESSION['voorletters'] .", ". $_SESSION['achternaam'] .", ". $_SESSION['adres'] .", ". $_SESSION['postcode'] .", ". $_SESSION['plaats'] .", ". $_SESSION['telnummer'] .", ". $_SESSION['email'] .", ". $password .", ". $ip .", ". $bestelling .", Nederland, ". $datum .", ".$lastvisit .", ". $actcode .")") or die (mysql_error());
?>
<?php
mysql_query ( "INSERT INTO klantgegevens(voorletters, achternaam, adres, postcode, plaats, telnummer, email, password, ip, bestellingen, land, datum, lastvisit, actcode) VALUES(" . $_SESSION [ 'voorletters' ] . ", " . $_SESSION [ 'achternaam' ] . ", " . $_SESSION [ 'adres' ] . ", " . $_SESSION [ 'postcode' ] . ", " . $_SESSION [ 'plaats' ] . ", " . $_SESSION [ 'telnummer' ] . ", " . $_SESSION [ 'email' ] . ", " . $password . ", " . $ip . ", " . $bestelling . ", Nederland, " . $datum . ", " . $lastvisit . ", " . $actcode . ")" ) or
die ( mysql_error ( ) ) ; ?>
Edit: Meerdere mensen waren me voor
kokx - 28/01/2006 13:10 (laatste wijziging 28/01/2006 13:11)
Onbekend
@vinTage: Die heb ik geen of ben ik vergeten.
Gerard - 28/01/2006 18:41
Ouwe rakker
Citaat:
@henri: die addslashes is niet altijd nodig: als ik me niet vergis, doen de meeste servers dit tegenwoordig zelf
Laat magic_quotes_gpc nou niet je kont redden. Slash de zooi zelf ff.
Button - 28/01/2006 18:52
PHP ver gevorderde
Ja maar dan zit je dikwijls met dubbele slashes ... (als je niet de keuze hebt voor het opzetten van magic_quotes_gpc) maarja iedereen zijn eigen smaak ...:p
kokx - 28/01/2006 19:21
Onbekend
@ButtonMan: Dan controleer je toch of die aanstaat:
<?php
if(get_magic_quotes_gpc()){
addslashes($_POST['iets']);
}
?>
Richard - 29/01/2006 07:36
Crew algemeen
het is altijd beter om niet te vertrouwen op magic_quotes_gpc, dit zorgt altijd voor hopen ellende, aangezien je input dan nooit echt is wat je wilde.
ik gebruik zelf altijd dit in mijn config bestanden, voor garantie dat ik nooit geaddslashde input krijg:
<?php
if (get_magic_quotes_gpc () == 1)
{
function stripit_deep ($data)
{
return (is_array ($data)) ? array_map ('stripit_deep', $data) : stripslashes ($data);
}
$_GET = array_map ('stripit_deep', $_GET);
$_POST = array_map ('stripit_deep', $_POST);
// let op: $_COOKIE kan nooit arrays bevatten;)
$_COOKIE = array_map ('stripslashes', $_COOKIE);
$_REQUEST = array_map ('stripit_deep', $_REQUEST);
}
// zorgt ervoor dat mysql ook niet slashes gaat toevoegen.
set_magic_quotes_runtime (0);
?>
<?php
{
function stripit_deep ( $data )
{
}
// let op: $_COOKIE kan nooit arrays bevatten;)
$_COOKIE = array_map ( 'stripslashes' , $_COOKIE ) ; $_REQUEST = array_map ( 'stripit_deep' , $_REQUEST ) ; }
// zorgt ervoor dat mysql ook niet slashes gaat toevoegen.
?>
en ism deze code ALTIJD PHP.net: mysql_real_escape_string gebruiken over non-integer waarden.
Button - 29/01/2006 08:56
PHP ver gevorderde
@Jexus: hoe werkt dat stukje code dan? wordt die functie vanuit die array_map aangeroepen ofzoiets? en als de $data een array is dan return je terug een array_map? leg je het me eens uit ?
Richard - 29/01/2006 09:05
Crew algemeen
PHP.net: array_map
array_map zorgt ervoor dat de functie die in de eerste parameter aangeeft (de callback) toegepast word op ieder element van de array die je in de 2e parameter aangeeft;)
Richard - 29/01/2006 09:47
Crew algemeen
lees anders even die pagina die ik gaf door, blijkbaar heb je dat niet gedaan.
Button - 29/01/2006 10:19
PHP ver gevorderde
ah k, nu snap ik denk ik ;)
return (is_array ($data)) ? array_map ('stripit_deep', $data) : stripslashes ($data);
met dat wordt gecontroleerd dat de array bv. $_GET zelf ook geen arrays niet meer bevat! (als dat zo is dan moeten de waarden van die tweede array ook apart worden gestript )
dank je !
Gesponsorde links
Dit onderwerp is gesloten .