2015-11-03 258 views
0

我更喜歡在php中使用它,而不是在mysqli中,因爲時間。sql插入語句語法

如何在MySQL中使用php插入部分列?

例如,我在sql中的列表是:courseid,code,title,cr,先決條件,std_id,狀態,等級。我使用表格來獲取php中的數據,但狀態和等級都沒有數據,因爲我希望用戶能夠通過它們查看每個學生從課程列表中完成的課程。 我希望用戶將他們插入與特定數據固定的其他列。 我在這段代碼中面臨的問題是插入數據來到新記錄中,我想只插入兩列,這兩列是狀態和和當然名字的等級。

如何插入在短短的地位和品位

enter code here 
    <?php 
    error_reporting(0); 
    include('config.php'); 
    $sql="select * from studyplan"; 
    $result=mysql_query($sql); 
    while ($row = mysql_fetch_array($result)){ 

    $id=$row['courseid']; 

    $code=$row['code']; 
    $Title=$row['title']; 
      $cr=$row['cr']; 
     $pre=$row['prerequisite']; 
     $std=$row['std_id']; 
     $status=$row['status']; 
     $grade=$row['grade']; 


    echo "<tr class='edit_tr' id='$id'> 

    <td class='edit_td'> 
      <span class='text' id='one_$id' >$id </span> 
      </td> 

      <td class='edit_td'> 
      <span class='text' id='one_$id' >$code </span> 
      </td> 

      <td class='edit_td'> 
      <span class='text' id='two_$id' >$Title</span> 
      </td> 

      <td class='edit_td'> 
      <span class='text' id='three_$id' >$cr</span> 
      </td> 

      <td class='edit_td'> 
      <span class='text' id='three_$id' >$pre</span> 
      </td> 

      <td class='edit_td'> 
      <span class='text' id='three_$id' >$std</span> 
      </td> 
      <td class='edit_td'> 
      <span class='text' id='three_$id' >$status</span> 
     <select name='status' id='status'> 

      <option value=''>Completed</option> 
         <option value='B'>Not complate</option> 


        </select> 

    </td> 

      <td class='edit_td'> 
      <span class='text' id='three_$id' >$grade</span> 

            <select name='grade' id='grade'> 
     <option value=''>A</option> 
      <option value='B'>B</option> 
      <option value='C'>C</option> 
      <option value='D'>D</option> 
      <option value='F'>F</option> 
    </select> 

    </td> 

    </tr>"; 

} 

echo '<input type="hidden" name="courseid" value="' . $id . '" />'; 

    ?> 

    <p align="center"><a href="year.html">Go Back</a> </p> 
    <p><input type="submit" value="Add Link"></p> 
</tr> 
    </table> 
</form> 
    </div> 
</body> 
    </html> 

<?php 

    if ($_SERVER['REQUEST_METHOD'] == "POST") { 


    $status=$_POST['status']; 
    $grade=$_POST['grade']; 

Insert語句

$SQL = " INSERT INTO studyplan "; 
    $SQL = $SQL . " (status, grade) VALUES "; 
    $SQL = $SQL . " ('$status', '$grade') "; 
    $result = mysql_db_query($db,"$SQL",$cid); 

    if (!$result) { 
    echo("ERROR: " . mysql_error() . "\n$SQL\n"); } 

    echo ("New Link Added\n"); 

    } 

    mysql_close($cid); 
?> 

enter image description here

我希望它像小圖片

enter image description here

+1

如果可以,你應該[停止使用'mysql_ *'函數](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。 [這些擴展](http://php.net/manual/en/migration70.removed-exts-sapis.php)已在PHP 7中刪除。瞭解[prepared](http://en.wikipedia。org/wiki/Prepared_statement)語句[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi](http://php.net/manual/en/mysqli .quickstart.prepared-statements.php)並考慮使用PDO,[它確實不難](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

你應該真的移動到PDO或mysqli並準備語句以避免sql注入。這也將解決你目前的問題,這是你可能sql注入自己,並從來沒有找到匹配,因爲'$ id'後面的空間 – jeroen

+0

[您的腳本存在SQL注入攻擊的風險。](http://stackoverflow.com/問題/ 60174 /如何-可以-I-防止-SQL注入式的PHP) –

回答

3

您的表單沒有名稱爲courseid的輸入元素,這就是索引未定義的原因。你可能將其添加在這種情況下,一個隱藏的元素,因爲它不似乎是一個用戶輸入值:

echo '<input type="hidden" name="courseid" value="' . $id . '" />'; 

有幾件事情需要注意:

  1. 你代碼是大開SQL注入攻擊。這基本上意味着任何用戶都可以在數據庫上執行他們想要的任何代碼。請read this(當然還有this),並使用準備好的語句進行調查。始終將用戶輸入視爲,而不是可執行代碼
  2. 儘管該值位於「隱藏」字段中,但這並不意味着用戶無法對其進行修改。 始終在執行操作和更新數據之前驗證所有用戶輸入。否則,用戶可以在數據庫中修改他們想要的任何記錄,無論他們是否是他們的。
  3. 即使添加了這些,我也無法保證您的表單會按預期「工作」。您似乎完全缺少form標籤,這可能會導致意外的行爲,因爲您似乎打算在該表中爲每條記錄分別創建一個表單。表格結構本身也似乎被破壞(我看到多個</tr>標籤),所以沒有告訴瀏覽器如何解釋這些。請修正您的標記,否則您可能會遇到一些非常奇怪且難以診斷的錯誤。