如何在另一个函数中调用带有数据库数据的函数?

时间:2016-05-24 02:58:56

标签: php jquery mysql function

编辑:在中士AJ的帮助下使用新代码。

好的,所以我一直在学习,但是由于我的编码器停止编写我们的网站,我现在必须自己学习PHP。

我一直看到编码器在其他函数调用中进行函数调用的编码。

首先,我们在网站中提供了95%的所有功能的文件。该函数文件基本上有大约40-50个函数。

所以我问是否有人可以向我解释如何调用另一个在下面的实例中工作的函数,但是当我尝试复制它时,它不起作用?当我尝试回显$user_info

时,不显示任何数据

例如下面这个函数:所以Sgt AJ帮助我解决了用户头像问题,所以这个问题将被删除!

function showComments($v)
    {
        $mysqli = db_connect();
        $v = mysqli_real_escape_string($mysqli,$v);
        $sql = "SELECT * FROM `cl45-tbn_dir`.`comments` WHERE `v` = ? ORDER BY `id` ASC";
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param("s",$v);
        $stmt->execute();
        $result = $stmt->get_result();

        while ($myrow = $result->fetch_assoc()) {
            if ($myrow['post_approved']==1){
                $user_info = getUserInfo($myrow['poster_id']);

                if ($user_info['user_avatar_type']==1) {
                    $avatar = "https://www.tubenations.com/forum/download/file.php?avatar=".$user_info['user_avatar'];
                } else {
                    $avatar = "https://www.tubenations.com/forum/styles/Flato%20-%20LightBlue%20-%20Main%20Style/theme/images/no_avatar.gif";
                }

                echo '<div class="comment">
                    <div class="avatar">
                        <a href="https://www.tubenations.com/users.php?id='.$myrow['poster_id'].'">
                            <img src="'.$avatar.'" />
                    </div>

                    <div class="name"><a class ="myaccount'.$user_info['group_id'].'" href="https://www.tubenations.com/users.php?id='.$myrow['poster_id'].'">'.$user_info['username'].'</a></div>
                    <div class="date" title="report this post">'.date("d M Y",$myrow['post_time']).'<form action="" class="flag" method="post"><button type="submit" value="'.$myrow['id'].'" name="vote" id="votebutton" alt="vote"><img src="/images/flag.png" alt="report this post!" /></button></form></div>
                    <p>'.stripslashesFull(clean($myrow['post_text'])).'</p>
                </div>';
            }
        }

        $stmt->close();
        $mysqli->close();
    }

如您所见,有一行调用另一个函数getUserInfo$user_info = getUserInfo($myrow['poster_id']);这是该文件中的另一个函数,它基本上连接到我们的论坛数据库并获取数据。

但是当我尝试在另一个中使用这种类型的调用来复制此方法时,它不起作用。

所以基本上我尝试使用的是尝试使用以下函数创建显示X用户数据的函数

    function getYouTubeInfo($page)
            {
                #$id = $_GET['id'];

                print_r ($userdata['user_id']);
                echo $myrow['user_id'];
                echo $userdata['user_id'];

                $db_link = mysqli_connect ('localhost', 'HIDDEN', 'HIDDEN', 'HIDDEN');

                  if ( !$db_link )
{
    die('following error occured: '.mysqli_error());
}

$query = "SELECT user_id, yt_channelTitle, channel_id FROM points WHERE channel_id IS NOT NULL AND yt_channelTitle IS NOT NULL ORDER BY channel_id DESC;";
 if($result = mysqli_query($db_link, $query)){
  echo "";

  $i = -1;
  $objectsPerPage = 14;
   $show_records = FALSE;
   while ($row = $result->fetch_assoc()) 
            {

            if (!isset($_SESSION['last_slide'])) { $_SESSION['last_slide'] = $row['channel_id']; }

                if ($row['channel_id'] == $_SESSION['last_slide']) { $show_records = TRUE; }

                      if ($show_records) 
                        {
                      $i = $i+1;

                        if ($i > $objectsPerPage) { $_SESSION['last_slide'] = $row['channel_id']; echo 'BREAK: ', $row['channel_id']; break; }

                       $page = abs(floor($i/$objectsPerPage));
                       $youtube_info = $row;
                        $userdata = getUserInfo($row['user_id']);

                                if ($userdata['user_avatar_type']==1) {
                                    $avatar = "/forum/download/file.php?avatar=".$userdata['user_avatar'];
                                }   else {
                                    $avatar = "/images/no_image.png";
                                }

                               if (($i/$objectsPerPage)==$page) 
                               { 
                                if ($page !=0) {
                                 echo "</div></div>";
                                }
                                echo '<div class="cslide-slide">
                                <div class="slideTitles">Youtube Users Slide '.$page.'</div>
                                <div class="sections grouped">';
                               }
                    echo '  
                              <div class="cols span_1_of_2">    
                            <div class="memberTitles"><a href="/user/'.$youtube_info['user_id'].'">'.$youtube_info['yt_channelTitle'].'</a>'.$i.';</div>
                                    <div class="memberPicture"><img src="'.$avatar.'" title="Tube Nations Profile Picture" alt="Tube Nations Profile Picture"/></div>
                                    <div class="memberTwitter"><div class="g-ytsubscribe" data-channelid="'.$youtube_info['channel_id'].'" data-layout="full" data-count="default" data-onytevent="onYtEvent"></div></div> 
                              </div> ';

                        }
            }

    echo '</div></div>'; 
 }
    mysqli_free_result($result);
echo $_SESSION['last_slide'];
session_destroy();
mysqli_close($db_link);

}

所以基本上在相关页面youtube.php中,我只是回应这个getYouTubeInfo函数。

