2010-12-07 3 views
4

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

То, что я испытываю, однако, является менее идеальным результатом. Если я сделаю предложение для одной строки, отлично, логика будет работать. Если я сделаю еще одно предложение для другой строки, тогда логика будет работать, за исключением того, что предыдущая строка теперь отображает форму снова.

Я могу предоставить более подробную информацию, если это необходимо, но, возможно, кто-то уже знаком с этим.

Заранее спасибо.

<?php 

require("db-connect.php"); 

$display = "SELECT filename, car_id, make, model, year, mileage, vin, description, GROUP_CONCAT(filename) FROM scraplis_cars LEFT JOIN scraplis_images USING (car_id) GROUP BY car_id ORDER BY date_time DESC"; 

$dResult = mysql_query($display) or die('error:' . mysql_error()); 

$offer = "SELECT car_id, user_id, offer_id, value FROM scraplis_offers WHERE user_id = '".$_SESSION['user_id']."'"; 

$oResult = mysql_query($offer) or die('Error ' . mysql_error()); 

$oRow = mysql_fetch_array($oResult); 

if(!isset($_SESSION['access'])){ 
    header("location:index.php"); 
} 


?> 

<?php if($dResult): ?> 
    <table class="post"> 
     <thead> 
      <tr> 
     <?php if(isset($_SESSION['email']) && $_SESSION['access'] == 0) : ?> 
       <th scope="col">Images</th> 
       <th scope="col">Make</th> 
       <th scope="col">Model</th> 
       <th scope="col">Year</th> 
       <th scope="col">Mileage</th> 
       <th scope="col">VIN #</th> 
       <th scope="col">Description</th> 
       <th scope="col">Offer</th> 
      </tr> 
     </thead> 
     <tbody> 

     <?php while($dRow = mysql_fetch_array($dResult)) : ?> 

      <?php $str = $dRow[8]; ?> 
      <?php $images = explode(',', $str); ?> 
      <tr> 
       <td> 
        <ul> 
       <?php if(!empty($str)) : ?> 
        <?php foreach($images as $value) :?> 
         <li> 
          <a href="images/<?php echo $value; ?>" rel="lightbox[<?php echo $row['car_id']; ?>]"> 
           <img src="images/<?php echo $value; ?>"/> 
          </a> 
         </li> 
        <?php endforeach; ?> 
       <?php endif; ?> 
        <ul> 
       </td> 
       <td><?php echo $dRow['make']; ?></td> 
       <td><?php echo $dRow['model']; ?></td> 
       <td><?php echo $dRow['year']; ?></td> 
       <td><?php echo number_format($dRow['mileage']); ?></td> 
       <td><?php echo $dRow['vin']; ?></td> 
       <td><span><?php echo $dRow['description']; ?></span></td> 
       <td> 
       <?php if($oRow['car_id'] == $dRow['car_id']) : ?> 
        Offer pending approval - $<?php echo $oRow['value']; ?> 
       <?php else : ?> 
        <form id="offer" method="post" action="<?php $_SERVER['PHP_SELF']; ?>"> 
         <input type="text" id="price" name="offer" /> 
         <input type="hidden" name="submitted" value="<?php echo $dRow['car_id']; ?>" /> 
         <input type="submit" name="price" value="Submit" /> 
        </form> 
       <?php endif; ?> 
       </td> 
      </tr> 
     <?php endwhile; ?> 
     <?php else : ?> 
       <th scope="col">Delete</th> 
       <th scope="col">Images</th> 
       <th scope="col">Make</th> 
       <th scope="col">Model</th> 
       <th scope="col">Year</th> 
       <th scope="col">Mileage</th> 
       <th scope="col">VIN #</th> 
       <th scope="col">Description</th> 
      </tr> 
     </thead> 
     <tbody> 
     <?php while($dRow = mysql_fetch_array($dResult)) : ?> 
      <?php $str = $dRow[8]; ?> 
      <?php $images = explode(',', $str); ?> 
      <tr> 
       <td> 
        <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>"> 
         <input type="checkbox" name="record" value="<?php echo $row['car_id']; ?>" /> 
         <input type="submit" name="delete-car" value="Delete" /> 
        </form> 
       </td> 
       <td> 
        <ul> 
       <?php if(!empty($str)) : ?> 
        <?php foreach($images as $value) :?> 
         <li> 
          <a href="images/<?php echo $value; ?>" rel="lightbox[<?php echo $row['car_id']; ?>]"> 
           <img src="images/<?php echo $value; ?>"/> 
          </a> 
         </li> 
        <?php endforeach; ?> 
       <?php endif; ?> 
        </ul> 
       </td> 
       <td><?php echo $dRow['make']; ?></td> 
       <td><?php echo $dRow['model']; ?></td> 
       <td><?php echo $dRow['year']; ?></td> 
       <td><?php echo number_format($dRow['mileage']); ?></td> 
       <td><?php echo $dRow['vin']; ?></td> 
       <td><span><?php echo $dRow['description']; ?></span></td> 
      </tr> 
     <?php endwhile; ?>   
    <?php endif; ?> 
     </tbody>   
    </table> 
