在mysql数据库中记录数据的PHP问题

时间:2011-11-11 01:52:48

标签: php mysql

我的形式很简单:

   <form action="add.php" method="post" >
        <input  name="name"  maxlength="30"/><br/>
        <textarea  cols="80" name="description" rows="10">
        </textarea><br/>

        <table>
            <thead>
                   <tr>
                       <th></th>
                       <th width="200px">Shop list</th>
                   </tr>
            </thead>
             <tbody div class ="table">
            <?php
            $result = mysql_query("SELECT shop_id, name FROM shop") or die(mysql_error());
            if(mysql_num_rows($result) > 0) {
                while($row = mysql_fetch_assoc($result)) {
                echo '<tr> 
                         <td>
                         <input type="checkbox" name="identifer[]" value="'.$row['shop_id'].'" /> <br /></td>  
                         <td>'.ucfirst($row['shop']).'</td> 
                      </tr>   ';    
                                                         }
                                            }
                  ?>

    </tbody></table>
<input type="submit" value="Add">
</form>

我想将结果保存在两个不同的表中: book (book_id,name,description)和 places 。在 places 表中,我想保存您可以购买该书的商店(places_id,book_id,shop_id)。

我有add.php文件(它不能正常工作):

    <?php
    $name = $_POST['name'];
    $description = $_POST['description'];



        $identifer =($_POST['identifer']);
        if (isset($identifer)){

            $id_arr = implode(',', $identifer);
            $result = mysql_query("INSERT INTO places (places_id, book_id, shop_id) VALUES (NULL, NULL ($id_arr))") or die(mysql_error());

        }   




$q = "INSERT INTO baldas (book_id, name, description) VALUES (NULL, '$name', '$description')";

$result2 = mysql_query($q) or die(mysql_query());   

    ?>

我很困惑如何在同一时间将结果保存在两个不同的表中,同时我在识别哪些复选框被检查并将结果写入数据库时​​遇到问题,尤其是我不知道如何处理book_id 。 任何建议都会有所帮助。

4 个答案:

答案 0 :(得分:1)

  

我不知道如何处理book_id

您首先将值插入表baldas,然后调用mysql_insert_id()

<?php
  $q = "INSERT INTO baldas (book_id, name, description) VALUES (NULL, '$name', '$description')";
  $result = mysql_query($q) or die(mysql_query());

  $bookID = mysql_insert_id();

  // CODE TO INSERT INTO `places` TABLE USING $bookID //
?>
  

我在确定选中哪个复选框时遇到问题

你拥有它们的方式,你必须遍历$_POST['identifier']数组来识别shop_id

<?php
  foreach((array)$_POST['identifier'] as $shopID) { 
      $q2 = "INSERT INTO places (place_id, book_id, shop_id) VALUES (NULL, '$bookID', '$shopID')";    
      $result2 = mysql_query($q2) or die(mysql_error()); 
  }
?>

如果未选中,则不会显示在$_POST

答案 1 :(得分:1)

试试这个,希望可以帮到你:

<?php
    $name = $_POST['name'];
    $description = $_POST['description'];
    $identifer[] =($_POST['identifer']);
    $y = null;
    if(count($identifer) > 1){
        foreach($identifer as $x){
            $y .= $x.",";
        }
        $val = rtrim($y,",");
    } else {
        $val = $identifer[0]
    }
    $result = mysql_query("INSERT INTO places (places_id, book_id, shop_id) VALUES (NULL, NULL, '$val')") or die(mysql_error());

    $q = "INSERT INTO baldas (book_id, name, description) VALUES (NULL, '$name', '$description')";

    $result2 = mysql_query($q) or die(mysql_query());
?>

如果在桌子上放置places_id并且在桌子上放置了book_id是AUTO_INCREMENT,你可以尝试使用add.php

<?php
    $name = $_POST['name'];
    $description = $_POST['description'];
    $identifer = $_POST['identifer'];
    $shop_id = null;
    if(isset($identifer)) $shop_id = implode(',', $identifer);
    $q = "INSERT INTO baldas (name, description) VALUES ('$name', '$description')";
    $result = mysql_query($q) or die(mysql_query());
    $book_id = mysql_insert_id();
    $result2 = mysql_query("INSERT INTO places (book_id, shop_id) VALUES ('$book_id', '$shop_id')") or die(mysql_error());
?>

答案 2 :(得分:0)

我认为将ID设置为NULL可能会出现问题,如果ID是自动递增的(我认为它们是自动递增的)。检查一下。

显示错误总是有帮助的。

答案 3 :(得分:0)

包含您可以购买 图书的所有“地点”的表格应该包含:

  • place_id ,即自动递增和“本地”到该表。 ID,独一无二。
  • book_id 是书籍表中的书籍ID(将存在多行)
  • shop_id 是商店表中的商店ID(您没有提及)

每个地方都会有一个行,可以购买一本书。因此,如果要添加一个可以购买一本书籍的地方,您应该只需要一个查询:

INSERT INTO places (book_id, shop_id) VALUES ($book_id, $shop_id)

注意我没有包含place_id,因为那应该是自动递增。