2011-10-02 2 views
0

MySQL 배열의 선택된 행을 기반으로 테이블에 행을 삽입하는 PHP 스크립트가 있습니다.MySQL 배열의 다중 행 삽입에 공통 ID 할당

새 테이블에 행을 삽입하는 코드는 다음과 같습니다

$sql="insert into loaddetails (CaseNo,GrossMass,CaseStatus,Customer) 
select `case no`,`gross mass`,`case status`, customer from 
availablestock where `case no` = '$val'"; 

나는 모든 삽입 된 행을 할당 할 stock 아이템이 같은 LoadID을 공유하는 여러 있도록 동일한 ID.

이렇게 삽입 된 모든 레코드가 동일한 ID를 공유하고 ID가로드에 고유하도록 코드를 수정하면 어떻게됩니까?

은 내가 최대 ID를 얻을 내가이 acheive 수있는 방법 중 하나

SELECT max(loadid)+1 from loaddetails 

하여 증가하는 아래의 코드를 사용할 수 있다고 생각?

enter image description here

감사에서 : 나는, 그냥 아래와 같은 결과를 생성하는 공통 ID로 삽입 할 행 수 있도록하는 기능을 추가 할 필요가 내 PHP 코드가 완벽하지 않지만 그것이 작동 실현 도움을 위해 사전에.

감사합니다, 라이언 스미스

전체 코드는 다음과 같습니다

<?php 
    mysql_connect("localhost", "user", "password")or die("cannot connect");  
    mysql_select_db("databasename")or die("cannot select DB"); 
    $sql="SELECT `case no`,`customer`,`gross mass`, `case status` from availablestock where transporttypename= 'localpmb'"; 
    $result=mysql_query($sql); 
    $count=mysql_num_rows($result); 
?> 
<table border=1> 
    <tr> 
     <td> 
      <form name="form1" method="post"> 
       <table> 
        <tr> 
         <td>#</td> 
         <td>Case Number</td> 
         <td>Customer</td>  
         <td>Weight</td> 
         <td>Status</td> 
        </tr> 
<?php 
    while($rows=mysql_fetch_array($result)){ 
?> 
        <tr> 
         <td><input type="checkbox" name=check[] value="<?php echo $rows['case no']; ?>"></td> 
         <td><?php echo $rows['case no']; ?></td> 
         <td><?php echo $rows['customer']; ?></td> 
         <td><?php echo $rows['gross mass']; ?></td> 
         <td><?php echo $rows['case status']; ?></td> 
        </tr>         

<?php 
    } 
?> 
        <tr> 
         <td><input name="planlocalpmb" type="submit" id="planlocalpmb" value="planlocalpmb"></td> 
        </tr> 
        <?php 



          $check=$_POST['check']; 

         if($_REQUEST['planlocalpmb']=='planlocalpmb'){ 
{ 
          $sql="insert into loaddetails (CaseNo,GrossMass,CaseStatus,Customer) select `case no`,`gross mass`,`case status`, customer from availablestock where `case no` = '$val'"; 

          foreach($check as $key=>$value) 
          { 
          $sql="insert into loaddetails (CaseNo,GrossMass,CaseStatus,Customer) select `case no`,`gross mass`,`case status`, customer from availablestock where `case no` = '$value'"; 
          $final=mysql_query($sql); 
          if($final) 
          { 
          echo "<meta http-equiv=\"refresh\" content=\"0;URL=php.php\">"; 
          }           } 
           } 
           } 
        // Check if delete button active, start this 



// if successful redirect to php.php 

mysql_close(); 
?> 
</table> 
</form> 
</td> 
</tr> 
</table> 
+0

는 u는 모든 행에 같은 부하 ID를 할당 할합니까? 또는 같은 부하 ID와 공통점은 무엇입니까 ?? – diEcho

+0

안녕하세요, 배열에서 선택된 모든 행에 대해 새 테이블에 삽입 할 때 동일한 loadid가 있어야합니다. loadid는 일반적인 링크이므로 하나의 loadid에 여러 사례가 있습니다. loadid는 실제 트럭을 나타내고 사례는 트럭에 저장됩니다. 감사합니다 – Smudger

답변

0
INSERT INTO loaddetails (LoadID, CaseNo, GrossMass, CaseStatus, Customer) 
SELECT (SELECT MAX(loadid)+1 FROM loaddetails) LoadID, CaseNo, GrossMass, CaseStatus, Customer 
FROM availablestock WHERE CaseNo = '$val' 

확인 LoadID 인덱스이 있는지 확인!

먼저 테이블을 잠글 필요가 있습니다. 나는 잘 모르겠다.

나머지 코드는 확인하지 않았지만 SQL Injection 취약점이 있음을 확인했습니다.

+0

안녕 모두, @ Ariel. 답장과 조언에 감사드립니다. PHPMyAdmin에서 저에게 준 쿼리는 100 % 올바르게 작동합니다. 내 PHP 코드에 쿼리를 삽입하면 더 이상 작동하지 않습니다. PHP 코드에서 변수를 대체하면, 행은 mysql 테이블에 삽입되지만, 모든 행에 동일한 ID가 할당 된 각 행에 대해 LoadID 필드가 1 씩 증가합니다. 그것이 작동하도록 PHP 코드를 수정하는 방법에 대한 아이디어? 감사합니다 – Smudger

+0

루프에서이 삽입 작업을 수행하지 않습니까? 루프를 통과하는 각 순환은 하나씩 증가합니다. – Ariel

+0

안녕하세요, @Ariel. 솔직히 말해서 나는 실제 초보자이지만 루프에서 처리되고 있다고 생각한다. MySQL 스크립트를 사용하여 MySQL 삽입 문을 실행하는 PHP 스크립트가 있습니다. 그러나 MySQL 테이블의 출력은 공통 ID를 포함하지 않고 증가 된 ID를 포함합니다. 삽입 된 모든 행에 동일한 ID를 공유해야합니다. 내가 어디로 잘못 가고 있는지 조언 해주십시오. 고마워요, Ryan – Smudger

0

또한 시도 할 수 있습니다 :

INSERT INTO loaddetails 
    (LoadID, CaseNo, GrossMass, CaseStatus, Customer) 
SELECT m.NewLoadId, CaseNo, GrossMass, CaseStatus, Customer 
FROM availablestock 
    CROSS JOIN 
    (SELECT MAX(loadid)+1 AS NewLoadId 
     FROM loaddetails 
    ) AS m 
WHERE CaseNo = '$val' 
+0

안녕하세요, ypercube.나는 당신이 조언하고 PHP 스크립트에서 작동하는지 시도했다. 그러나 문제는 mysql 테이블의 출력에 삽입 된 모든 행에 대한 공통 ID가 없다는 것입니다. 위의 @Ariel에 따라 루프의 결과 일 가능성이 큽니다. 동일한 loadid로 모든 행을 처리하도록 PHP를 수정하려면 어떻게해야합니까? 도와 주셔서 감사합니다. – Smudger

+0

루프가 무엇입니까? 내 대답과 @ Ariel의 것은 하나의 루프가 없습니다 ... –

+0

아, 당신은 많은'$ val' 값을 가지고 있고 각각을 별도의 호출로 처리한다는 것을 의미합니다. –