Php 如何一次调用一次函数?

Php 如何一次调用一次函数?,php,Php,我正在编写PHP脚本,以便在单击网站上的链接时一次调用一次函数 当我点击我网站上的链接连接到get-listing.php脚本时,它将同时调用tvguidecom和skyuk的函数,并输出其中一个网页 我认为问题出在这一行: while ($row = mysql_fetch_array($result1)) { tvguidecom($row); skyuk($row); } 以下是完整的代码: <?php $errmsg_arr = array(); $errflag =

我正在编写PHP脚本,以便在单击网站上的链接时一次调用一次函数


当我点击我网站上的链接连接到get-listing.php脚本时,它将同时调用tvguidecom和skyuk的函数,并输出其中一个网页

我认为问题出在这一行:

while ($row = mysql_fetch_array($result1))
{
   tvguidecom($row);
   skyuk($row);
}
以下是完整的代码:

<?php
$errmsg_arr = array();
$errflag = false;
$link;
include ('simple_html_dom.php');

function db_connect()
{
  define('DB_HOST', 'localhost');
  define('DB_USER', 'mydbname');
  define('DB_PASSWORD', 'mydbpassword');
  define('DB_DATABASE', 'mydbname');

  $errmsg_arr = array();
  $errflag = false;
  $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

  if(!$link) 
  {
    die('Failed to connect to server: ' . mysql_error());
  }

  $db = mysql_select_db(DB_DATABASE);
  if(!$db) 
  {
    die("Unable to select database");
  }
}

function tvguidecom($row)
{
  include ('tvguide.get-listing.php');
}
function tvguide2($row)
{
  include ('skyuk.php');
}
db_connect();


function clean($var)
{
  return mysql_real_escape_string(strip_tags($var));
}

$channels = "";
$id = "";

if(isset($_GET['channels']))
{
  $channels = $_GET['channels'];
}
if(isset($_GET['id']))
{
  $id = $_GET['id'];
}

if($errflag) 
{
  $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
  echo implode('<br />',$errmsg_arr);
}
else 
{
  $insert = array();

  if(isset($_GET['channels'])) 
  {
    $insert[] = 'channels = \'' . clean($_GET['channels']) .'\'';
  }
  if(isset($_GET['id'])) 
  {
    $insert[] = 'id = \'' . clean($_GET['id']) . '\'';
  }

  if($channels && $id) 
  {
    $qrytable1="SELECT id, channels, links FROM tvguide WHERE channels='$channels' && id='$id'";
    $result1=mysql_query($qrytable1) or die('Error:<br />' . $qry . '<br />' . mysql_error());

    while ($row = mysql_fetch_array($result1))
    {
      tvguidecom($row);
      skyuk($row);
    }
    mysql_close();
    exit;
  }
  else if(!$channels && ! $id) 
  {
    $qrytable1="SELECT id, channels, links, streams FROM tvguide";
    $result1=mysql_query($qrytable1) or die('Error:<br />' . $qry . '<br />' . mysql_error());

    while ($row = mysql_fetch_array($result1)) 
    {
      echo "<p id='channels'>".$row["id"]. " " . $row["channels"]. "</p>";
      echo '<a id="link1" href="http://example.com/get-listing.php?channels=' . $row["channels"] . "&id=" . $row["id"] . '">http://example.com/get-listing.php?channels=' . $row["channels"] . "&id=" . $row["id"] . '</a><br><br>';

      //echo "<p id='links'>";

      //echo '<a id="link1" href="http://example.com/get-listing.php?channels=' . $row["channels"] . "&id=" . $row["id"] . "'>http://example.com/get-listing.php?channels=" . $row["channels"] . "&id=" . $row["id"] .'>test</a></p>';
      //echo '<a id="link1" href="http://example.com/get-listing.php?channels=';

      echo '<a id="streams" href="' . $row['streams'] . '">Stream 1</a><br><br>';
    }
  } 
}
?>

最好的方法是让函数返回布尔值,以便检查是否应继续此过程

我猜函数
tvguidecom
看起来像:

function tvguidecom() {
    // do something without return value
}
在其中添加一个返回值:

function tvguidecom() {
    // do something
    return $status;
}
因此,您可以在代码中测试返回值

while ($row = mysql_fetch_array($result1))
{
    if (tvguidecom($row)) {
        skyuk($row);
    }
}
注意:在另一个主题上,您不应该再使用mysql扩展,因为它已被弃用。您应该使用mysqli或pdo;DR

while ($row = mysql_fetch_array($result1))
{
   // this ensures that `tvguidecom()` does its stuff, and `skyuk()` 
   // waits for results returned by the function.
   skyuk(tvguidecom($row));
}

function tvguidecom($row) {
  // do stuffs, returns original input $row;
  return $row;  
}

**另一种方法**

和fn:

tvguidecom(a, callback) {
  // dostuffs and when complete
  callback( result );
}

**语法可能不正确,请参阅提供的链接。希望这能有所帮助。

非常感谢您的帮助,那么我如何检查在使用
if(tvguidecom($row))
时数据是否返回true或false,以及如何在添加更多函数时检查多个函数?@Rob这取决于您的数据。您必须在函数中测试它,并确定结果是否良好。当我尝试您的代码时,
if(tvguidecom($row)){skyuk($row);}
它将调用skyuk函数,但如果返回数据,我想调用tvguidecom函数,否则调用skyuk函数。它应该是这样的
if(tvguidecom($row)){tvguidecom($row);}else if(skyuk($row)){skyuk($row);}
但是当我尝试它时,我仍然得到相同的结果。有什么想法吗?@Rob我不明白你想达到什么目的。这些函数在做什么。我认为你应该更新你的OP来添加这些功能的细节。我已经告诉你我想要实现的。当我点击我的站点上的链接时,我正在调用脚本,我想检查一下,如果我得到了返回数据,那么就做些别的事情,调用下一个函数。希望这有意义?谢谢,我如何检查tvguidecom或skyuk中的哪个函数返回为真?在这种情况下,如果(tvguidecom($row)){skyuk($row)}。这意味着,tvguidecom必须返回一个布尔值,或者同时返回两个if(tvguidecom($row)和skyuk($row)){//do something}如果我有更多的函数,如何检查函数是否返回为布尔值呢?这没有任何意义。尽管问题提到“同时”发生的事情,但它们只是一个接一个地运行。添加嵌套和回调实际上不会改变任何事情发生的顺序。如果,似乎您正在扩展您的问题。有多种解决方案,但鉴于已定义的问题,必须做出假设。如果存在“n”个条件,则有设计模式或算法来接近它。分而治之,在你的场景中将问题分解为可解决的部分。“它将同时调用tvguidecom和skyuk的功能”。不,它不会,它会调用一个,然后立即调用另一个,因为它会按顺序通过您的程序。
tvguidecom(a, callback) {
  // dostuffs and when complete
  callback( result );
}