PHP генерирует цифру «1» на выходе функции. Я никогда не видел, чтобы это делали раньше - PullRequest
1 голос
/ 12 декабря 2008
function holiday_hitlist($tablename, $hit_user){

    global $host, $user, $pass, $dbname;

    $link = mysql_connect($host, $user, $pass, $dbname);

    print "<div class=\"hit_list\">
            <h3>My Holiday Hitlist</h3>
            <p>Five things I want the most, based on my desirability ratings.<br/>You can't go wrong with this stuff!</p>
            <ol>";

    $sql = "SELECT title, URL, price FROM $dbname.$tablename WHERE user='$hit_user' AND rank >= 3 ORDER BY date DESC LIMIT 5";
    $result = mysql_query($sql) or die ("Couldn't retrieve holiday hit list for this user. " . mysql_error());
    while($row = mysql_fetch_array($result)) {
        $title = $row['title'];
        $url = $row['URL'];
        $price = "$" . $row['price'];
        $output = print "<li><a href=\"$url\" target=\"_blank\">$title</a> $price</li>";
    }
    print "</ol></div>";
    return $output;
}

На странице HTML ставится «1» сразу после закрывающего тега div. Зачем?

Ответы [ 3 ]

9 голосов
/ 12 декабря 2008

см. Строку

$output = print "<li><a href=\"$url\" target=\"_blank\">$title</a> $price</li>";

вам, вероятно, следует удалить отпечаток после $ output =

Или, может быть, вам просто нужно удалить $ output =

Я не совсем уверен, что вы собираетесь.

Для объяснения, $ output получает возвращаемое значение print "..."

6 голосов
/ 12 декабря 2008

с php.net Ссылка:

"Возвращаемые значения

Возвращает 1, всегда. "

http://ca.php.net/manual/en/function.print.php

Вы должны присвоить $ output желаемому выводу, а затем использовать print для отображения этого вывода.

2 голосов
/ 12 декабря 2008

Из того, что вы написали, я думаю, что вы делаете что-то вроде:

function holiday_hitlist($tablename, $hit_user){
  /* connections etc

  */

  while($row = mysql_fetch_array($result)) {
    $title = $row['title'];
    $url = $row['URL'];
    $price = "$" . $row['price'];
    $output = print "<li><a href=\"$url\" target=\"_blank\">$title</a>$price</li>";
  }
  print "</ol></div>";
  return $output;
}

print holiday_hitlist("mytab","myuser");

или, может быть,

$somevar = holiday_hitlist("mytab","myuser");
print $somevar;

Это действительно проблема с тем фактом, что вы «печатаете» возвращаемое значение. В приведенном выше примере зачем возвращать что-нибудь? Вы могли бы либо;

а) настроить функцию как подпрограмму, которая просто что-то делает и ничего не возвращает. (т.е.: просто удалите return $ output и напечатайте в print holiday_hitlist () )

или

b) создайте функцию, которая возвращает нужные вам данные, и затем что-то с ними сделайте.

Примером б) является:

function holiday_hitlist($tablename, $hit_user){
  /* connections etc

  */

  while($row = mysql_fetch_array($result)) {
    $title = $row['title'];
    $url = $row['URL'];
    $price = "$" . $row['price'];
    $output .= "<li><a href=\"$url\" target=\"_blank\">$title</a>$price</li>";
  }
  return $output;
}

$somevar = holiday_hitlist("mytab","myuser");

print "<div class=\'hit_list\'>
<h3>My Holiday Hitlist</h3>
<p>Five things I want the most, based on my desirability ratings.<br/>You can't go wrong with this stuff!</p>
<ol>
$somevar
</ol></div>";

Приведенная выше функция помогает отделить представление (т. Е. HTML) от ваших данных. Хотя этот пример не идеален, вы сможете увидеть все ваши html в одном блоке и отладить их намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...