• User Newbie

    Fatal error: Call to undefined function: get_assoc() in C:\WM\www\smfrisk\login.php o

    Ciao a tutti,

    Sto cercando di integrare netrisk (board game opensource) a smf. Iniziava a funzionare ma ora mi sono bloccato.
    Se clicco su una partita mi dice:

    Fatal error: Call to undefined function: get_assoc() in C:\WM\www\smfrisk\login.php on line **33

    la linea interessata è la seguente (la seconda):
    [php]
    $sql = "SELECT id,player,host,state,password,color,email FROM {$db_prefix}game_$id WHERE player = '{$name}'";
    $playerinfo = get_assoc($sql);[/php]

    questo è il codice per intero del login.php:

    **[php]<?php
    // Load the settings...
    require_once(dirname(FILE) . '/Settings.php');
    require_once('includes/functions.php');
    include("includes/langconfig.php");

    // And important includes.
    //require_once($sourcedir . '/QueryString.php');
    //require_once($sourcedir . '/Subs.php');
    //require_once($sourcedir . '/Errors.php');
    //require_once($sourcedir . '/Load.php');
    //require_once($sourcedir . '/Security.php');

    // Get GET and POST variables
    $id = $_GET['id'];
    $name = $user_settings['memberName'];
    $password = $_REQUEST['hash_passwrd'];
    $player_rank = $_SESSION['player_rank'];

    // Check for name and pass or else go back to join screen
    /if (isset($user_settings['memberName'])){
    index_error_header($trad['MUST_LOGIN']);
    exit;
    }
    if(!isset($id)){ // make sure i get an id or else go to index
    index_error_header($trad['MUST_LOGGED']);
    exit;
    }
    /

    // Get all the player info
    $sql = "SELECT id,player,host,state,password,color,email FROM {$db_prefix}game_$id WHERE player = '{$name}'";
    $playerinfo = get_assoc($sql);

    // Get last most recent timestamp
    $sql = "SELECT timestamp FROM {$db_prefix}game_$id ORDER BY 'timestamp' DESC LIMIT 1";
    $timestamp = get_one($sql);
    //Check username (redundancy)
    if($playerinfo['player'] != $name){
    joingame_error_header($trad['LOGIN_FAILED']);
    exit;
    }
    //WM: end my code

    // Get game name
    $sql = "SELECT name,timelimit FROM {$db_prefix}games WHERE id = $id";
    $result = mysql_query($sql) or die('Could not get game name(login) :'.mysql_error());
    $game_name = get_assoc($sql);

    // Remove any previous Session data
    session_name("netrisk_$gamename");
    session_start();
    // Unset session data
    $_SESSION=array();
    // Clear cookie
    unset($_COOKIE[session_name()]);
    // Destroy session data
    session_destroy();

    // Initialize the Session
    session_name("netrisk_$gamename");
    session_start();

    // ONLY GET THE STATIC DATA... DYNAMIC DATA SHOULD BE LOADED BY GAME.PHP
    // You cant name anything $_SESSION['host'] apparently.
    $_SESSION['game_name'] = $game_name['name'];
    $_SESSION['game_timelimit'] = $game_name['timelimit'];
    $_SESSION['game_id'] = $id;
    $_SESSION['player_pass'] = $password;
    $_SESSION['player_id'] = $playerinfo['id'];
    $_SESSION['player_rank'] = $player_rank;
    $_SESSION['player_color'] = $playerinfo;
    $_SESSION['game_host'] = $playerinfo['host'];
    $_SESSION['state'] = $playerinfo['state'];
    $_SESSION['email'] = $playerinfo['email'];
    $_SESSION['player_name'] = $playerinfo['player'];
    $_SESSION['game_timestamp'] = $timestamp;

    // Send to game screen now that the session has been initialized
    header("Location: game.php");
    ?>[/php]E qesto è il codice della pagina da dove arriva il giocatore:

    [php]<?php
    // Load the settings...
    require_once(dirname(FILE) . '/Settings.php');

    require_once($sourcedir . '/QueryString.php');
    require_once($sourcedir . '/Subs.php');
    require_once($sourcedir . '/Errors.php');
    require_once($sourcedir . '/Load.php');
    require_once($sourcedir . '/Security.php');

    include('includes/langconfig.php');
    

    //if (isset($_SESSION['player_name'])){
    if (isset($user_settings['memberName'])){

    ?>
    <a class="button" href="index.php?page=creategame"><? echo $trad['CREATE_GAME']; ?></a>
    <?php
    }

    if (isset($_GET['sort'])) { $sort = $_GET['sort']; } else { $sort = 'time'; }
    if (isset($_GET['order'])) { $order = $_GET['order']; } else { $order = 'DESC'; }

    if(isset($_GET['num'])){
    $startnum = $_GET['num'];
    $endnum = $startnum + 20;
    $sql = "SELECT * FROM {$db_prefix}games ORDER BY $sort $order LIMIT $startnum , $endnum ";
    } else { // set Limit to +1 to see if there is another pages worth of games
    $startnum = 0;
    $sql = "SELECT * FROM {$db_prefix}games ORDER BY $sort $order LIMIT 0 , 20";
    }

    $some_games = db_query($sql);
    $query_rows = mysql_num_rows($some_games);

    ?>

    <? if(isset($_GET['error'])){ ?>
    <div class="error" id="error" style="top: 15px;">
    <? echo $trad['WARNING:']; ?> <?= $_GET['error'] ?>
    <div class="close"><a href="javascript:OffError()">X</a></div>
    </div>
    <? } ?>

    <table id="game_browser">
    <!--MW:classes in case we want styles on columns (width)-->
    <colgroup class="kibitz" />
    <colgroup class="locked" />
    <colgroup class="game_name" />
    <colgroup class="game_players" />
    <colgroup class="game_status" />
    <colgroup class="current_player" />
    <colgroup class="game_time" />
    <tr>
    <th><!--kibitz--></th>
    <th><!--locked--></th>
    <?php
    switch($order) {
    case 'DESC': $order = 'ASC';
    break;
    case 'ASC': $order = 'DESC';
    break;
    }
    ?>
    <th><a href="index.php?page=gamebrowser&sort=name&order=<?= $order ?>"><? echo $trad['GAME_NAME']; ?></a></th>
    <!--MW:again, comment out for now.<th>Type</th>-->
    <th>#</th>
    <th><a href="index.php?page=gamebrowser&sort=state&order=<?= $order ?>"><? echo $trad['STATUS']; ?></a></th>
    <th><? echo $trad['CURRENT_PLAYER']; ?></th>
    <th><a href="index.php?page=gamebrowser&sort=time&order=<?= $order ?>"><? echo $trad['LAST_MOVE']; ?></a></th>
    </tr>

    <?
    $rownum = 0;
    while (($game = mysql_fetch_array($some_games))&& ($rownum < 20)){
    ?>

        <tr class="<?
        switch ($game['state']) {
            case "Waiting":
                echo 'browsewait';
                break;
            case "Playing":
                echo 'browseplay';
                break;
            case "Finished":
                echo 'browsefin';
                break;
        }  // check row%2 to color rows
        ?>" style="background-color:#<?php  if ($rownum%2) { echo "000"; } else { echo "1e1e1e";} ?>;">
        <td><?
        if($game['kibitz']) 
            echo '<a href="index.php?page=kibitz&id='.$game['id'].'"><img src="images/kibitz.gif" height="12" width="16" alt="Kibitz" /></a>'; 
        else ;
            /*echo '&nbsp;';*/
            
        ?></td>
        <td><?
        if($game['password']){ echo '<img src="images/lock.gif" alt="Password" />'; $pass = 1; 
            } else { /*echo '&nbsp;';*/ $pass = 0; }
        ?></td>
        <td><?
        ($game['players'] == $game['capacity']) ? $full = 1 : $full = 0;
        ($game['state'] != 'Waiting') ? $playing = 1 : $playing = 0;
                echo '<input type="hidden" name="'.$game['id'].'" value="'.$game['id'].'" /> <a href="login.php?id='.$game['id'].'&amp;gamename='.rawurlencode($game['name']).'">'.@stripslashes($game['name']);
        ?></a></td>        
        
        <td><?     echo $game['players'].'/'.$game['capacity']; ?></td>
        <td><?     echo $game['state']; ?></td>
        
        <td><?
        /* Find out who's the current player.*/
            $sql = "SELECT player FROM {$db_prefix}game_".$game['id']." WHERE state != 'inactive' AND state != 'initial' AND state != 'dead' AND state != 'waiting' AND id != 1";
            $current_player = db_query($sql);
            // find out if the user needs to place troops
            if ($_SESSION['player_id']) {
                $sql = "SELECT state FROM {$db_prefix}game_".$game['id']." WHERE id = ".$_SESSION['player_id'];
                $user_state = get_one($sql);
            }
        switch ($game['state']) {
            case "Waiting":
                echo $trad['FOR_PLAYERS'];
                break;
            case "Finished":
                echo '';
                break;
            case "Initial":
            if ($user_state == 'initial') {
                echo "<span style='color:red;'>".$trad['PLACEMENT']."</span>";
            } else {
                echo $trad['PLACEMENT'];
            }
                break;
            case "Playing":
                if ($current_player[0] == $_SESSION['player_name']) {
                    echo "<span style='color:red;'>".$current_player[0]."</span>";
                } else {
                    echo $current_player[0];
                break;
           }
        }        
        ?></td>
        
        
        <td><?     echo substr($game['time'], 0, 10);    ?></td>
        </tr><?
            echo "\n";
            $rownum++;
    

    } ?>
    </table>
    <span class="rightalign">
    <? // BROWSE TABLE SIZE different in IE and Mozilla (bigger in Mozilla so the the current max fits Mozilla but leaves space in IE )
    if (($startnum - 20) > -1){ ?>
    <a href="index.php?num=<?= $startnum - 20 ?>" style="color:#FFEECC">
    <img src="images/arrow_left.gif" width="19" height="12" border="0" alt="Previous"><? echo $trad['PREVIOUS']; ?> </a>
    <? }
    if($query_rows == 20){ // theres another row for another page so show the Next Link.
    ?>
    <a href="index.php?num=<?= $startnum + 20 ?>" style="color:#FFEECC"><? echo $trad['NEXT']; ?>
    <img src="images/arrow_right.gif" width="19" height="12" border="0" alt="Next"></a>
    <? } ?>
    </span>

    [/php]
    Un grazie in anticipo, per chi fosse interessato al progetto non esiti a contattarmi, naturalmente il progetto dovrà rimanere opensource anche dopo le varie modifiche.
    Saluti


  • User Attivo

    Forse hai commentato un pezzo di codice che importava la libreria che definiva la funzione get_assoc().
    Nel codice "login.php" ci sono molti require_once(...) che sono stati inibiti.
    Controlla se i file che venivano richiesti contengono la definizione alla funzione, in tal caso devi reinserirli nello script.

    Ciao!