Bonjour/Bonsoir.

Je vous explique mon problème ci-dessous :

Enfaîte dans mon administration j'ai une page pour gérer mes membres et dans cette page j'ai un tableau avec les Pseudo, Rôle (ex: Admin) et les Options (Bannir & OP), quand je veux op un membre il me op tout les autres membres avec.

Mon code ci-dessous :

<?php
require_once('../includes/config/bdd.php');

require_once('../includes/config/config_jsonapi.php');

    $reqM = $bdd->query('SELECT * FROM users WHERE id');
    $nbrM = $reqM->rowCount();

    if($nbrM > 0){
        while ($selectUsers = $reqM->fetch()) {

if($_GET['op'] == 1){
    $opPlayer = $api->call('opPlayer', array($selectUsers['realname']));

}

?>

<!DOCTYPE html>
<html>
<head>
    <title>HighLobby | Administration</title>
    <meta charset="utf-8">
</head>
<body>
<div class="tab_members">
        <center>
        <table>
            <tr>
                <th>Pseudo</th>
                <th>Rôle</th>
                <th>Options</th>
            </tr>
            <tr>
                <td><?php echo $selectUsers['realname']; ?></td>
                <td><?php if($selectUsers['rang'] == 3){ echo "Administrateur";
                    }elseif ($selectUsers['rang'] == 2) {echo "Modérateur";
                    }else{echo "Membres";} ?></td>
                <td><a href="manage_members.php?id=<?php echo $selectUsers['id']; ?>&ban=1">Bannir</a> | <a href="manage_members.php?op=1">OP</a></td>
            </tr>
        </table>
        </center>
    <?php }} ?>
    </div>
</body>
</html>

Puis j'ai une petit erreur en php mais sa rien à voir c'est : Undefined index op.

Je vous remercie d'avance, bonne journée/soirée.
Cordialement, Siak.

16 réponses


Benjamin Derepas
Réponse acceptée

En gros, sur une seule page tu veux :

  • afficher tous les membres, avec pour chaque un bouton pour les bannir/op
  • récupérer l'id du membre que tu veux bannir/op grâce au lieu

C'est bien ça ? Alors rien de plus simple :
fichier manage_members.php

<?php
// pour récupérer TOUS les utilisateurs, et les afficher, avec un lien permettant de bannir tel ou tel utilisateur : 
$allPlayers = $bdd->query('SELECT * FROM authme');
while ($player = $allPlayers->fetch()):?>
        <tr>
            <td><?php echo $player['nom']; ?></td>
            <td><?php echo $player['rang']; ?></td>
            ....
            <td>    <a href="manage_members.php?action=op&id=<?php echo $player['id']; ?>">OP ce membre</a> </td>
<?php endwhile;?>

