Оператор PHP Mysql — несколько операторов

У меня есть страница PHP, которая отображает результаты запроса mysql. каждой возвращенной записи назначается флажок со значением, равным столбцу идентификатора строки.

оператор mysql вставляет выбранные строки в новую таблицу.

Я хотел бы добавить второй запрос mysql, который обновляет статус другой таблицы, в которой совпадают выбранные идентификаторы. запрос ниже:

ОБНОВЛЕНИЕ despgoods_alldetails,loaddetails SET despgoods_alldetails.locstatus = 'LoadCreated' ГДЕ despgoods_alldetails.despgoodsid = $val

PHP-код страницы, который работает в настоящее время (мне известен неправильный код):

> <?php
>     mysql_connect("localhost", "hulamin_hulamin", "Hulamin2011")or die("cannot connect");    
>     mysql_select_db("hulamin_loc")or die("cannot select DB");
>     $sql="SELECT `despgoodsid`,`crtd dept`,`customer`,`loc cust rel`,`case no`,`gross mass`,`case width`,`case length` from
> despgoods_alldetails where transporttypename= 'localpmb' and
> locstatus='unplanned' and customer <> 'customer'";
>     $result=mysql_query($sql);
>     $count=mysql_num_rows($result);   putenv("TZ=Africa/Johannesburg");   ?> <table border=0>
>     <tr>
>         <td>
>             <form name="form1" method="post">
>                 <table border=0
>                     <tr>
>                         <th>&nbsp;</th>
>                         <th width=150>Dispatch Area</th>                      
>                         <th width=150>Customer</th>  
>                       <th width=150><center>Release Number</th>
>                       <th width=130><center>Case Number</th>
>                       <th width=80><center>Weight</th> 
>                       <th width=80><center>Width</th> 
>                       <th width=80><center>Length</th> 
>                   </tr> <?php
>     while($rows=mysql_fetch_array($result)){ ?>
>                     <tr>
>                         <td><input type="checkbox" name=check[]  value="<?php echo $rows['despgoodsid']; ?>"></td>
>                         <td><?php echo $rows['crtd dept']; ?></td>
>                         <td><?php echo $rows['customer']; ?></td>
>                       <td><center><?php echo $rows['loc cust rel']; ?></td>
>                         <td><center><?php echo $rows['case no']; ?></td>
>                         <td><center><?php echo $rows['gross mass']; ?></td>
>                       <td><center><?php echo $rows['case width']; ?></td>
>                       <td><center><?php echo $rows['case length']; ?></td>
>                       
>                     </tr>                                   
> 
> <?php
>     } ?>
>                     <tr>
>                         <td colspan=3><input name="Next" type="submit" id="Next" value="Next"></td>
>                     </tr>
>                     <?php
>                     
>                     
>                             
>                             $check=$_POST['check'];
>                             
>                         if($_REQUEST['Next']=='Next'){  {
>                             $sql="INSERT INTO loaddetails (despgoodsid,dispatcharea,Customer, casenumber, weight, loadstatus) 
>                           SELECT `despgoodsid`,`crtd dept`,Customer,`case no`,`gross mass`,'loadplanned'
>                           FROM despgoods_alldetails WHERE `despgoodsid` = '$val'";
>                             
>                             foreach($check as $key=>$value)
>                             {
>                             $sql="INSERT INTO loaddetails (despgoodsid,dispatcharea,Customer, casenumber, weight, loadstatus)
>                           SELECT `despgoodsid`,`crtd dept`,Customer,`case no`,`gross mass`,'loadplanned'
>                           FROM despgoods_alldetails WHERE `despgoodsid` = '$value'";
>                             $final=mysql_query($sql);
>                             if($final)
>                             {
>                             echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.hulaminloc.co.za/planningplatform/planlocalpmbstep2.php\">";
>                             }                                            } 
>                                 }
>                                 }
>                    mysql_close(); ?> </table> </form> </td> </tr> </table>

Как я могу добавить свой оператор обновления для запуска в дополнение к оператору выбора для каждой выбранной строки?

Любая помощь приветствуется.

Спасибо и С уважением, Райан Смит


person Smudger    schedule 13.10.2011    source источник


Ответы (2)


вы можете создать триггер, который будет срабатывать при сохранении данных во вторичной таблице; проверьте руководство mysql для триггеров, если вы думаете, что это может быть то, что вам нужно

person mishu    schedule 13.10.2011
comment
Привет, PHP-страница, указанная выше, вставляет данные в таблицу loaddetails. Затем мне нужно изменить статус таблицы продуктов для вставленных строк. Я не уверен, что триггер удовлетворит это только моим выбранным строкам. Спасибо @mishu - person Smudger; 13.10.2011
comment
учитывая, что таблица, которую необходимо обновить, является частью запроса, который должен вызвать триггеры обновления, здесь не так; поэтому я думаю, что вы не можете избежать использования двух отдельных запросов sql; просто запустите запрос на обновление, который у вас уже есть после вставки - person mishu; 13.10.2011
comment
примечание: похоже, ваш код перенаправляется после первой вставки в серии - person mishu; 13.10.2011
comment
Привет @mishu, как я могу запустить два отдельных запроса как часть цикла выбранных строк? - person Smudger; 13.10.2011
comment
просто добавьте запрос на обновление (который у вас уже есть) под вставкой.. вот так: $query = ' UPDATE despgoods_alldetails SET locstatus = 'LoadCreated' WHERE despgoodsid = '.$value.' '; $обновление = mysql_query($запрос); - person mishu; 13.10.2011
comment
но для моего любопытства ... почему вы вообще используете этот массив, если после первого успешного запроса на вставку вы перенаправляете пользователя? - person mishu; 13.10.2011
comment
спасибо @Мишу. В моей таблице показаны строки, полученные из оператора mysql. выбранные строки необходимо добавить в таблицу loaddetails, а статус товаров изменится на фактические товары в таблице despgoods. есть ли лучший способ сделать это? - person Smudger; 13.10.2011
comment
Привет @Mishu, если я добавлю запрос под оператором вставки, будет ли он обработан как часть цикла для каждой выбранной строки? Можете ли вы предоставить полный синтаксис, когда пользователь нажимает кнопку «Отправить»? - person Smudger; 13.10.2011
comment
Я просто спрашивал, почему вы не перемещаете перенаправление за пределы оператора foreach, чтобы оно выполнялось необходимое количество раз... но, возможно, я что-то упускаю, так как у вас нет проблем с этим - person mishu; 13.10.2011
comment
давайте продолжим это обсуждение в чате - person Smudger; 13.10.2011
comment
да, если вы добавите его прямо под запрос на вставку, он будет обработан столько раз, сколько первый.. - person mishu; 13.10.2011
comment
если это то, что вам интересно: вы также можете разделить вставку и выбрать два запроса, если хотите - person mishu; 13.10.2011

