• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MYSQLi SELECT funktioniert nicht (gibt nichts aus)

Timer

Mitglied
Hey,
ich habe gerade eine Datenbank erstellt, in der eine Tabelle ist mit einer Zeile und 3 Spalten (number, users, money). Daraus wollte ich nun über zwei Funktionen die Daten users und money abfragen (die eine Funktion gibt users aus, die andere money). Der number Wert ist in der einzigen Zeile 0.
Leider wird über PHP echo nichts ausgegeben. Das Verbinden gibt keine Fehler aus und wie man die Select Errors abfragt finde ich leider nicht (zumindest keine Methode, die funktioniert)
mysql.php:
PHP:
<?php
ini_set("default_socket_timeout", 6000);
$servername = "localhost";
$username = "username";
$password = "abc1234";
$dbname = "datenbank-name";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    ?><script>alert("Connection to database failed. Please try it later again or contact the support.")</script><?php
    die("Connection failed: " . $conn->connect_error);
}
?>
stats.php:
PHP:
<?php
    include("php/mysql.php");
    $sql = "SELECT `users`, `money` FROM `stats` WHERE number = 0";
    $result = $conn->query($sql);
    function statsPeople() {
        echo $result["users"];
    }
    function statsMoney() {
        echo $result["money"];
    }
?>
HTML:
<html>
<head>


</head>
<body>
    <?php include("php/stats.php"); ?>

        <div id="live-stats">
            <p id="live-stats-title">Live Stats</p>
            <hr>
            <ul id="stats-people" class="stats-blocks">
                <?php statsPeople(); ?>
            </ul>
            <ul id="stats-placeholder"></ul>
            <ul id="stats-money" class="stats-blocks">
                <?php statsMoney(); ?>
            </ul>
        </div>
</body>
</html>
Weiß jemand, wie ich die Errors abfragen kann oder was ich da falsch gemacht hab (kann gut sein, dass ich da ein paar Fehler drinnen hab, da ich für Select mit Where kein Tutorial gefunden hab)?
 
Werbung:
Ok das wusste ich nicht, dass das $result mit in die function muss. Nun kommt wenigstens eine Fehlermeldung:

  • Warning: mysqli::query() [mysqli.query]: Empty query in /users/spielberger-dev/www/php/stats.php on line 6
Ich habe die stats.php file noch wie folgend abgeändert:
PHP:
<?php
    include("php/mysql.php");
    $sql = "SELECT `users`, `money` FROM `stats` WHERE 1";
    function statsPeople() {
        global $conn;
        $result = $conn->query($sql);
        echo $row['users'];
    }
    function statsMoney() {
        global $conn;
        $result = $conn->query($sql);
        echo $row['money'];
    }
?>
Leider hat nichts gegen den Fehler geholfen, was ich gefunden habe.
 
Werbung:
Wie soll das auch funktionieren? An welcher Stelle führst Du denn die Funktionen statsPeople() und statsMoney() aus?
 
@threadi
HTML:
            <ul id="stats-people" class="stats-blocks">
                <?php statsPeople(); ?>
            </ul>
            <ul id="stats-placeholder"></ul>
            <ul id="stats-money" class="stats-blocks">
                <?php statsMoney(); ?>
            </ul>
Habe ich aber eigentlich auch schon oben reingeschrieben
 
Ok, ist weiterhin kein kompletter Code, aber das Problem ist doch eigentlich klar erkennbar. Woher sollen die Funktionen wissen, dass es die $sql Variable gibt?
 
Werbung:
Warum willst du da unbedingt mit Funktionen arbeiten? Und globale Variablen sollte man vermeiden.
 
Nochmal: warum willst du da unbedingt mit Funktionen arbeiten? Und globale Variablen sollte man vermeiden.
 
Werbung:
Warum willst du da unbedingt mit Funktionen arbeiten? Und globale Variablen sollte man vermeiden.
Wie soll ich es sonst machen, wenn nicht mit Funktionen?
Wie soll ich das sonst am besten machen, wenn nicht mit globalen Variablen? Ich will (da ich die Datenbank mehrere male benutze) die Zugangsdaten ($conn) alles in eine File packen
 
