MYSQLi SELECT funktioniert nicht (gibt nichts aus)

  • Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!
2 August 2017
118
1
18
21
#1
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)?
 

m.scatello

Aktives Mitglied
15 Februar 2017
816
84
28
#2
Zustimmungen: Timer
2 August 2017
118
1
18
21
#3
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.
 
2 August 2017
118
1
18
21
#5
@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
 
2 August 2017
118
1
18
21
#10

m.scatello

Aktives Mitglied
15 Februar 2017
816
84
28
#11
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";
?>
 
2 August 2017
118
1
18
21
#12
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?
 

threadi

Moderator
Team
Moderator
20 Oktober 2006
15.279
289
83
Leipzig
www.comedy-news.de
#14
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
 
2 August 2017
118
1
18
21
#15
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...
 

threadi

Moderator
Team
Moderator
20 Oktober 2006
15.279
289
83
Leipzig
www.comedy-news.de
#16
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.
 
2 August 2017
118
1
18
21
#17
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>
 
2 August 2017
118
1
18
21
#19
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.