此功能我需要尝试获取论坛数据库中来自getUserInfo($id)的用户个人资料图片。

另外在旁注中,我也无法弄清楚如何重新排列$i$objectsPerPage变量以及if语句,以便我可以在查询中使用$page { {1}}因为目前页面崩溃没有限制,所以我现在必须将限制设置为16。

我使用jQuery幻灯片脚本来显示每个幻灯片的X,所以如果我能以某种方式解决如何在变量和if语句之后进一步查询页面的内容或获得任何帮助,我将不胜感激。

编辑更新回复:现在问题是它现在每张幻灯片/页面显示X,但现在显示8个结果显示10时显示间隙,但是有间隙,然后是下一个幻灯片按钮没出现?所以中士AJ说我们需要以某种方式将它连接到jquery ?,所以我现在将为jquery添加一个标签。 (但我可以对AJ中士的帮助表示非常感谢,非常感谢):))

2 个答案:

答案 0 :(得分:1)

哇,你在这里发生了几件事。

首先,您的查询现在显示LIMIT 0;,这意味着您应该返回零行。你从这个查询中获取数据了吗?

其次,要使每页的页面和项目正常工作,您可以使用以下内容:

  1. 在您的循环中,保留i=i+1
  2. 添加以下内容:
  3. if ($i == $objectsPerPage)
    {
    ++$page;
    i = 1;
    }

    这将在页面填满后递增页面计数器,然后重置下一页的项目计数。

答案 1 :(得分:0)

我只是想在我的问题中添加更多内容,我想现在答案是使用AJAX,所以我想我需要以某种方式让cslide jquery代码回想起getYoutubeInfo($page)函数

cslide的jquery代码是这样的:

(function($) {

    $.fn.cslide = function() {

        this.each(function() {

            var slidesContainerId = "#"+($(this).attr("id"));

            var len = $(slidesContainerId+" .cslide-slide").size();     // get number of slides
            var slidesContainerWidth = len*100+"%";                     // get width of the slide container
            var slideWidth = (100/len)+"%";                             // get width of the slides

            // set slide container width
            $(slidesContainerId+" .cslide-slides-container").css({
                width : slidesContainerWidth,
                visibility : "visible"
            });

            // set slide width
            $(".cslide-slide").css({
                width : slideWidth
            });

            // add correct classes to first and last slide
            $(slidesContainerId+" .cslide-slides-container .cslide-slide").last().addClass("cslide-last");
            $(slidesContainerId+" .cslide-slides-container .cslide-slide").first().addClass("cslide-first cslide-active");

            // initially disable the previous arrow cuz we start on the first slide
            $(slidesContainerId+" .cslide-prev").addClass("cslide-disabled");

            // if first slide is last slide, hide the prev-next navigation
            if (!$(slidesContainerId+" .cslide-slide.cslide-active.cslide-first").hasClass("cslide-last")) {           
                $(slidesContainerId+" .cslide-prev-next").css({
                    display : "block"
                });
            }

            // handle the next clicking functionality
            $(slidesContainerId+" .cslide-next").click(function(){
                var i = $(slidesContainerId+" .cslide-slide.cslide-active").index();
                var n = i+1;
                var slideLeft = "-"+n*100+"%";
                if (!$(slidesContainerId+" .cslide-slide.cslide-active").hasClass("cslide-last")) {
                    $(slidesContainerId+" .cslide-slide.cslide-active").removeClass("cslide-active").next(".cslide-slide").addClass("cslide-active");
                    $(slidesContainerId+" .cslide-slides-container").animate({
                        marginLeft : slideLeft
                    },250);
                    if ($(slidesContainerId+" .cslide-slide.cslide-active").hasClass("cslide-last")) {
                        $(slidesContainerId+" .cslide-next").addClass("cslide-disabled");
                    }
                }
                if ((!$(slidesContainerId+" .cslide-slide.cslide-active").hasClass("cslide-first")) && $(".cslide-prev").hasClass("cslide-disabled")) {
                    $(slidesContainerId+" .cslide-prev").removeClass("cslide-disabled");
                }
            });

            // handle the prev clicking functionality
            $(slidesContainerId+" .cslide-prev").click(function(){
                var i = $(slidesContainerId+" .cslide-slide.cslide-active").index();
                var n = i-1;
                var slideRight = "-"+n*100+"%";
                if (!$(slidesContainerId+" .cslide-slide.cslide-active").hasClass("cslide-first")) {
                    $(slidesContainerId+" .cslide-slide.cslide-active").removeClass("cslide-active").prev(".cslide-slide").addClass("cslide-active");
                    $(slidesContainerId+" .cslide-slides-container").animate({
                        marginLeft : slideRight
                    },250);
                    if ($(slidesContainerId+" .cslide-slide.cslide-active").hasClass("cslide-first")) {
                        $(slidesContainerId+" .cslide-prev").addClass("cslide-disabled");
                    }
                }
                if ((!$(slidesContainerId+" .cslide-slide.cslide-active").hasClass("cslide-last")) && $(".cslide-next").hasClass("cslide-disabled")) {
                    $(slidesContainerId+" .cslide-next").removeClass("cslide-disabled");
                }
            });



        });

        // return this for chainability
        return this;

    }

}(jQuery));

我还调整了Sgt AJ再次帮助我的代码,通过在结束括号之前添加session_destroy()。还有一些其他的部分,因为我注意到当你反复刷新页面时,它只是加载了接下来的14个结果,而不是相同的前14个结果,所以实际的代码和逻辑似乎正在工作。所以基本上现在我们需要找到一种方法来使用AJAX并从下一个/上一个按钮的onclick事件中调用该函数。