2012-03-28 63 views
0

我花了好幾天的時間試圖找出這個無濟於事。我已經檢查了PHP文檔以及有關「未定義索引」通知的多個其他形式問題,以及似乎通常的解決方案「isset()」函數。未定義的指數通知

但我無法解決我的情況。

下面是代碼:關於與$ SQL變量的行

<form action="" method="post"> 
<!-- Here are all the form fields --> 
<input type="submit" name="send" value="send"/> 
</form> 

<?php 

      $con = mysql_connect("#","#","#"); 
      if (!$con) 
      { 
       die('Could not connect: ' . mysql_error()); 
      } 

      mysql_select_db("#", $con); 

      $sql=" 
      INSERT INTO events (e_date, e_time, e_type, e_name) 
      VALUES ('$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]')"; 

      if (!mysql_query($sql,$con)) 
      { 
       die('Error: ' . mysql_error()); 
      } 
      echo "1 record added"; 

      mysql_close($con) 

     ?> 

4個啓事出現爲開頭的「價值」,指的是form_e_date等

我詢問一個道歉我意識到的問題有點頻繁,但我嘗試了其他人的解決方案,這些解決方案對我來說沒有任何作用,否則我沒有正確實施它們。

請幫忙,請隨時留下任何關於我的代碼的建設性反饋,因爲我是一個新手。

謝謝!

+0

哪些注意事項和錯誤將它們粘貼到你的問題 – 2012-03-28 23:52:13

+1

$ _ POST [form_e_time]應該是$ _ POST [「form_e_time」],除非form_e_time被定義爲一個常數,同樣,你引用的任何其他關聯數組索引,無論是你自己的數組還是超全局...這個問題每週回答幾十次 – 2012-03-28 23:53:26

+0

但是請注意,直接從用戶輸入插入是非常危險的,所有的用戶輸入都應該在用於任何類型的數據庫語句之前進行轉義。 – dldnh 2012-03-29 00:01:07

回答

4

代替

'$_POST[form_e_date]','$_POST[form_e_time]','$_POST[form_e_type]','$_POST[form_e_name]' 

你不應該使用

'$_POST["form_e_date"]','$_POST["form_e_time"]','$_POST["form_e_type"]','$_POST["form_e_name"]' 

的,因爲SQL注入攻擊的危險。

你應該使用mysql_real_escape_string來保護自己免受這種情況的侵害。

這將是更安全:

if (array_key_exists("form_e_date", $_POST)) 
    $form_e_date = mysql_real_escape_string($_POST["form_e_date"]); 
else 
    $form_e_date = null; 

if (array_key_exists("form_e_time", $_POST)) 
    $form_e_time = mysql_real_escape_string($_POST["form_e_time"]); 
else 
    $form_e_time = null; 

if (array_key_exists("form_e_type", $_POST)) 
    $form_e_type = mysql_real_escape_string($_POST["form_e_type"]); 
else 
    $form_e_type = null; 

if (array_key_exists("form_e_name", $_POST)) 
    $form_e_name = mysql_real_escape_string($_POST["form_e_name"]); 
else 
    $form_e_name = null; 
. 
. 
. 
$sql = "INSERT INTO events (e_date, e_time, e_type, e_name) " . 
    "VALUES ('{$form_e_date}','{$form_e_time}','{$form_e_type}','{$form_e_name}')"; 
+0

謝謝dldnh,我實際上已經閱讀過關於不允許用戶直接輸入數據庫並且稍後要解決的問題;我正在使用的應用程序目前僅用於我個人的離線使用,直到我知道我在做什麼爲止(我也看到了有關mysql_real_escape_string函數的地方);但是我嘗試瞭解我的通知問題的解決方案,但現在我得到4行$ form_e_date等未定義的索引通知。顯然,我仍然在做錯誤的事情和/或把代碼放在錯誤的地方? – Joshua 2012-03-29 00:08:34

+0

只是想確保你知道這個。 – dldnh 2012-03-29 00:10:08

+0

dldnh ,我實現了你的代碼,並且從之前的4條通知中刪除了受影響的1行,但是現在4條通知都在你給我的4條線上。 – Joshua 2012-03-29 00:16:08