【问题标题】:My php/mysql isn't working like it did this morning. Beginner/Intermediate help我的 php/mysql 不像今天早上那样工作。初级/中级帮助
【发布时间】:2011-04-02 00:55:51
【问题描述】:

我对我的代码进行了一些更改,但现在它无法正常运行。我的 img src="https://s3.amazonaws.com/thumbnail/1.pngimg src="https://s3.amazonaws.com/thumbnail/2.png 没有出现(两者都在下面的代码中突出显示)。

我的分页链接“prev”和“next”也没有显示。两者都被突出显示。

无论如何,这基本上是我的mysql:

CREATE TABLE `images` (
  `thumbnailID` int(11) NOT NULL auto_increment,
  `link` varchar(100) NOT NULL,
  `pic` varchar(100) NOT NULL,
  `alt` varchar(100) NOT NULL,
  `time` varchar(100) NOT NULL,
  PRIMARY KEY  (`thumbnailID`)
) ENGINE=MyISAM ;

这是我的 php 代码:

<?php
  $objConnect = mysql_connect("sadadsaf","w3f","scdsf") 
                or die(mysql_error());
  $objDB = mysql_select_db("sdfv");
  $pic2 = "SELECT * FROM images";

  if (!isset($_GET['Page']))
    $_GET['Page']='0';

  $pic1 = mysql_query($pic2);
  $Num_Rows = mysql_num_rows($pic1);
  $Per_Page = 16;   // Per Page
  $Page = $_GET["Page"];

  if(!$_GET["Page"]) {
    $Page=1;
  }

  $Prev_Page = $Page-1;
  $Next_Page = $Page+1;
  $Page_Start = (($Per_Page*$Page)-$Per_Page);

  if($Num_Rows<=$Per_Page) {
    $Num_Pages =1;
  } else if(($Num_Rows % $Per_Page)==0) {
    $Num_Pages =($Num_Rows/$Per_Page) ;
  } else {
    $Num_Pages =($Num_Rows/$Per_Page)+1;
    $Num_Pages = (int)$Num_Pages;
  }

  $pic2 .=" order  by thumbnailID ASC LIMIT $Page_Start , $Per_Page";
  $pic1  = mysql_query($pic2);
  $cell = 0;
  $link1 = "SELECT * FROM images";
  $link = mysql_fetch_array(mysql_query($link1));**
  $alt1 = "SELECT * FROM images";
  $alt = mysql_fetch_array(mysql_query($alt1));
  $time1 = "SELECT * FROM images";
  $time = mysql_fetch_array(mysql_query($time1));
  echo '
    <div id="tablediv">
      <table border="0" cellpadding="17" cellspacing="0" class="table">
        <tr>';

  while($pic = mysql_fetch_array($pic1)) {

    if($cell % 4 == 0) {
      echo '</tr><tr>';
    }

    if($cell == 2) {
      echo '
        <td>
          <div class="customimage">
            <a href="/misc/deadend.php">
              <img src="https://s3.amazonaws.com/thumbnail/1.png" />
            </a>
          </div>
        </td>'; // This line includes one of the <img> tags having issues
    } elseif ($cell == 3) {
      echo '
        <td>
          <div class="customimage">
            <a href="/misc/deadend.php">
              <img src="https://s3.amazonaws.com/thumbnail/2.png" />
            </a>
          </div>
        </td>'; // This line includes one of the <img> tags having issues
    } else {
      echo '
        <td>
          <a href="/' . $link["link"] . '.php">
            <div class="image">
              <img src="https://s3.amazonaws.com/imagetitle/' . $pic["pic"] . '" 
                   alt="' . $alt["alt"] . '" 
                   height="190" 
                   width="190" 
              />
            </div>
          </a>
          <div class="submitted">submitted&nbsp;</div>
          <div class="timeago">
            <abbr class="timeago" title="' . $time["time"] .'"></abbr>
          </div>
        </td>'; 
    }
    $cell++;
  }
  echo '</tr></table></div>';
?>

<br />
view more:

<?php
  if($Prev_Page) {
    echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$Prev_Page'>**prev**</a> |";
  }

  if($Page!=$Num_Pages) {
    echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page'>**next**</a> ";
  }
?>

<?php
  mysql_close($objConnect);
?>

谢谢!

编辑:没关系,它们没有突出显示。不过,它们周围应该有星号。

