2015-11-03 310 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>标签),所以没有告诉浏览器如何解释这些。请修正您的标记,否则您可能会遇到一些非常奇怪且难以诊断的错误。