2013-05-08 47 views
0

我有一个meny.php文件,它加载了ajax与id = content的div的选定链接,正如您在包含页脚之前所看到的那样。这段代码正在工作,这与此无关。我只是觉得这个代码可能会有帮助。当从数据库读取时可变覆盖

<!DOCTYPE html> 
<?php 
    include 'includes/head.php'; 
?> 
<body> 
    <script type="text/javascript"> 
     $(document).ready(function() { 

      /* This is basic - uses default settings */ 

      $("a.single_image").fancybox(); 

      /* Using custom settings */ 

      $("a#inline").fancybox({ 
       'hideOnContentClick': true 
      }); 

      /* Apply fancybox to multiple items */ 

      $("a.group").fancybox({ 
       'href' : '#fancybox-inner', 
       'transitionIn' : 'elastic', 
       'transitionOut' : 'elastic', 
       'speedIn'  : 600, 
       'speedOut'  : 200, 
       'overlayShow' : false 
      }); 
      $("a.single_image").fancybox({ 
       'href' : '#fancybox-inner', 
       'titleShow' : false, 
       'transitionIn' : 'elastic', 
       'transitionOut' : 'elastic' 
      }); 
     }); 

     $(function(){ 
     // hide the div on page load and use a slidedown effect 
     $('div.content').fadeOut(0, function(){ 
      $(this).slideDown(500); 
     }); 


     // capture link clicks and slide up then go to the links href attribute 
     $('a.slide_page1').click(function(e){ 
      e.preventDefault(); 
      var $href = $(this).attr('href'); 
      $('div.content').slideUp(500, function(){ 
       // window.location = $href; 
       // alert($href); 
      }); 
     }); 





    }); 
    </script> 
    <div class="page"> 
     <?php 
      include 'includes/header.php'; 
     ?> 
     <div class="container-fluid" id = "bodu"> 
    <div class="row-fluid"> 
     <div class="span12">    
     <div class="bodu"> 



      <div class="blog"> 
        <div class="container-fluid"> 
         <div class="row-fluid"> 
          <div class="span2" id ="sidebarspan"> 
            <h2>Meny</h2> 
            <ul id="nav"> 
             <li id ="sidebar"> 
              <a href="hamburgare">Hamburgare</a> 
             </li> 
             <li id ="sidebar"> 
              <a href="maltider">Måltider</a> 
             </li> 
             <li id ="sidebar"> 
              <a href="dryck">Dryck</a> 
             </li> 
             <li id ="sidebar"> 
              <a href="tillbehor">Tillbehör</a> 
             </li> 
             <li id ="sidebar"> 
              <a href="desserter">Desserter</a> 
             </li> 
             <li id ="sidebar"> 
              <a href="övrigt">Övrigt</a> 
             </li> 
            </ul> 
          </div> 
          <div class="span10"> 
           <div id = "content" class="content"> 
            <script src="jquery/general.js"></script> 


           </div> 
          </div> 
         </div> 
        </div> 
       </div> 
     <?php 
      include 'includes/footer.php'; 
     ?> 
     </div> 
     </div> 
     </div> 
     </div> 
     <div id="bg-bottom" > 
      <img src="images/bg-bottom.png" alt="bottom"> 
    </div> 
     </div> 
    </div> 
</body> 

现在到了真正的问题。假设我们从meny.php中选择了“hamburgere”。然后它会尝试加载,就像我用ajax hamburgare.php文件所说的那样。这个文件看起来像这样

<?php 
include '../includes/head.php'; 


?> 


<h1>Hamburgare!</h1> 
<p>hamburgare är gott!</p> 

<div class="row-fluid" id = "meals"> 
<div class="span12" id="right-pane"> 
    <?php 

     $select = "SELECT * FROM hamburgare"; 
     $sql = mysql_query($select) or die(mysql_error()); 


     mysql_num_rows($sql); 
     while ($row = mysql_fetch_array($sql)) { 


      $name = "<name>".$row['name']."</name>"; 
      $price = "<price>".$row['price']."</price>"; 
      $description = "<description>".$row['description']."    </description>"; 
      $img = $row['image']; 

      $event = " <a name='$img' class='single_image' href='fancybox-inner' ><img  src='Login/$img'/></a>"; 
      echo $event; 
      /*closing the whileloop*/ 
     } 


    ?> 
