Sponsor-Board.de

Normale Version: Teamspeak 3 - PHP Framework - Problem
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
#Neues Problem - 13.01.2017

Hallo, nachdem ich es endlich geschafft habe, was ich wollte, habe ich nun ein neues Problem, bei der Abfrage ob eine bestimmte Servergruppe vorhanden ist, komme ich nicht weiter.

Unzwar, ich mag nämlich, dass Abgefragt wird, ob Servergruppe "6" (zum Beispiel) bereits der User hat, wenn ja, dann soll er keinen Channel mehr erstellen können, wenn nicht, dann soll er einen erstellen können...

Dabei geht es um folgende Codezeile:

Code:
if(!$ts3->clientGetByUid($clientuid)->serverGroupGetById($server_channel_group))


Er zeigt mir die ganze Zeit an, dass ich bereits einen Channel habe, obwohl ich keine habe(Hab bereits eine else function gemacht, was er machen soll, wenn er keinen Channel erstellen kann)

(Ich nutze das Teamspeak 3 PHP Framework)

Wenn das die Zeile ist:

Code:
while($daten = mysqli_fetch_array($res, MYSQL_ASSOC))


dann versuche folgendes

Code:
while($daten = $res->fetch_array(MYSQLI_ASSOC))


siehe: [Link: Registrierung erforderlich]

liebe Grüße

skillz schrieb:
Wenn das die Zeile ist:

Code:
while($daten = mysqli_fetch_array($res, MYSQL_ASSOC))


dann versuche folgendes

Code:
while($daten = $res->fetch_array(MYSQLI_ASSOC))


siehe: [Link: Registrierung erforderlich]

liebe Grüße


Hallo,
danke für Deine schnelle Antwort.
Leider wirft er mir nun folgende Fehlermeldung:
Fatal error: Uncaught Error: Call to a member function fetch_array() on boolean in *ZENSIERT* 42 Stack trace: #0 {main} thrown in *ZENSIERT* on line 42

Und nun bin ich irgendwie komplett mit meinem Alphabet am Ende.. Das ist bestimmt irgendein einfacher simpler Fehler... Mad

@ccoding: Das wirft dann folgenden Warning wieder:
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in *ZENSIERT* on line 42

MysteryGaming schrieb:

skillz schrieb:
Wenn das die Zeile ist:

Code:
while($daten = mysqli_fetch_array($res, MYSQL_ASSOC))


dann versuche folgendes

Code:
while($daten = $res->fetch_array(MYSQLI_ASSOC))


siehe: [Link: Registrierung erforderlich]

liebe Grüße


Hallo,
danke für Deine schnelle Antwort.
Leider wirft er mir nun folgende Fehlermeldung:
Fatal error: Uncaught Error: Call to a member function fetch_array() on boolean in *ZENSIERT* 42 Stack trace: #0 {main} thrown in *ZENSIERT* on line 42

Und nun bin ich irgendwie komplett mit meinem Alphabet am Ende.. Das ist bestimmt irgendein einfacher simpler Fehler... Mad


Okay, sorry. Schon lange her als ich blankes php mit MYSQL(i) genutzt habe Biggrin

Code:
while($daten = mysqli_fetch_array($res, MYSQL_ASSOC))

vielleicht reicht es wenn man MYSQL_ASSOC in MYSQLI_ASSOC abändert.
Würde zumindest von der Syntax Sinn machen.

Edit: soeben gesehen, doppelt Mad

Der Error kommt wenn du das i dran hängst? O.O

skillz schrieb:
Edit: soeben gesehen, doppelt Mad

Der Error kommt wenn du das i dran hängst? O.O


Ich habe nun das I hinten dran gehängt und er zeigt mir nun:

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in *ZENSIERT* on line 42

an.

Dann hänge dort, wo du dein Query executest mal ein or die($stmt->error) hintendran, dann kriegst du eine andere Meldung.

Ein Boolean als Result kriegst du bei einem Query nämlich nur, wenn etwas schiefläuft. Entweder sind deine Logincredentials für Mysql falsch oder deine Syntax vom SQL-Query ist falsch. Letzteres könntest du mal posten, solltest du dahin nicht weiterkommen

Dennis schrieb:
Dann hänge dort, wo du dein Query executest mal ein or die($stmt->error) hintendran, dann kriegst du eine andere Meldung.

Ein Boolean als Result kriegst du bei einem Query nämlich nur, wenn etwas schiefläuft. Entweder sind deine Logincredentials für Mysql falsch oder deine Syntax vom SQL-Query ist falsch. Letzteres könntest du mal posten, solltest du dahin nicht weiterkommen


