2016-05-24 1 views
1

Я строю веб-сайт с легкой системой управления заказами бэк-офиса. Я сталкиваюсь с техническими трудностями, поскольку я все еще участвую в процессе обучения php. У меня есть php-меню, которое запускает разные сценарии, и этот (waiting_orders.php) отображает ожидающие заказы в таблице html. Нажимая на первичный ключ заказа, хранящийся в кнопке, пользователь должен иметь возможность просматривать детали заказа с помощью order_detail.php (присоединиться к таблице клиентов и т. Д.). Эти два сценария выполняются отлично, но order_detail.php не показывает ожидаемый результат.php/pdo/mysql доступ к выбранной строке из таблицы select * в html

waiting_orders.php

<?php 
session_start(); 
if(isset($_POST['detail'])) 
    { header('Location: order_detail.php'); } 
?> 
<!DOCTYPE html> 
all html stuff 
    <?php // all db connexion stuff 
     $status = "waiting"; 
     $select = $connexion -> prepare("SELECT orderID,order_date,order_qty,order_amount 
     FROM Orders WHERE status = '$status'" 
     ); 
     $select->execute(); 
     $result = $select->fetchall(); 
     echo '<table cellpadding="0" cellspacing="0" class="db-table">'; 
     echo '<tr><th>Order no</th><th>Date</th><th>Quantity</th><th>Amount</th></tr>'; 

     foreach($result as $row) 
     { 
      $_SESSION['order_key'] = $row['orderID']; // orderID is the primary key 

      echo '<tr>'; 
      echo '<form method="post" action=""><td><button class="btn btn-danger bold" type="submit" name="detail" value="'.$_SESSION['order_key'].'">'.$row['cmdID'].'</button></td></form>'; 
      echo '<td>',$row['order_date'],'</td>'; 
      echo '<td>',$row['order_qty'],'</td>'; 
      echo '<td>',$row['order_amount'],'</td>'; 
      echo '</tr>'; 
     }       
     echo '</table>'; 
?> 

order_detail.php

<?php 
session_start(); 
$select_key = $_SESSION['order_key'] ; 
?> 
<!DOCTYPE html> 
all html stuff 
<?php // all db connexion stuff 
$select = $connexion -> prepare(
"SELECT * FROM Orders WHERE orderID = '$select_key'" 
); 

Как вы можете догадаться, order_detail.php всегда отображает последнюю строку, а не текущий OrderId, выбранный пользователем. Я пытался использовать массив, но безуспешно, поскольку я не вижу, как его обрабатывать. Благодарю.

+0

вы делаете это в цикле => $ _SESSION [ 'order_key'] = $ строки [ 'номер заказа']; поэтому последний идентификатор OrderID будет сохранен в сеансе. –

+0

Чтобы отладить order_detail.php, я бы попробовал 'echo 'SELECT * FROM Orders WHERE orderID =' $ select_key '" ', чтобы вы могли видеть фактический запрос, который делается в базе данных, затем скопируйте и вставьте это в phpMyAdmin, если вы имейте это, чтобы увидеть, дает ли он ожидаемый результат или сообщение об ошибке. – grateful

+0

правильный Dr.Stitch, поэтому я попытался сохранить ключи OrderID в массиве, скажем, $ keys = array(); и $ keys [] = $ row ['orderID']; и $ _SESSION ['order_key'] = $ keys; У меня есть все ключи orderID, но я все еще не знаю, на какой из них пользователь нажал. – devoteur

ответ

0

В вашем коде вы сохраняете идентификатор orderID в $_SESSION['order_key'], а затем используя переменную $_SESSION для вывода orderID в форме.

Попробуйте это.

waiting_orders.php

<?php 
session_start(); 
?> 
<!DOCTYPE html> 
all html stuff 
    <?php // all db connexion stuff 
     $status = "waiting"; 
     $select = $connexion -> prepare("SELECT orderID,order_date,order_qty,order_amount 
     FROM Orders WHERE status = '$status'" 
     ); 
     $select->execute(); 
     $result = $select->fetchall(); 
     echo '<table cellpadding="0" cellspacing="0" class="db-table">'; 
     echo '<tr><th>Order no</th><th>Date</th><th>Quantity</th><th>Amount</th></tr>'; 

     foreach($result as $row) 
     { 
      $_SESSION['order_key'] = $row['orderID']; // orderID is the primary key 

      echo '<tr>'; 
      echo '<form method="post" action="order_detail.php'"><td><button class="btn btn-danger bold" type="submit" name="detail" value="'.$row['orderID'].'">'.$row['cmdID'].'</button></td></form>'; 
      echo '<td>',$row['order_date'],'</td>'; 
      echo '<td>',$row['order_qty'],'</td>'; 
      echo '<td>',$row['order_amount'],'</td>'; 
      echo '</tr>'; 
     }       
     echo '</table>'; 
?> 

order_detail.php

<?php 
session_start(); 
$select_key = $_POST['detail']; 
/* 
    You can also set the $_SESSION variable here if it is needed elsewhere 
*/ 
// $_SESSION['order_key'] = $_POST['detail']; 
?> 
<!DOCTYPE html> 
all html stuff 
<?php // all db connexion stuff 
$select = $connexion -> prepare(
"SELECT * FROM Orders WHERE orderID = '$select_key'" 
); 
+0

Спасибо, но wait_orders.php пропускает неправильную $ select_key, и я не знаком с oracle, поскольку я использую mysql/pdo. – devoteur

+0

Прости, это мое плохое. Я написал классы-оболочки для pdo_mysql & pdo_oci и должен был скопировать из другого. Я видел одну вещь, хотя ... Я уточню свой ответ. – guyver4mk

+0

Спасибо за ваше время, ваш ответ решил мою проблему. Теперь мои пользователи могут готовить заказы :) – devoteur