2015-05-01 59 views
0

我到處尋找,但沒有找到答案。我的代碼是這樣的:如何在if語句中更改php中的var?

<form method="post" action=""> 
<input type="radio" name="ans" value="test">1 
<input type="radio" name="ans" value="test2">2<br /> 
<select name="number"> 
    <option value="one" selected="selected">1</option> 
    <option value="two">2</option> 
</select> 
<input type="submit" name="Write" value="Next" /> 
</form> 
$ans = "BD"; 
if(isset($_POST['ans'])) 
{ 
    $ans = $_POST['ans']; 
    echo "<hr /><form method='post' action=''>"; 
    switch($_POST['number']) 
    { 
     case "one" : 
      echo "<textarea name='txt' rows='10' cols='150'>This is first test textarea</textarea>"; 
      break; 
     case "two" : 
      echo "<textarea name='txt' rows='10' cols='150'>This is second test textarea</textarea>"; 
      break; 
    } 
    echo "<br /><input type='submit' value='Send' /></form>"; 
} 
if(isset($_POST['txt'])) 
{ 
    mysql_query("INSERT INTO `MyPrivate`.`TestPage` (`ans`, `number`, `text`) VALUES ('$ans', '$number', '" . $_POST['txt'] . "');"); 
} 

我想創造寄存器(或somethink這樣),但是在這個代碼中,我有一個問題。我想將這些東西保存到數據庫中,但'ans'每次都是「BD」。我只是想:$ ans = $ _POST ['ans'];但它不起作用。你能告訴我我做錯了什麼嗎?如果你能寫我回答這個問題。 對不起,但我不是英文翻譯:)

+0

如果您提交的第二種形式,從第一種形式的POST值不再存在。您需要將它們(例如)保存在SESSION變量中。此外,您的代碼易受[SQL注入](http://stackoverflow.com/q/60174/4193263)的影響。要修復這個嚴重的安全漏洞,請使用「準備好的語句」。 – ByteHamster

+0

也可以將第一個傳遞的'POST'值放入第二個表單的隱藏字段中,以便第二個表單在第二次提交時傳遞。應該使用準備好的語句並從'mysql_'切換到'mysqli_'或'PDO'。 – chris85

+1

非常感謝!它爲我工作。我會將我的代碼更改爲SQL Injection的無懈可擊。 – Mahok

回答

1

這是非常INSECURE ... RIPE的SQL注入。請清理由表單提交的數據......使用PDO-> prepare或mysqli的參數化值準備將爲您執行此操作。

這就是說,你需要做一個「答」表單字段(隱藏)關於第二個表單提交,類似如下:

<form method="post" action=""> 
<input type="radio" name="ans" value="test">1 
<input type="radio" name="ans" value="test2">2<br /> 
<select name="number"> 
    <option value="one" selected="selected">1</option> 
    <option value="two">2</option> 
</select> 
<input type="submit" name="Write" value="Next" /> 
</form> 
$ans = "BD"; 
if(isset($_POST['ans'])) 
{ 
    $ans = $_POST['ans']; 
    echo "<hr /><form method='post' action=''>"; 
    echo "<input type='hidden' name='ans' value='{$ans}' />"; 
    switch($_POST['number']) 
    { 
     case "one" : 
      echo "<textarea name='txt' rows='10' cols='150'>This is first test textarea</textarea>"; 
      break; 
     case "two" : 
      echo "<textarea name='txt' rows='10' cols='150'>This is second test textarea</textarea>"; 
      break; 
    } 
    echo "<br /><input type='submit' value='Send' /></form>"; 
} 
if(isset($_POST['txt'])) 
{ 
    mysql_query("INSERT INTO `MyPrivate`.`TestPage` (`ans`, `number`, `text`) VALUES ('$ans', '$number', '" . $_POST['txt'] . "');"); 
}