Ich habe mal bisschen weiter versucht und konnte weitere Fehler beheben, nun zeigt er mir an, dass die Variable "daten" nicht definiert ist, dabei ist sie doch unter "while" definiert, oder wie genau ist das mit dem Definiert gemeint? (Bin ein absoluter Anfänger), bzw. ich wüsste nicht wie ich sie definieren sollte..

Hier das aktuelle Script:

Code:
<a href="createTsChannel.php">Neuen Channel anlegen</a>
<?php
require("ts3admin.class.php");
function checkChannel($cid,$channelList)
{
    if(isset($channelList[$daten['cid']]['user']) && $channelList[$daten['cid']]['user']!=0) return true;
    foreach($channelList as $key => $channel)
    {
        if(checkChannel($key,$channelList)) return true;
    }
}

    $link = mysqli_connect($server, $username, $passwort);
    if (!$link)            die(mysqli_error());
    $db = mysqli_select_db($link, $datenbank);
    if(!$db) die("keine Verbindung zur Datenbank");

    $tsAdmin = new ts3admin($ts3_ip, $ts3_queryport);
    $tsAdmin->connect();
    $tsAdmin->login($ts3_user, $ts3_pass);
    $tsAdmin->selectServer($ts3_port);
    $result = $tsAdmin->channelList();
    if(!$result['success'])
    {
        echo "Ein Fehler ist aufgetreten: ".$result['errors'][0];
    }
    else
    {
        foreach($result['data'] as $channel)
        {
            $channelList[$channel['cid']]['cname']=$channel['channel_name'];
            $channelList[$channel['cid']]['user']=$channel['total_clients'];
            $channelList[$channel['cid']]['cid']=$channel['cid'];
        }
    }
    $sql_befehl = 'SELECT * FROM Teamspeak ORDER BY cid;';
    $res= mysqli_query($link, $sql_befehl);
    echo '<table border=1>';
    echo '<tr><td>Name</td><td>Letzter User</td><td>wird gelöscht</td></tr>';
    while($daten = mysqli_fetch_array($res, MYSQLI_ASSOC))
    {
        if(isset($channelList[$daten['cid']]['user']) && checkChannel($daten['cid'],$channelList))
        {
            $sql='UPDATE Teamspeak SET zeit=NOW() WHERE cid='.$daten['cid'].';';
            mysqli_query($link, $sql);
            $daten['zeit']=date('Y-m-d H:i:s');
        }
        else if(!isset($channelList[$daten['cid']]['user']))
        {
            $sql='DELETE FROM Teamspeak WHERE cid='.$daten['cid'].';';
            mysqli_query($link, $sql);
        }
        if(strtotime($ttl,strtotime($daten['zeit']))>strtotime('-1second'))
        {
            if(strtotime($ttl,strtotime($daten['zeit']))<strtotime('+5days')) $loeschen=date('d.m.Y H:i',strtotime($ttl,strtotime($daten['zeit'])));
            else $loeschen='-';
            echo '<tr><td>'.$daten['cname'].'</td><td>'.date('d.m.Y H:i',strtotime($daten['zeit'])).'</td><td>'.$loeschen.'</td></tr>';
        }
        else
        {
            $tsAdmin->channelDelete($daten['cid']);
            $sql='DELETE FROM Teamspeak WHERE cid='.$daten['cid'].';';
            mysqli_query($link, $sql);
        }
    }
    echo '</table>';
    mysqli_close($link);
?>




#EDIT
Ich habe in einer Richtung denke den Fehler gefunden, das Problem liegt darin:
Wenn der Channel auf dem TS wirklich existiert, den man zuvor erstellt hat, dann wird er diesen Fehler, wenn dieser Channel aber nicht existiert, aber in der Datenbank als existierend eingetragen ist, dann zeigt er die Seite ohne Fehler oder Warnings an. Woran könnte dies liegen ?

#EDIT2
Meine MySQL-Tabelle:

Code:
-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Erstellungszeit: 09. Jan 2017 um 23:12
-- Server-Version: 10.1.19-MariaDB
-- PHP-Version: 5.6.28

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Datenbank: `teamspeak`
--

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `teamspeak`
--

CREATE TABLE `teamspeak` (
  `cid` int(10) UNSIGNED NOT NULL,
  `cname` char(128) NOT NULL,
  `zeit` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

pushmessage
pushmessage
Referenz-URLs