Я бы разместил полный рабочий код здесь. Спасибо @mishu за помощь и терпение.

<?php
    mysql_connect("localhost", "user", "password")or die("cannot connect");    
    mysql_select_db("database")or die("cannot select DB");
    $sql="SELECT `despgoodsid`,`crtd dept`,`customer`,`loc cust rel`,`case no`,`gross mass`,`case width`,`case length` from despgoods_alldetails where transporttypename= 'localpmb' and locstatus='unplanned' and customer <> 'customer'";
    $result=mysql_query($sql);
    $count=mysql_num_rows($result);
    putenv("TZ=Africa/Johannesburg");

?>
<table border=0>
    <tr>
        <td>
            <form name="form1" method="post">
                <table border=0
                    <tr>
                        <th>&nbsp;</th>
                        <th width=150>Dispatch Area</th>                        
                        <th width=150>Customer</th>  
                        <th width=150><center>Release Number</th>
                        <th width=130><center>Case Number</th>
                        <th width=80><center>Weight</th> 
                        <th width=80><center>Width</th> 
                        <th width=80><center>Length</th> 
                    </tr>
<?php
    while($rows=mysql_fetch_array($result)){
?>
                    <tr>
                        <td><input type="checkbox" name=check[]  value="<?php echo $rows['despgoodsid']; ?>"></td>
                        <td><?php echo $rows['crtd dept']; ?></td>
                        <td><?php echo $rows['customer']; ?></td>
                        <td><center><?php echo $rows['loc cust rel']; ?></td>
                        <td><center><?php echo $rows['case no']; ?></td>
                        <td><center><?php echo $rows['gross mass']; ?></td>
                        <td><center><?php echo $rows['case width']; ?></td>
                        <td><center><?php echo $rows['case length']; ?></td>

                    </tr>                                   

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



                            $check=$_POST['check'];

                        if($_REQUEST['Next']=='Next'){
 {



$maxloadid = ' 
select 
max(loadid) +1 
from 
loaddetails 
'; 
$resultmaxloadid = mysql_query($maxloadid); // run the query 

// there was an error - output the message 
if (!$resultmaxloadid) 
{ 
echo 'there was an error in your query'; 
echo mysql_error(); 
die; 
} 

$loadid = mysql_result($resultmaxloadid, 0);

foreach($check as $key=>$value) // 
{ 
// get the details for one of the selected values 
$query = ' 
SELECT 
`despgoodsid`, 
`crtd dept`, 
`Customer`, 
`case no`, 
`gross mass` 
FROM 
despgoods_alldetails 
WHERE 
`despgoodsid` = "'. mysql_real_escape_string($value) . '" 
';

$result = mysql_query($query); // run the query 

// there was an error - output the message 
if (!$result) 
{ 
echo 'there was an error in your query'; 
echo mysql_error(); 
die; 
} 

// we got here, everything is fine 

if (!mysql_num_rows($result)) // the above query did not fetch any records, so there's a problem 
{ 
continue; // skip this record.. "continue" will ignore the rest of the foreach loop and go to the next step 
} 

$details = mysql_fetch_assoc($result); 

// inset the values 
$query = ' 
INSERT INTO 
loaddetails 
SET 
despgoodsid = "'.$details['despgoodsid'].'", 
dispatcharea= "'.$details['crtd dept'].'", 
Customer = "'.$details['Customer'].'", 
casenumber = "'.$details['case no'].'", 
weight = "'.$details['gross mass'].'", 
loadstatus= "loadplanned",
loadid = "'.$loadid.'" 
'; 

$result = mysql_query($query); // run the query 

// there was an error - output the message 
if (!$result) 
{ 
echo 'there was an error in your query'; 
echo mysql_error(); 
die; 
} 

// update the status 
$query = ' 
UPDATE 
despgoods_alldetails 
SET 
locstatus ="LoadCreated" 
WHERE 
despgoodsid = "'.mysql_real_escape_string($value) . '"
'; 
$result = mysql_query($query); // run the query 

// there was an error - output the message 
if (!$result) 
{ 
echo 'there was an error in your query'; 
echo mysql_error(); 
die; 
} 


} // end of foreach statement 
if($final) 
{ 
echo "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.hulaminloc.co.za/planningplatform/index.phpx`\">"; 
}



                                }
                                }

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

Еще раз спасибо @Mishu и всем остальным участникам сайта.

person Smudger    schedule 13.10.2011