【问题讨论】:

  • 我认为您的设计逻辑可能存在缺陷。 $link1、$alt1 和 $time1... 并且您永远不会在它们各自的(相同)数组中移动。因此 $alt["alt"] 应该失败,$time["time"]...
  • @Tomalak (+1) 你是对的,但也许对 user657847 的一些提示会有所帮助?
  • @Tomalak:没有没有格式,格式怎么会这么差?无论如何,与符号名称的错误选择相比,我认为这是一个小问题:P
  • @Tomalak:我清理了一下。更好?
  • 相信我。我知道我的格式很糟糕。真的,我什至不知道标准格式是什么,也懒得去查(如果有像 html 那样的标准语义)

标签: php mysql


【解决方案1】:

更改该行,以便获得有关正在发生的事情的更多信息:

$link1 = "SELECT * FROM images";
$result_link1 = mysql_query($link1);

if(!$result_link1) {
    echo mysql_error();
    die();
}

// just for testing
echo mysql_num_rows($result_link1) . '<br/>';
$link = mysql_fetch_array($result_link1);

这将帮助您缩小问题范围。

【讨论】:

  • mysql_num_rows 函数回显了什么?你确定它不会在我上面包含的if 声明中消失吗?
  • 这很尴尬。我刚刚发现我的问题是我的主机现在正在进行几个小时的维护,有效地保持我的页面停滞不前不受我的更改的影响。链接现在显示。你对我的另外两个问题有什么想法吗?关于图片不显示和上一个和下一个不显示的问题?
  • 上一页没有显示,因为您的 $Prev_Page 为 0 ($page -1),if(0) 不会进入 IF 语句的 TRUE 块
  • 是的,我的意思是让 prev 显示在分页的 2nd+ 页上。然而,下一个没有出现在我的第一页上。
  • echo " &lt;a href ='$_SERVER[SCRIPT_NAME]?Page=$Next_Page'&gt;**next**&lt;/a&gt; "; 应该是 echo " &lt;a href ='{$_SERVER[SCRIPT_NAME]}?Page=$Next_Page'&gt;**next**&lt;/a&gt; "; 你能否也回显 $Num_Pages 以确认该值是否正确。
【解决方案2】:

这不会真正回答您的问题,但它会让您了解一些使您的代码更具可读性的约定,从而更容易回答您关于错误的问题。代码中的内容:

  • 尝试将相关行按顺序排列,这样读者就可以了解脚本的一个操作所发生的所有事情。例如,在您打开数据库的前几行中,将您的查询分配给一个变量,然后在中间检查您的 GET 变量,这很容易在您实际执行查询之后,然后您执行查询。检查 GET 与您的查询无关,最好将查询内容放在一起。

  • 您根据 GET['page'] 变量中的内容分配一个变量 Page,然后在之后直接返回为条件使用 GET 变量。如果您使用 $Page 是为了方便使用,请使用它。

  • 括起来的代码应该在其自己的行中将开始和结束括号缩进一次到开头,或者某些人(包括我自己)将开始括号放在开始行之后的一个空格,然后结束括号从开始自己的路线。这使它易于阅读,尤其是当您遇到非常长的条件块和嵌套条件时。

  • 变量应该描述它们是什么。您对其中大多数(例如 Next_Page 等)进行了此操作,但是 pic1、pic2、alt、link1、link2 等令人困惑,并且似乎都是不同的 sql 查询字符串 - 没有一个变量名真正意味着它们是什么.

  • 这并不是什么大问题,但是以大写字母开头的变量名称被认为是“不恰当的”,因为没有更好的术语。 Camel Case 是我看到使用最多的约定(第一个单词以小写开头,随后的单词以大写开头,例如:nextPage 或 numPages)。我经常看到的另一种约定是您使用几次而不是其他约定,它使用全小写并用下划线分隔单词。通常,编码员会为类名节省大写字母。在您的代码中,随意使用您喜欢的任何内容,但请坚持使用,这有助于您尝试记住 5 页之外的变量名称的格式。

所有这些都有助于更好地阅读您的代码并帮助您组织它。标准化还可以帮助其他编码人员理解您对编码的意义。我想我会写这个,这样你就知道上面的一些 cmets 在说什么了。有关许多常见约定的教程,请参见以下链接:

http://www.blackgate.net/consulting/php_coding_guidelines.html

玩得开心!

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    相关资源
    最近更新 更多