$productdwgcode对这个值没有传进来
ms 得改成$node_level 这个吧.
指的是节点的等级.

解决方案 »

  1.   


    我对这段代码进行了一些修改,但是传值还是有问题,请大家帮忙
    所用到的表结构,我主要是想用到父图号upcode、图号dcode、父图名upname、图名dname、健号ditem就是孩子节点的一个排序号,所属产品productdwgcode。
    在主程序中我主要是找到父图号(根节点),这个根节点存放的值与所属产品PRODUCTDWGCODE是一个值,等到这个function中,我主要是想根据WHERE UPCODE = '{$upcode}' AND PRODUCTDWGCODE = '{$productdwgcode}这个where子句进行判断,这样就可以每次都是这一个产品下的图号了,我想请您帮我看看该如何传值呢?像我这种书写方式需要改进那里?<?php
             function getNode($upcode = '',$productdwgcode = '',$node_level = 1)
    {
        include 'include/pdmdblogon.php';

    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}
    echo "$upcode";
    echo "$productdwgcode";
       $sql = "SELECT UPCODE,UPNAME,DITEM,DCODE,DNAME,PRODUCTDWGCODE  FROM XTDETAMSALL_DETAIL";
    $sql .= " WHERE UPCODE = '{$upcode}' AND PRODUCTDWGCODE = '{$productdwgcode}'";
    $sql .= " ORDER BY DITEM";
    $stmt = ociparse($conn,$sql);
    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);
    if(ocifetchinto($stmt,$row,OCI_ASSOC)){
    foreach($row as $v)
    {
    if($node_level = 1)
    {
        $k = "  ";
    }else{
        for($i = 0; $i <= $node_level; $i++)
    {
        $k .= "  ";
    }
    }
    $code = $k.$v["upcode"].$v["upname"]."<br/>";
    $upcode = $v["DCODE"];
    $productdwgcode = $v["PRODUCTDWGCODE"];
    echo $code;
    getNode($upcode,$productdwgcode,$node_level+1);

    }

    }

    include 'include/pdmdblogon.php';

    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}

    $mysql = "SELECT UPCODE,PRODUCTDWGCODE FROM XTDETAMSALL_DETAIL";
    $mysql .= " WHERE UPCODE = PRODUCTDWGCODE  ORDER BY DITEM";

    $stmt = ociparse($conn,$mysql);
    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);
    while(ocifetchinto($stmt,$row,OCI_ASSOC))
    {
        getNode($row["UPCODE"],$row["PRODUCTDWGCODE"],1);
    }
    ?>
      

  2.   

    恩,是
    但是现在我紧跟着function这个题目下面进行echo $upcode = '',$productdwgcode 这两个变量时,是没有问题的,结果都可以查询出来,但是放在了function本身中的那个SQl之后时,就出现了很多的问题,查询也不对了,不知道这是为什么?
      

  3.   

    我使用dreamwear编写代码,程序执行是放在了服务器上的,不知道你所说的”在函数内部设置断点,或者写个日志.“是如何实现的。
    本人也是刚接触这个语言,好多东西都不明白,请多指教。谢谢!
      

  4.   

    代码如第二楼中所示:
    当我在function函数中的那个if(ocifetchinto($stmt,  ,  ))加入echo的时候echo $row['UPCODE']."<br/>";
       echo $row['UPNAME']."<br/>";
       echo $row['DCODE']."<br/>";
       echo $row['DNAME']."<br/>";
       echo $row['DITEM']."<br/>";
       echo $row['PRODUCTDWGCODE']."<br/>";显示的还是正确的结果(此时我已经将foreach语句到这个函数结束给注释掉了)但是当取消这个注释的时候,就会提示好多问题,并且此时echo的取值也发生了错误!这是怎么回事?是不是我的那个foreach中的部分有什么问题?至于foreach中的ocifetchinto,不是把取出来的结果存放到row这个变量中吗,是不是进行foreach中的空格的时候就把里面的值给冲掉了?如何实现展开和收缩功能呢?我这个代码实现了全部展开,但是如此的话 这棵树起不是太庞大了!
    请理解者多多指点!
      

  5.   

    http://topic.csdn.net/u/20081029/11/f2faab7f-f8fb-43a8-906a-a7bb83063515.html
    看看我写的这个php树的小例子.看我是如何递归查找节点的.
      

  6.   

    我这个表里面没有ischild类似判断它是孩子节点的标记,只有一个所属产品字段,但凡是这个产品中的孩子地记录中的这个字段的值是相同的,那我该如何去操作?
    是不是应该使用sql语句去判断呢?如果去判断一般都应该如何实现呢〉?
    我使用的是php4开发的,不知道你的代码我能否直接用,我看到你的代码中配合使用了js代码,这个我是不是如果可以的话能够直接用呢?
      

  7.   


    1 如果你没有ischild这个字段的话,哪你只有再用sql去查询表,看是否有子节点存在.
    可以这样select count(*) from table where parent = xxx. 如果没有节点,应该是0,有节点就为节点数.
    2 至于js部分,我只是简单的只个展开和收缩,我只是为了写一个实例而矣.你要用也可以呀,你再美化一下就OK了.
      

  8.   

    我利用了你开发的那段代码
    但是为什么在function这个函数中的sql语句的条件中没有传进去值呢?
    我该如何去赋值呢?
    你那段代码中的javascript部分应该是可以实现的吧 但是我这里好像没有运行
    是不是跟href有关系
    对了 你的那个(\"div$id\“)和
    echo " <div upcode='div".$UPCODE."'>".echoChar("&nbsp;&nbsp;&nbsp;&nbsp;",$node_level).$UPNAME; 
    中的那个\"是转义字符?
    主要实现什么功能呢?
      

  9.   

    转义字符的意思就是想让它不和前面的引号冲突.
    以便能在html中输出.至于递归函数传值,我只传一个id进去,子节点都是通过parent = id来查找的.
      

  10.   

    productdwgcode这个是用来限制 我所选择的图号都是这个产品中的所用到的图号,这个参数就是所属产品
    我在这个程序中传递进去的是父图号进行传递值得!你的那个div upcode='div".$UPCODE."是干什么用的?其实无论传递一个值还是两个值 它们传递值得原理应该是一样的阿! 但是我却不能够把值传递给他 当用echo "$sql" where变量中的值为空 这样其实是不应该的吧!请问如何测试 javascript代码是否运行成功呢?
      

  11.   

    div upcode='div".$UPCODE."
    这块应该是div id='div".$UPCODE."
    这是html,不是xml.
    你只有指定这个div的id,才能获得这个节点对象,才能展开子节点,否则是不行的.唉,楼主的代码看着太乱,数据库字段命名也不规范,看着头疼.
    用得也容易出错.
      

  12.   

    +[25TGYWJ-2007]25T工艺文件2007
    Warning: ociexecute(): OCIStmtExecute: ORA-00933: SQL 命令未正确结束 in d:\myweb\a\dinge\text.php on line 84    -[25TGYWJ-2007]25T工艺文件2007Warning: ociexecute(): OCIStmtExecute: ORA-00933: SQL 命令未正确结束 in d:\myweb\a\dinge\text.php on line 84    -[25TGYWJ-2007]25T工艺文件2007Warning: ociexecute(): OCIStmtExecute: ORA-00933: SQL 命令未正确结束 in d:\myweb\a\dinge\text.php on line 84    -[25TGYWJ-2007]25T工艺文件2007
    我运行完我的程序之后 只有两个层次 并且还出现了问题
    请看看是怎么一回事?
      

  13.   

    真为楼主着急.呵呵.
    把你的完整代码帖出来,注意格式哈.
    再帮你看看.注意回帖要用csdn的格式将代码括起来.
      

  14.   

    这个我不知道csdn还有格式呢!
    我市按照你的格式进行修改的,upcode父图号,upname父图名,dcode图号,dname图名,productdwgcode是所属产品,ditem键号:就是对同一个父图号中的子图号进行排序。
    <?php
        include_once 'include/pdmdblogon.php';//连接pdm数据库

    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}
    //获得顶节点
    $mysql = "SELECT DISTINCT UPCODE,PRODUCTDWGCODE,UPNAME FROM XTDETAMSALL_DETAIL";
    $mysql .= " WHERE UPCODE = PRODUCTDWGCODE";

    $stmt = ociparse($conn,$mysql);
    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);
    while(ocifetchinto($stmt,$row,OCI_ASSOC))
    {
        extract($row);


    $mysql1 = "SELECT count(*) AS t FROM XTDETAMSALL_DETAIL WHERE upcode = '$UPCODE'";
    $stmt1 = ociparse($conn,$mysql1);
    $exi = ociexecute($stmt1);
        
    $icon = $exi?"<a href='javascript:expand(\"div $UPCODE\");'>+</a>":"<a href='javascript:expand(\"div $UPCODE\");'>-</a>";
    $out = $icon."[".$UPCODE."]".$UPNAME;

    echo "<div id='div".$UPCODE."'>".$out;
    if($exi)
    {
      
            getNode($UPCODE,$PRODUCTDWGCODE,0);   
    }
    echo "</div>";

    }

    function getNode($upcode,$productdwgcode,$node_level)
    { include 'include/pdmdblogon.php';
    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}
       $sql = "SELECT  UPCODE,UPNAME,DITEM,DCODE,DNAME,PRODUCTDWGCODE  FROM XTDETAMSALL_DETAIL";
    $sql .= " WHERE UPCODE = '$upcode' AND PRODUCTDWGCODE = '$productdwgcode'";
    $sql .= " ORDER BY DITEM";

    $stmt= ociparse($conn,$sql);

    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);

    $node_level++;
    while(ocifetchinto($stmt,$rows,OCI_ASSOC))
    {
    extract($rows);

    $mysql1 = "SELECT count(*) FROM XTDETAMSALL_DETAIL upcode = '$DCODE'";
    $stmt1 = ociparse($conn,$mysql1);
    $exi =  ociexecute($stmt1);
    $icon = $exi?"<a href='javascript:expand(\"div $DCODE\");'>+</a>":"<a href='javascript:expand(\"div $DCODE\");'>-</a>";
                $out = $icon."[".$DCODE."]".$DNAME;

    echo "<div id='div".$DCODE."'>".echoChar("&nbsp;&nbsp;&nbsp;&nbsp;",$node_level).$out;
    if($exi)
    {
          getNode($DCODE,$PRODUCTDWGCODE,$node_level);   
    }
    echo "</div>";
    }
    }

    function echoChar($char,$num)
    {
    for($i = 0;$i<$num;$i++)
    {
    $strChar .= $char;
    }
    return $strChar;
    }


    ?><script language="javascript">
        function expand(dcode)
    {
        
        var obj = document.getElementById(dcode).childNodes;
    //alert(obj);
    for(var i=0;i<obj.length;j++)
    {
        if(obj[i].nodeName=="DIV")
    {
        switch(obj[i].style.display)
    {
        case "":
    case "block":
        obj[i].style.display = "none";
    break;
    case "none";
        obj[i].style.display = "block";
    break;
    }
    }
    }
    }
    </script>
      

  15.   

    [code]<?php
        include_once 'include/pdmdblogon.php';

    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}
    //获得顶节点
    $mysql = "SELECT DISTINCT UPCODE,PRODUCTDWGCODE,UPNAME FROM XTDETAMSALL_DETAIL";
    $mysql .= " WHERE UPCODE = PRODUCTDWGCODE";

    $stmt = ociparse($conn,$mysql);
    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);
    while(ocifetchinto($stmt,$row,OCI_ASSOC))
    {
        extract($row);


    $mysql1 = "SELECT count(*) AS t FROM XTDETAMSALL_DETAIL WHERE upcode = '$UPCODE'";
    $stmt1 = ociparse($conn,$mysql1);
    $exi = ociexecute($stmt1);
        
    $icon = $exi?"<a href='javascript:expand(\"div $UPCODE\");'>+</a>":"<a href='javascript:expand(\"div $UPCODE\");'>-</a>";
    $out = $icon."[".$UPCODE."]".$UPNAME;

    echo "<div id='div".$UPCODE."'>".$out;
    if($exi)
    {
      
            getNode($UPCODE,$PRODUCTDWGCODE,0);   
    }
    echo "</div>";

    }

    function getNode($upcode,$productdwgcode,$node_level)
    { include 'include/pdmdblogon.php';
    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}
       $sql = "SELECT  UPCODE,UPNAME,DITEM,DCODE,DNAME,PRODUCTDWGCODE  FROM XTDETAMSALL_DETAIL";
    $sql .= " WHERE UPCODE = '$upcode' AND PRODUCTDWGCODE = '$productdwgcode'";
    $sql .= " ORDER BY DITEM";

    $stmt= ociparse($conn,$sql);

    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);

    $node_level++;
    while(ocifetchinto($stmt,$rows,OCI_ASSOC))
    {
    extract($rows);

    $mysql1 = "SELECT count(*) FROM XTDETAMSALL_DETAIL upcode = '$DCODE'";
    $stmt1 = ociparse($conn,$mysql1);
    $exi =  ociexecute($stmt1);
    $icon = $exi?"<a href='javascript:expand(\"div $DCODE\");'>+</a>":"<a href='javascript:expand(\"div $DCODE\");'>-</a>";
                $out = $icon."[".$DCODE."]".$DNAME;

    echo "<div id='div".$DCODE."'>".echoChar("&nbsp;&nbsp;&nbsp;&nbsp;",$node_level).$out;
    if($exi)
    {
          getNode($DCODE,$PRODUCTDWGCODE,$node_level);   
    }
    echo "</div>";
    }
    }

    function echoChar($char,$num)
    {
    for($i = 0;$i<$num;$i++)
    {
    $strChar .= $char;
    }
    return $strChar;
    }


    ?><script language="javascript">
        function expand(dcode)
    {
        
        var obj = document.getElementById(dcode).childNodes;
    //alert(obj);
    for(var i=0;i<obj.length;j++)
    {
        if(obj[i].nodeName=="DIV")
    {
        switch(obj[i].style.display)
    {
        case "":
    case "block":
        obj[i].style.display = "none";
    break;
    case "none";
        obj[i].style.display = "block";
    break;
    }
    }
    }
    }
    </script>
    [/code]
      

  16.   

    $exi = ociexecute($stmt1); 
    这块你只得到结果集好不,
    下面你还要获取结果集中的值.
      

  17.   


    您说的这个我不是很明白,请具体给我解释一下吧!
    $exi是用来判断是否有孩子节点的
    而extract($row)不是已经把结果集得到了吗,他们的值不是直接通过他们的“$字段名称”就可以得到吗?
      

  18.   

    <?php
        include 'include/pdmdblogon.php';

    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}
    //获得顶节点
    $mysql = "SELECT DISTINCT UPCODE,PRODUCTDWGCODE,UPNAME FROM XTDETAMSALL_DETAIL";
    $mysql .= " WHERE UPCODE = PRODUCTDWGCODE";
    $stmt = ociparse($conn,$mysql);
    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);
    while(ocifetchinto($stmt,$row,OCI_ASSOC)){
        extract($row);
    //echo "$UPNAME";
    $mysql1 = "SELECT count(*) AS t FROM XTDETAMSALL_DETAIL WHERE upcode = '$UPCODE'";
    $stmt1 = ociparse($conn,$mysql1);
    $exi = ociexecute($stmt1);
        


    $icon = $exi?"<a href='javascript:expand(\"div$UPCODE\");'>+</a>":"-";
    $UPNAME = $icon.$UPNAME;
    echo "<div upcode='div".$UPCODE."'>".$UPNAME;
    if($exi)
    {
      
            getNode($UPCODE,$PRODUCTDWGCODE,1);   
    }

    }

    function getNode($upcode,$productdwgcode,$node_level)
    {
            include 'include/pdmdblogon.php';
       $sql = "SELECT DISTINCT UPCODE,UPNAME,DITEM,DCODE,DNAME,PRODUCTDWGCODE  FROM XTDETAMSALL_DETAIL";
    $sql .= " WHERE UPCODE = '{$UPCODE}' AND PRODUCTDWGCODE = '{$PRODUCTDWGCODE}'";
    $sql .= " ORDER BY DITEM";

    $stmt = ociparse($conn,$sql);
    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);


    $node_level++;

    while(ocifetchinto($stmt,$rows,OCI_ASSOC))
    {
    extract($row);
    echo "$UPCODE";
    echo "$UPNAME";
    echo "$DCODE";echo "$DNAME";
    echo "$DITEM";echo "$PRODUCTDWGCODE";

    $mysql1 = "SELECT count(*) FROM XTDETAMSALL_DETAIL upcode = '{$upcode}'";
    $stmt1 = ociparse($conn,$mysql1);

    $exi =  ociexecute($stmt1);
    $icon = $exi ? "<a href='javascript:expand(\"div$UPCODE\");'>+</a>":"-";
    $UPNAME = $icon.$UPNAME;
    echo "<div upcode='div".$UPCODE."'>".echoChar("&nbsp;&nbsp;&nbsp;&nbsp;",$node_level).$UPNAME;
    if($exi)
    {
        //echo "  ".$row['UPCODE']."$b";
        getNode($UPCODE,$PRODUCTDWGCODE,$node_level);   
    }
    echo "</div>";
    }
    }

    function echoChar($char,$num)
    {
    for($i = 0;$i<$num;$I++)
    {
    $strChar .= $char;
    }
    return $strChar;
    }


    ?><script language="javascript">
        function expand(upcode)
    {
        
        var obj = document.getElementById(upcode).childNodes;
    //alert(obj);
    for(var i=0;i<obj.length;j++)
    {
        if(obj[i].nodeName=="DIV")
    {
        switch(obj[i].style.display)
    {
        case "":
    case "block":
        obj[i].style.display = "none";
    break;
    case "none";
        obj[i].style.display = "block";
    break;
    }
    }
    }
    }
    </script>
      

  19.   

    上面的那个帖子有些问题,这个是最近修改的!
    请大家帮忙看看 到底哪里有问题
    <?php
        include_once 'include/pdmdblogon.php';

    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}
    //获得顶节点
    $mysql = "SELECT DISTINCT UPCODE,PRODUCTDWGCODE,UPNAME FROM XTDETAMSALL_DETAIL";
    $mysql .= " WHERE UPCODE = PRODUCTDWGCODE";

    $stmt = ociparse($conn,$mysql);
    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);
    while(ocifetchinto($stmt,$row,OCI_ASSOC))
    {
        extract($row);


    $mysql1 = "SELECT count(*) AS t FROM XTDETAMSALL_DETAIL WHERE upcode = '$UPCODE'";
    $stmt1 = ociparse($conn,$mysql1);
    $exi = ociexecute($stmt1);
        
    $icon = $exi?"<a href='javascript:expand(\"div $UPCODE\");'>+</a>":"<a href='javascript:expand(\"div $UPCODE\");'>-</a>";
    $out = $icon."[".$UPCODE."]".$UPNAME;

    echo "<div id='div".$UPCODE."'>".$out;
    if($exi)
    {
      
            getNode($UPCODE,$PRODUCTDWGCODE,0);   
    }
    echo "</div>";

    }

    function getNode($upcode,$productdwgcode,$node_level)
    { include 'include/pdmdblogon.php';
    if(!$conn){
    echo "注意:当前无法连接PDM数据库。";//连接错误提示
    exit;}
       $sql = "SELECT  UPCODE,UPNAME,DITEM,DCODE,DNAME,PRODUCTDWGCODE  FROM XTDETAMSALL_DETAIL";
    $sql .= " WHERE UPCODE = '$upcode' AND PRODUCTDWGCODE = '$productdwgcode'";
    $sql .= " ORDER BY DITEM";

    $stmt= ociparse($conn,$sql);

    if(!$stmt)
    {
    echo "ERROR - Could not parse SQL statement.";
    exit;
    }
    ociexecute($stmt);

    $node_level++;
    while(ocifetchinto($stmt,$rows,OCI_ASSOC))
    {
    extract($rows);

    $mysql1 = "SELECT count(*) FROM XTDETAMSALL_DETAIL upcode = '$DCODE'";
    $stmt1 = ociparse($conn,$mysql1);
    $exi =  ociexecute($stmt1);
    $icon = $exi?"<a href='javascript:expand(\"div $DCODE\");'>+</a>":"<a href='javascript:expand(\"div $DCODE\");'>-</a>";
                $out = $icon."[".$DCODE."]".$DNAME;

    echo "<div id='div".$DCODE."'>".echoChar("&nbsp;&nbsp;&nbsp;&nbsp;",$node_level).$out;
    if($exi)
    {
          getNode($DCODE,$PRODUCTDWGCODE,$node_level);   
    }
    echo "</div>";
    }
    }

    function echoChar($char,$num)
    {
    for($i = 0;$i<$num;$i++)
    {
    $strChar .= $char;
    }
    return $strChar;
    }


    ?><script language="javascript">
        function expand(dcode)
    {
        
        var obj = document.getElementById(dcode).childNodes;
    //alert(obj);
    for(var i=0;i<obj.length;j++)
    {
        if(obj[i].nodeName=="DIV")
    {
        switch(obj[i].style.display)
    {
        case "":
    case "block":
        obj[i].style.display = "none";
    break;
    case "none";
        obj[i].style.display = "block";
    break;
    }
    }
    }
    }
    </script>
      

  20.   


            $mysql1 = "SELECT count(*) AS t FROM XTDETAMSALL_DETAIL WHERE upcode = '$UPCODE'";
            $stmt1 = ociparse($conn,$mysql1);
            $exi = ociexecute($stmt1);
            
            $icon = $exi?"<a href='javascript:expand(\"div $UPCODE\");'>+</a>":"<a href='javascript:expand(\"div $UPCODE\");'>-</a>";
            $out = $icon."[".$UPCODE."]".$UPNAME;这块,$exi = ociexecute($stmt1);只是执行了查询,你要获得查询的结果还要用ocifetchinto($stmt,$rows,OCI_ASSOC)吧.程序写的乱七八糟,需要改的地方太多了. 你好好看看人家oci系列函数,是怎么实现查询的吧.
      

  21.   

    $icon = $exi?"<a href='javascript:expand(\"div $DCODE\");'>+</a>":"<a href='javascript:expand(\"div $DCODE\");'>-</a>";是不是应该通过上述代码,当单击加号或是减号的时候是不是就应该能够进行展开和收缩操作呢?
    为什么我这个老是提示第一行 缺少对象的错误提示
    请帮我看看是不是这里面的语句写得不对啊!
    <script language="javascript">
        function expand(id)
    {
        
        var obj = document.getElementById(id).childNodes;
    alert(obj);
    for(var i=0;i<obj.length;j++)
    {
        if(obj[i].nodeName=="DIV")
    {
        switch(obj[i].style.display)
    {
        case "":
    case "block":
        obj[i].style.display = "none";
    break;
    case "none";
        obj[i].style.display = "block";
    break;
    }
    }
    }
    }
    </script>这里面就不需要变化就可以了吧如何不显示叶子节点呢? 因为如果显示叶子节点的话 我这个系统就运行的太慢了!