2012-12-04 58 views
1

许多变量所以我想知道如何从$ _POST在PHP中获取变量时,我设置数据的名称到目前为止,开始,结束与数字表示什么数字日期和开始和结束他们在哪里。对于使用形式,它工作正常创建变量创建varaibles,问题访问它们时,我得到以下错误:

Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)

我的代码:

<?php 
$club=$_POST['club']; 
$name=$_POST['event']; 
$text=$_POST['descript']; 

$num=$_POST['quantity']; 
$user=$_POST['user']; 

$flag=$_POST['flag']; 

require_once("conf.inc.php"); 

$host=$CFG->dbHost; 
$userDB=$CFG->dbUser; 
$pword=$CFG->dbPassword; 
$db=$CFG->dbDatabase; 

$mysqli = new mysqli($host, $userDB, $pword, $db); 
$mysqli->connect($host, $userDB, $pword, $db); 
if(!isset($flag)) { 
    $mysqli->query("INSERT INTO fi_events VALUES $name, $text, $club"); 
    $eventResult = $mysqli->query("SELECT ID FROM fi_events WHERE Name=$name, FlavourText=$text, ClubID=$club"); 
    while(list($event) = $eventResult->fetch_row()) { 
     $ID = $event; 
    } 
} 
else { 
    $eventID = $_POST['eventID']; 
    for($i=0;$i<$num;$i++){ 
     $mysqli->query("INSERT INTO fi_slots VALUES $eventID, $_POST['slots$i'], 0, $_POST['date$i'], $_POST['start$i'], $_POST['end$i']"); 
    } 
    echo "SLOT CREATION SUCCESSFUL!"; 
    echo "<form action='viewEvent.php' enctype='text/plain' method='post'> 
     <input type='hidden' id='eventID' name='eventID' value= '$ID' /> 
     <input type='hidden' id='user' name='user' value= '$user' /> 
     <input type='submit' name='Submit' value='View Your Event'> 
     </form>"; 
} 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Make Slots</title> 
</head> 

<body> 
<?php 
if(!isset($flag)){ 
    echo ("<form action='makeSlots.php' method='post'>"); 
     echo "<input type='hidden' id='quantity' name='quantity' value= '$num' />"; 
     echo "<input type='hidden' id='flag' name='flag' value= '1' />"; 
     echo "<input type='hidden' id='eventID' name='eventID' value= '$ID' />" 
     echo "<input type='hidden' id='user' name='user' value= '$user' />" 
    for ($i=0; $i<$num;$i++){ 
     echo ("Date:&nbsp; <input type='date' id='date$i' name='date$i' /> 
     <br/>"); 
     echo ("Time Begin:&nbsp; <input type='text' id='start$i' name='start$i' /> 
     <br/>"); 
     echo ("Time End:&nbsp; <input type='text' id='end$i' name='end$i' /> 
     <br/>"); 
     echo ("Total Slots:&nbsp; <input type='text' id='slots$i' name='slots$i' /> 
     <br/>"); 
    } 
    echo ("<input type='submit' name='Submit' value='Enter' />"); 
    echo("</form>"); 
} 
?> 
</body> 
</html> 
+0

由$ _ POST您获得价值女巫张贴你确定正在发布slots1,slots2 ...插槽$ num ans还有日期。 ..? –

+0

哪一行是报告的语法错误? – Barmar

+0

你正在使用mysqli。从mysql切换到mysqli的主要原因之一是使用预准备语句。那么为什么你插入字符串而不是这样做呢?使用占位符切换到准备好的语句,您的问题将消失,并且您还将拥有更安全的代码。 – Barmar

回答

1

我想你会需要这一个使用串联:

$mysqli->query("INSERT INTO fi_slots VALUES $eventID," . $_POST["slots$i"] . ",..."); 
+0

或者他可以使用'$ _POST [“插槽$ i”]'。变量插入在双引号内,不在单引号内。 – Barmar

+0

它不是一个问题..在双引号..我怀疑问题可能是整体$ _POST [] –

+0

这是一个很好的观点。我认为这可能是解释可变两个字符串深层的问题。我没有自己尝试过,似乎它可能是罪魁祸首。 – Selosindis

0

正确的语法是这样的:

"{$_POST['slot' . $i]}" 

大括号明确地描述了表达式,所以编译器不会发出抱怨,并且它在内部执行串接。

重要

这样做是不推荐,因为SQL注入风险和准备语句是要走的路:

$stmt = $mysqli->prepare("INSERT INTO fi_slots VALUES (?, ?, 0, ?, ?, ?)"); 

$stmt->bind_param('s', $_POST['slots' . $i]); 
// etc. 
$stmt->execute();