PHP:
<?php
    include("php/mysql.php");
    
    $sql = "SELECT `users`, `money` FROM `stats`";
    
    $result = $conn->query($sql)
      or die("MySQL-Error: " . $conn->error);
      
    while ($data = $conn->fetch_row())
       echo $data['users'] . " " . $data['money'] "<br>\n";
?>
 
Ich bräuchte die zwei Daten (users und money) getrennt voneinander. Geht das damit auch? Und ich bin mir nicht sicher, jedoch denke ich, dass ich dann die Datei stats.php includen müsste (da wo die Daten angezeigt werden sollen), damit die angezeigt werden oder?
 
Werbung:
Er meint es eher so:
PHP:
<?php
    include("php/mysql.php");
   
    $sql = "SELECT `users`, `money` FROM `stats`";
   
    $result = $conn->query($sql)
      or die("MySQL-Error: " . $conn->error);
      
   $moneylist = "";
   $userlist = "";
    while ($data = $conn->fetch_row()) {
       $moneylist .= "<li>".$data["money"]."</li>";
       $userlist.= "<li>".$data["users"]."</li>";
    }
?>
<ul id="stats-people" class="stats-blocks">
                <?php echo $userlist; ?>
            </ul>
            <ul id="stats-placeholder"></ul>
            <ul id="stats-money" class="stats-blocks">
                <?php echo $moneylist; ?>
            </ul>

Auch wenns für mich inhaltlich irgendwie keinen Sinn ergibt :D
 
ok danke. So wollte ich das. Leider wird immer noch kein Inhalt angezeigt.
Damit man da den Sinn dahinter erkennt: Das users soll anzeigen, wie viele Leute sich registriert haben und das money soll anzeigen für wie viel was gekauft wurde...
 
Werbung:
Also selbst wenn das der Sinn ist, ist es nicht logisch. Was ist wenn ein Nutzer mehrfach gekauft hat? Dann steht dessen Username mehrfach in der Liste. Und gleiches auch bei identischen Beträgen. Überleg dir lieber mal wie Du die Daten überhaupt auslesen musst damit du sie dann auch inhaltlich korrekt hast - die Ausgabe ist dann das kleinere Übel.

Und warum dir nichts angezeigt wird kann man ohne deine aktuelle Programmierung zu kennen nicht wissen.
 
Jeder User kann da nur einmal kaufen (ob schon gekauft ist, wird in den Userdaten (andere Tabelle) gespeichert). Das hab ich mir schon alles überlegt. Jetzt brauch ich nur noch eine funktionierende Ausgabe
Das einzige was sich geändert hat ist die stats.php:
PHP:
<?php
    include("php/mysql.php");
    $sql = "SELECT `users`, `money` FROM `stats`";
  
    $result = $conn->query($sql)
      or die("MySQL-Error: " . $conn->error);
       $moneylist = "";
       $userlist = "";
    while ($data = $result->fetch_row()) {
       $moneylist .= $data["money"];
       $userlist .= $data["users"];
    }
?>
und die index.php:
HTML:
<?php include(php/stats.php) ?>
        <div id="live-stats">
            <p id="live-stats-title">Live Stats</p>
            <hr>
            <ul id="stats-people" class="stats-blocks">
                <?php echo $userslist; ?>
            </ul>
            <ul id="stats-placeholder"></ul>
            <ul id="stats-money" class="stats-blocks">
                <?php echo $moneylist; ?>
            </ul>
        </div>
 
Schau dir die Variablennamen für die userliste mal genau an. Außerdem fehlt die von mir vorgeschlagene HTML-Auszeichnung.
 
Werbung:
Oh das habe ich direkt ausgebessert. Funktioniert leider immer noch nicht.

Ich denke mal, dass du das <li> meinst. Ich glaube, da hast du mich aber falsch verstanden. Ich habe in der Tabelle zwei Spalten und eine Zeile: users und money. Das soll anzeigen, wie viele User insgesamt was gekauft haben (für jeden Kauf (jeder kann nur einmal was kaufen) zählt es bei users (Zeile 1) +1) und wie viel insgesamt verdient wurde (für jeden Kauf wird bei money (Zeile 1) +Kaufbetrag)
Nun soll es die zwei Zahlen nebeneinander anzeigen. Ich glaube jedoch, dass das mit <li> dafür da wäre, wenn man die Userdaten (z.B. einzelne Namen der Leute) nebeneinander anzeigen lassen will.
 
Zurück
Oben