<?php
// pour bannir / op un utilisateur spécifique après l'ouverture du lien çi dessus : 
if(isset($_GET['action')){
    if($_GET['action'] == "op"){
        if(!empty($_GET['id'])){
            $ip_to_ban = $_GET['id'];
            $api->call('opPlayer', array($selectUsers['realname'], $ip_to_ban)); // en toute logique, là tu appelles l'api ,et plus particulièrement la methode "opPlayer" et tu lui transmet l'ID de l'utilisateur à bannir/op
        }
    }
}
?>
Nouky
Réponse acceptée

Bonjour,
SI je peux me permettre, il me semble que la methode opPlayer demande le 'realname' et l'id.
Je pense que comme ca, le code de cid5420 doit marcher correctement.

<?php
// pour récupérer TOUS les utilisateurs, et les afficher, avec un lien permettant de bannir tel ou tel utilisateur : 
$allPlayers = $bdd->query('SELECT * FROM authme');
while ($player = $allPlayers->fetch()):?>
        <tr>
            <td><?php echo $player['nom']; ?></td>
            <td><?php echo $player['rang']; ?></td>
            ....
            <td>    <a href="manage_members.php?action=op&id=<?php echo $player['id']; ?>&realname=<?php echo $player['realname']; ?>">OP ce membre</a> </td>
              <td>    <a href="manage_members.php?action=ban&id=<?php echo $player['id']; ?>&realname=<?php echo $player['realname']; ?>">BAN ce membre</a> </td>
<?php endwhile;?>

<?php
// pour bannir / op un utilisateur spécifique après l'ouverture du lien çi dessus : 
if(isset($_GET['action')){
    if($_GET['action'] == "op"){
        if(!empty($_GET['id']) && !empty($_GET['realname'])){
            $id = $_GET['id'];
            $realname = $_GET['realname'];
            $api->call('opPlayer', array($realname, $id)); // en toute logique, là tu appelles l'api ,et plus particulièrement la methode "opPlayer" et tu lui transmet l'ID de l'utilisateur à bannir/op
        }
    }
    else if($_GET['action'] == "ban"){
        if(!empty($_GET['id']) && !empty($_GET['realname'])){
            $id = $_GET['id'];
            $realname = $_GET['realname'];
            // tu n'as pas appelé l'api pour ban un joueur sur le code au départ donc je ne sais pas quoi mettre ici.
        }
    }
}
?>

il ne reste plus qu'à ajouter l'action ban (tu ne la pas mis sur le code au debut).

Edit : oups j'ai pas vu ton message Benjamin mais bon, maintenant qu'il est fait ...

Bonsoir, il manque l'id du joueur dans la requête.

ImSiak
Auteur

Bonsoir Carouge10, je l'ai rajouté sa me OP quand même tout les membres..

$reqM = $bdd->query('SELECT * FROM users WHERE id');
Déjà ici ta requête est problématique, car tu n'appose aucune condition (ex : where id = $variable).

Ensuite dans ton liens :

<a href="manage_members.php?id=<?php echo $selectUsers['id']; ?>&ban=1">Bannir</a> | <a href="manage_members.php?op=1">OP</

Le script pour op pointe vers aucun utilisateur ... Il faudrait faire ça :

 <a href="manage_members.php?op=1&id=<?= $selectUsers['id']; =?>">OP</a>
ImSiak
Auteur

C'est gentil mais tu veux que je définisse quoi dans ma $variable.. un intval ?

Bah tu as un lien du type

<a href="manage_members.php?op=1&id=<?= $selectUsers['id']; ?>">OP</a>

Donc sur la page cible, tu récupère $_GET['id'], ce qui correspond à ta variable !
Pour info si tu mets WHERE dans ta requête, tu es obligé de donner une condition, WHERE id ne veut rien dire !
(selectionne tout dans la table users quand id)??????

Autre remarque, tu arrive a voir tout les utilisateurs avec ce code? Il manque un bout de code non???

C'est moi ou tu n'a déjà aucune boucle pour afficher les utilisateurs ?
Ensuite, comme on te l'a dit, si tu veux envoyer bannir (ou autre fonction) un utilisateur il te faut son id , ex :

function delete($id)
{
    $api->delete($id);
}

Donc tu dois avoir un lien un peu comme ça : <a href="script.php?action=delete&id=54">Bannir le membre 54</a>.
Et coté serveur, tu vérifies si l'action est passée (en GET), et qu'elle n'est pas vide, puis tu vérifies si l'id est aussi passée (en GET toujours) et voilà :)

ImSiak
Auteur

J'ai fait quelques changement, maintenant il me op que la personne choisis mais parcontre il ne m'affiche plus les membres..
Pour tant j'ai juste défini id et changer ma requête

Nouveau code :

<?php 
require_once('../includes/config/bdd.php');

require_once('../includes/config/config_jsonapi.php');

if(isset($_GET['id']) AND $_GET['id'] > 0){
    $getid = intval($_GET['id']);
    $reqM = $bdd->prepare('SELECT * FROM authme WHERE id = ?');
    $reqM->execute(array($getid));
    $nbrM = $reqM->rowCount();

    if($nbrM > 0){
        while ($selectUsers = $reqM->fetch()) { 

if($_GET['op'] == 1){
    $opPlayer = $api->call('opPlayer', array($selectUsers['realname'], $selectUsers['id']));

}

 ?>

<!DOCTYPE html>
<html>
<head>
    <title>HighLobby | Administration</title>
    <meta charset="utf-8">
</head>
<body>
<div class="tab_members">
        <center>
        <table>
            <tr>
                <th>Pseudo</th>
                <th>Rôle</th>
                <th>Options</th>
            </tr>
            <tr>
                <td><?php echo $selectUsers['realname']; ?></td>
                <td><?php if($selectUsers['rang'] == 3){ echo "Administrateur";
                    }elseif ($selectUsers['rang'] == 2) {echo "Modérateur";
                    }else{echo "Membres";} ?></td>
                <td><a href="manage_members.php?id=<?php echo $selectUsers['id']; ?>&ban=1">Bannir</a> | <a href="manage_members.php?id=<?php echo $selectUsers['id']; ?>&op=1">OP</a></td>
            </tr>
        </table>
        </center>
    <?php }}} ?>
    </div>
</body>
</html>
ImSiak
Auteur

Le code est bon sauf que quand je clique sur op le realname est en null alors que avant il y avait le pseudo qui était là...

euhhh comment ça tu veux enregistrer le pseudo ? ou c'est pour l'affichage ? j'ai un peut du mal a suivre !!!

ImSiak
Auteur

Enfaîte je sais pas si tu connais Minecraft son mode de fonctionnement, la je veux aussi afficher les pseudo donc sa c'est bon mais enfaîte quand je clique sur op j'ai un message dans ma console de minecraft de jsonapi me disant que l'id celle-ci est bon mais pour ce qui est du pseudo il est en null @cid5420

Non je ne connais pas ! si tu as l'id de l'utilisateur, tu fais une requete pour chercher l'utilisateur avec l'id ! et ensuite tu pourras afficher le pseudo

Dahael, les codes que cid5420 et moi même t'avons donnés sont correctes, on t'a largement donné la piste, maintenant relis ton code à tête reposée et tu comprendra d'où viens ton erreur.
Sinon je t'invite à relire le chapitre sur les variables $_GET .

ImSiak
Auteur

Merci Benjamin Derepas