<?php endif; ?> 
+0

Почему бы не присоединиться к таблице предложений? вы, кажется, не имеете никакого контроля над тем, какое предложение вы возвращаете для данной строки или цикла, только возвращая их все для данного пользователя? В этом соединении вы можете получить последнее предложение против этого автомобиля для этого пользователя. – Scuzzy 2010-12-07 06:43:47

ответ

1

Один важный вещь для безопасности первых:

ПОИСК:

if(!isset($_SESSION['access'])){ 
    header("location:index.php"); 
} 

ЗАМЕНЫ С:

if(!isset($_SESSION['access'])) { 
    header("Location: index.php"); 
    exit; 
} 

Взгляните в документации PHP для header() или exit() - оба описывают необходимость (или проблему безопасности) exit() здесь.

На ваш вопрос:

Вы просто первый ряд $oResult в $oRow - так у вас есть (например) 1000 автомобилей, но только одно предложение. Вам нужно получить результаты $oResult в петле (while(), for(), ... - что вы предпочитаете ...), а затем проверить, что вы можете найти car_id (в пределах $dRow также в предложениях).

образец кода (очень легко для понимания):

<?php 
// ... 
// get the offers 
// info: user_id would not be necessary here ;-) 
$offer = "SELECT car_id, user_id, offer_id, value FROM scraplis_offers WHERE user_id = '".$_SESSION['user_id']."'"; 
$oResult = mysql_query($offer) or die('Error ' . mysql_error()); 
$oRows = array(); 

while($oRow = mysql_fetch_array($oResult)) { 
    $oRows[$oRow['car_id']] = array(
    'offer_id' => $oRow['offer_id'], 
    'value' => $oRow['value'] 
); 
} 

// looping the through the cars 
// just the while()-loop based on your code 
while($dRow = mysql_fetch_array($dResult)) { 
// check if offer exists 
if(array_key_exists($dRow['car_id'], $oRows)) { 
    // H A V E an offer for that car ;-) - show offer details 
} else { 
    // H A V E N O offer that car - show form 
} 
} 
// ... 
?> 

Я надеюсь, что я не получил, что вы неправы, не делал ошибок (необходимый рано вставать), и это поможет вам ;-).

+0

Спасибо, ваше решение именно то, что мне нужно. У меня есть еще один вопрос, и он относится к печати значений многомерного массива. После утверждения if я хочу показать детали предложения, которые включают сумму, введенную в поле формы. Как я могу это сделать? Это то, что я хочу напечатать $ oRows [$ oRow ['car_id']] ['value'] (по крайней мере, я так понимаю), но я получаю сообщение об ошибке, указывающее, что индекс не существует. Есть предположения? – cometton 2010-12-08 03:58:19

Смежные вопросы