2013-11-15 102 views
0

我想用PHP插入到從網頁上的MySQL數據庫,但試圖使用變量,當它不工作(它工作得很好,如果我使用something同時使用$something不)插入不與PHP變量的工作

下面是代碼:

mysqli_query($con,"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) values ('".$_GET['iddoctor']."', '".$_GET['idpacient']."', '".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')"); 

和數據來自一個其它頁面與這種形式:

<form action="thanks/index.php" method="get"> 
    <span class="largetext">ID. doctor</span><br/> 
    <input type="password" name="iddoctor"><br/> 
    <span class="largetext">ID. patient</span><br/> 
    <input type="password" name="idpatient"><br/> 
    <span class="largetext">Date</span><br/> 
    <input type="date" name="date"><br/> 
    <span class="largetext">Amount</span><br/> 
    <input type="number" name="amount"><br/> 
    <span class="largetext">Description</span><br/> 
    <input type="text" name="description"><br/><br/> 
    <input type="submit" value="Accept" style="background-color:#FF5F00; color:#FFFFFF; opacity: 0.77;"> 
</form> 

謝謝!給所有注意到SQL injection問題的人,我也會看看這個。

我現在的作品,這裏是更正後的代碼:

mysqli_query($con,"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) VALUES ('".$_GET['idpatient']."', '".$_GET['iddoctor']."','".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')"); 
+8

聖SQL注入蝙蝠俠! –

+1

我等待第一個評論:你是SQL注入漏洞 – aldanux

+0

arturojain你是如何破解stackoverflow比成爲aldanux :) – ismail

回答

1

正如與OP討論的那樣,$_GET['idpacient']name="idpatient"所以沒有匹配。

我相信你想使用$_GET['idpatient']name="idpacient"

採取的糾正哪一個你挑。

1

的字段順序錯誤:

Atendido (idPaciente, idDoctor 
VALUES ('".$_GET['iddoctor']."', '".$_GET['idpacient']."' 

變化:

"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) 
VALUES ('".$_GET['idpacient']."', '".$_GET['iddoctor']."', 
'".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')") 
+1

這些字段的順序可能錯誤,但這不應該阻止發生'INSERT'。 – 2013-11-15 01:53:55

+0

可以像外鍵violetion – rray

+0

感謝您也發現錯誤。 – arturojain

0

INSERT語法使得小盡管如此:

mysqli_query($con,"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) values ('".$_GET['iddoctor']."', '".$_GET['idpacient']."', '".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')"); 

我會建議你做以下,並使用sprintf -to使格式化簡單:

$insert_query = sprintf("INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) values ('%s','%s','%s','%s','%s')", $_GET['iddoctor'], $_GET['idpacient'], $_GET['date'], $_GET['amount'], $_GET['description']); 
mysqli_query($con,$insert_query); 

什麼是好的約sprintf是它允許從數據本身,你可以輕鬆地單獨格式化邏輯。把它想象成一個小型的模板系統。

而且,我甚至會建議一步把它做這個:

$data_keys = array('idPaciente','idDoctor','fecha','costo','tipoAtencion'); 
$data_values = array(); 
foreach($data_keys as $key) { 
    $value = array_key_exists($key, $_GET) && !empty($_GET[$key]) ? $_GET[$key] : null; 
    if (!empty($value)) { 
    $data_values[$key] = $value; 
    } 
} 
if (!empty($data_values)) {  
    $insert_query = sprintf("INSERT INTO Atendido (%s) values ('%s')", implode(',', array_keys($data_values)), implode("','", $data_values)); 
    echo $insert_query; 
    mysqli_query($con,$insert_query); 
} 

你有一個過程來過濾$_GET值,使的INSERT更容易創造,瞭解如何irregardless這樣你有很多價值。