</div> 
</div> 
<div style="display:none"> 
       <div id="fancybox-inner"> 

        <?php 
         $query = mysql_query('SELECT name FROM hamburgare WHERE image = "' . $img . '"'); 

        ?> 
        <div class="container-fluid"> 
         <div class="row-fluid"> 
          <h2><?php echo $query ?></h2> 
          <h2><?php echo $name ?></h2> 
          <div class="span4"> 
           <img src="Login/<?php echo $img; ?>" /> 
          <!--Sidebar content--> 
          </div> 
          <div class="span8"> 
           <?php echo $description ?> 
          <!--Body content--> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 

我想在这里做的是加载所有从hamburgare表中的图像数据库,现在我只是打印出来while循环的一个标签。这工作正常,但当客户点击其中一个图像时,应向客户展示更具体的信息。 这里发生的是当你点击其中一个图像时,fancybox-inner div显示,但fancybox-inner包含的信息是关于上次加载的图像。这意味着选择女巫图像无关紧要,它总是会显示关于上次加载的图像的信息。 原因是因为最后一个SQL查询中的WHERE子句,我比较了最后一个加载的图像($ img)和数据库中的图像。所以会发生什么是我得到这个重叠的问题。此外,我与$ img进行比较,而不是来自showsen a-tag的name = $ img,我不知道如何将其作为SQL查询编写。

我怎么会认为这个问题比这个大。我所做的唯一的事情就是隐藏fancybox-inner div,并在选择某些图像时显示它。该代码从一开始就执行。所以我需要Jquery/AJAX来为每个图像加载正确的信息。所以我想我需要为while循环中的每个a-tag添加onClick。 但是因为我是这个东西的新手,我不知道如何编写该代码。也许我的假设也是错误的。我不知道。

你们认为什么?我会很感激各种帮助。

在此先感谢

+2

你覆盖'$名称,$描述,$ image'等在'while'循环,这就是为什么你会得到这个循环只有最后一个值。 – NullPointer 2013-05-08 08:54:37

+2

['MySQL'](http://php.net/manual/en/book.mysql.php)(_mysql _ * _ functions)扩展名是[*** deprecated ***](http://php.net) /manual/en/function.mysql-connect.php)。我建议使用['MySQLi'](http://php.net/manual/en/book.mysqli.php)(_mysqli _ * _ functions)或['PDO'](http://php.net/manual改为/en/book.pdo.php)。 – BlitZ 2013-05-08 08:54:46

+0

你没有使用'mysql_num_rows()'的返回值。 – feeela 2013-05-08 08:58:24

回答

0

你应该首先将返回的值添加到一个数组,后来做输出。

例如:

$formattedResults = array(); 

while($row = mysql_fetch_array($sql)) 
{ 
    $formattedResults[] = array(
     'name' => sprintf('<name>%s</name>', $row['name']), 
     'price' => sprintf('<price>%s</price>', $row['price']), 
     'description' => sprintf('<description>%s</description>', $row['description']), 
     'img' => $row['image'], 
     'event' => sprintf('<a name="%s" class="single_image" href="fancybox-inner" ><img src="Login/%s"/></a>', $row['image'], $row['image']), 
    ); 
} 

var_dump($formattedResults); 
+0

好的。这是一个很好的理念,但是当我需要输出后,我该如何得到正确的输出?像这样 $ keys = array_keys($ formattedResults); foreach($ keys as%s){ echo(%s); } – 2013-05-08 12:18:49

+0

使用数据库中的ID来跟踪用户点击了哪个图像。所以就像你在数组中保存名字一样,也要保存id。然后做一个for循环遍历数组。 – 2013-05-14 12:39:59