Salut,

Je fais un script de map (Environ 20x20 cases par rapport à des coordonnées x et y définies).

Seulement, j'ai appris que c'était déconseillé de mettre des requêtes SQL dans des boucles, dans mon cas, dans le for à l'intérieur d'un autre for.

Je me creuse la tête avec mes connaissances actuelles de la manière de procéder pour arriver au résultat que j'attends.

Avec mes requêtes SQL, comme il faut s'en douter, ce n'est que le premier résultat trouvé dans la table qui est prit en compte.

fetch() est-il considéré comme une requête SQL ?

<?php
    if(isset($_POST['submit']) && !empty($_POST['pos_x']) && !empty($_POST['pos_y'])){
        if(!ctype_digit($_POST['pos_x']) || !ctype_digit($_POST['pos_y'])){ echo 'Pas bon.'; }
        elseif(ctype_digit($_POST['pos_x']) && ctype_digit($_POST['pos_y'])){
            if($_POST['pos_x'] < 7){
                $coord_x_min = 1;
                $position_x = 1;
            }
            else{
                $coord_x_min = $_POST['pos_x'] - 7;
                $position_x = $_POST['pos_x'];
            }

            if($_POST['pos_x'] > 193){
                $coord_x_max = 200;
                $position_x = 200;
            }
            else{
                $coord_x_max = $_POST['pos_x'] + 7;
                $position_x = $_POST['pos_x'];
            }

            if($_POST['pos_y'] < 7){
                $coord_y_min = 1;
                $position_y = 1;
            }
            else{
                $coord_y_min = $_POST['pos_y'] - 7;
                $position_y = $_POST['pos_y'];
            }

            if($_POST['pos_x'] > 193){
                $coord_y_max = 200;
                $position_y = 200;
            }
            else{
                $coord_y_max = $_POST['pos_y'] + 7;
                $position_y = $_POST['pos_y'];
            }
        }
    }
    else{
        if($data2['position_x'] < 7){
            $coord_x_min = 1;
            $position_x = 1;
        }
        else{
            $coord_x_min = $data2['position_x'] - 7;
            $position_x = $data2['position_x'];
        }

        if($data2['position_x'] > 193){
            $coord_x_max = 200;
            $position_x = 200;
        }
        else{
            $coord_x_max = $data2['position_x'] + 7;
            $position_x = $data2['position_x'];
        }

        if($data2['position_y'] < 7){
            $coord_y_min = 1;
            $position_y = 1;
        }
        else{
            $coord_y_min = $data2['position_y'] - 7;
            $position_y = $data2['position_y'];
        }

        if($data2['position_x'] > 193){
            $coord_y_max = 200;
            $position_y = 200;
        }
        else{
            $coord_y_max = $data2['position_y'] + 7;
            $position_y = $data2['position_y'];
        }
    }

    $coord = $bdd->prepare('SELECT * FROM carte WHERE position_x = :position_x AND position_y = :position_y AND type = 1');
    $coord->execute([ 'position_x' => $position_x, 'position_y' => $position_y ]);
    $coord2 = $coord->fetch();

    $river_map = $bdd->prepare('SELECT * FROM carte WHERE type = 2');
    $river_map->execute();
    $river = $river_map->fetch();

    $no_user_map = $bdd->prepare('SELECT * FROM carte WHERE user = 0 AND type != 2 AND type != 3');
    $no_user_map->execute();
$num = $no_user_map->fetch();

    $user_map = $bdd->prepare('SELECT pseudo FROM user WHERE id = :id_player');
    $user_map->execute([ 'id_player' => $coord2['user'] ]);
    $user_map2 = $user_map->fetch();

    for($x = $coord_x_min; $x <= $coord_x_max; $x++){
        echo '<tr>';
            for($y = $coord_y_min; $y <= $coord_y_max; $y++){
                if($x == $data2['position_x'] && $y == $data2['position_y']){
                    echo '<td class="td_map"><a href="voir_terri.php?x='.$x.'&y='.$y.'">Vous</a></td>';
                }
                elseif($coord2['user'] != 0 && $coord2['user'] != $_SESSION['id']){
                    echo '<td class="td_map">';
                        echo $x.'-'.$y;
                        echo '<br>'.$user_map2['pseudo'];
                    echo '</td>';
                }
                elseif($x < 4 || $x > 196 || $y < 4 || $y > 196){ echo '<td class="td_map_mer"></td>'; }
                elseif($num['user'] == 0){ echo '<td class="td_map">'.$x.'-'.$y.'</td>'; }
                else{
                    for($i = 0; $i <= $river_map->count(); $i++){
                        if($river['position_x'] == $x && $river['position_y'] == $y){ echo '<td class="td_map_river"></td>'; }
                    }
                }
            }
        echo '</tr>';
    }
?>

La carte s'affiche normalement. Il y a juste le problème de la ligne unique de la requête. (Et même la case river map ne s'affiche pas)

Merci pour votre future aide.

Aucune réponse