2012-04-28 103 views
0

這是我最新的問題。我有佈局和一切工作,但現在我想弄清楚這部分的PHP一面。我想要做的是我如何具體說哪個單選按鈕使用PHP檢查?我嘗試使用$ _POST ['ins'](其中'ins'是插入按鈕的ID),但沒有奏效。我希望它能夠在插入按鈕被選中時執行,做任何步驟,但我不知道如何獲取它,所以說插入按鈕被選中/檢查。識別哪個單選按鈕被檢查並使用php

這裏是我的代碼

<html> 
<head><title></title> 
<script type="text/javascript"> 

function show() 
{ 
if (document.getElementById('ins').checked){ 
document.getElementById("p1").style.display = "block" 
document.getElementById("zn").style.display = "block"; 
document.getElementById("p2").style.display = "block" 
document.getElementById("gpa").style.display = "block"; 
document.getElementById("p3").style.display = "none" 
document.getElementById("ngpa").style.display = "none"; 
} 
else if (document.getElementById('upd').checked){ 
document.getElementById("p1").style.display = "block" 
document.getElementById("zn").style.display = "block"; 
document.getElementById("p2").style.display = "none" 
document.getElementById("gpa").style.display = "none"; 
document.getElementById("p3").style.display = "block" 
document.getElementById("ngpa").style.display = "block"; 
} 
else { 
document.getElementById("p1").style.display = "block" 
document.getElementById("zn").style.display = "block"; 
document.getElementById("p2").style.display = "none" 
document.getElementById("gpa").style.display = "none"; 
document.getElementById("p3").style.display = "none" 
document.getElementById("ngpa").style.display = "none"; 
} 
} 

function check() 
{ 
    if((document.getElementById("zn").value == "") || (document.getElementById("gpa").value == "") || 
    (isNaN(parseFloat(document.getElementById("gpa").value)))) 
    { 
     alert("Please complete both fields and check to see if the GPA entered is a number!"); 
     return false; 
    } 
    return true; 

} 
</script> 



</head> 
<body> 
<form action = "index.php" onsubmit="return check();"> 
<input type="radio" name="group" id = "ins" onclick ="show()"/> Insert Student <br /> 
<input type="radio" name="group" id = "upd" onclick ="show()"/> Update Student <br /> 
<input type="radio" name="group" id = "del" onclick ="show()"/> Delete Student <br /> 
<p id="p1" style="display:none">Enter Z-number: <br /></p> 
<input type='text' name = 'z' id ="zn" maxlength='9' style="display:none"/> 
<p id="p2" style="display:none"><br />Enter GPA: <br /></p> 
<input type='text' name='gpa' id ="gpa" style="display:none"/> 
<p id="p3" style="display:none"><br /> Enter new GPA: <br /></p> 
<input type="text" name ="ngpa" id ="ngpa" style="display:none"/> 
<br /><input type='submit' value='Submit request' name='submit'/> 
</form> 
<?php 
if (isset($_POST['z'])) { 
$con = mysql_connect('localhost', '*****', '***********'); 
if ($con) { 
mysql_select_db('ghamzal', $con); 

$a = $_POST['z']; 
$b = $_POST['gpa']; 
$sql = "INSERT INTO Students VALUES (' $a ' , '$b')"; 

if (mysql_query($sql, $con)) echo 'Operation succeeded'; 
else echo 'Not succeeded ' .mysql_error(); 




if (isset($_POST['ins'])) { 
$sql = "SELECT * FROM Students"; 
$res = mysql_query($sql, $con); 

echo "<table border ='1'>"; 
echo "<tr><th>Znum</th><th>GPA</th></tr>"; 
while ($r = mysql_fetch_array($res)) { 
echo "<tr><td>".$r['Znum']."</td><td>".$r['gpa']. "</td></tr>"; 
} 
echo "</table>"; 
} 
mysql_close($con); 
} 
else { 
echo 'Insertion failed'. 'Could not connect to DB.';} 

} 

?> 
</body> 
</html> 
+3

您的代碼易受SQL注入攻擊。你真的**應該使用準備好的語句,將你的變量作爲參數傳遞給你,這些參數不會被SQL評估。如果你不知道我在說什麼,或者如何去做,請閱讀[Bobby Tables](http://bobby-tables.com)。 – eggyal 2012-04-28 15:54:02

+0

您是否試過在Google搜索[PHP單選按鈕](http://www.google.com/search?q=PHP+radio+button)時出現的任何教程? – eggyal 2012-04-28 15:56:28

回答

2

有幾個不同的問題在這裏。第一個是你的表單是使用GET方法提交的,但是你試圖在PHP中檢索你的值,就好像它已經用POST方法提交一樣。既然你在數據庫中更新值,POST方法是優選的,所以你的形式打開的標籤應改爲這樣:

<form method="post" action="index.php" onsubmit="return check();"> 

「名稱」輸入的字段是什麼在你的$_POST變量結束,並且該變量的值是所選輸入的值。

所以,你應該改變你的投入是這樣的:

<input type="radio" name="selection" value="ins" id="ins" onclick="show()"/><label for="ins">Insert Student</label><br /> 
<input type="radio" name="selection" value="upd" id="upd" onclick="show()"/><label for="upd">Update Student</label><br /> 
<input type="radio" name="selection" value="del" id="del" onclick="show()"/><label for="del">Delete Student</label><br /> 

(我加了<label>標記,因爲它是一個很好的做法,包括它有助於輔助功能,當有人點擊的標籤您的單選按鈕,就會把它當作已經點擊了單選按鈕本身)

現在在你的PHP代碼:

$selection = $_POST['selection']; 

現在$selection將包含值代表哪個單選按鈕被選中,您可以執行適當的邏輯:

if ($selection == "ins") { 
    // do work here 
} elseif ($selection == "upd") { 
    // do work here 
} 
// etc. 
+0

好吧,我從來沒有使用過標籤屬性,所以這對我來說是新的。什麼是使用標籤? – beginnerprogrammer 2012-04-28 16:24:50

+0

看看這個:[爲什麼你的表單複選框需要標籤標籤](http:// uxmovement。com/forms/why-your-form-checkboxes-need-to-have-label-tags /) - 他們使複選框更加可用和可訪問。 – Charles 2012-04-28 16:27:55

+0

好的,那是一篇很棒的文章並且閱讀。謝謝你。我正在處理更新單選按鈕時檢查。它要求輸入znumber並進入新的gpa。我該怎麼說,更新用戶在mysql中輸入的znumber的gpa值 – beginnerprogrammer 2012-04-28 16:32:39

3

至於你的問題(如果我得到你的權利) - 你應該設定每個無線電的屬性在一個你打算在你的服務器端代碼識別它的時候,使用例如:

<input type="radio" name="group" value="ins" id = "ins" onclick ="show()"/> Insert Student <br /> 
<input type="radio" name="group" value="upd" id = "upd" onclick ="show()"/> Update Student <br /> 
<input type="radio" name="group" value="del" id = "del" onclick ="show()"/> Delete Student <br /> 

和服務器端,被選爲無線電的值將作爲訪問POST參數由組名稱,在您的情況下:

$_POST['group'] 

And..I與eggyal的評論非常贊同,並建議你看看準備的語句(和一般的SQL注入)。

祝你好運!