Du hast wirklich noch Grundlagen im Umgang mit Datenbanken dringend nötig, da muß ich Bandit recht geben.
$sql="SELECT username FROM users";
$resultat=$db->query($sql);
echo $db->error."<br>";
$ergeb=$resultat->fetch_array();
echo $db->error."<br>";
foreach($ergeb as $name) {
if ($name==$user) {
$content="<font color='#EE0505'>registration faild</font><br><a>->Username already in use</a><br><br><center><a href='index.php?page=register'>back</a></center>";
$go=false;
}
}
Alles anzeigen
So, nehmen wir mal an deine Tabelle users sieht so aus:
In $resultat hast du dann nach dem Ausführen deines Queries eine Resource-Id zu einem Ergebnis mit der kompletten Liste aller User.
Aber du rufst nur die erste Zeile ab.
$db->query() liefert dir nur eine Ergebnis-Resource, die Ergebniszeilen aus dieser Resource musst du aber einzeln nacheinander mit $resultat->fetch_array() abholen.
Was dein Code macht:
Er feuert mit $db->query() die Abfrage raus und speichert die Ergebnis-Resource in $resultat.
Dann holst du mit $resultat->fetch_array() nur die erste Zeile aus deinem Ergebnis ab, also den Namen Peter aus meiner Beispieltabelle.
Dein Array $ergeb sieht dann so aus:
Mehr steht da nicht drin. Das heißt deine Überprüfung checkt nur den ersten Namen der von deiner Abfrage zurückgegeben wird. Alle anderen können dann so oft eingetragen werden wie sie wollen. Also Sinn voll verfehlt.
Wenn du dir auch nur ein vernünftiges Tutorial zum Umgang mit PHP und MySQL richtig angesehen hättest wüßtest du das.
Ganz davon abgesehen ist deine Lösung von der Performance her katastrophal. Wieso denn bitte alle User auslesen und dann mit PHP durchlaufen zum vergleichen? SQL ist viel schneller als PHP, alles was sich irgendwie schon vor der Bearbeitung durch PHP mit SQL filtern lässt sollte man auch tun.
D.h. du erweiterst deine SELECT-Abfrage um eine WHERE-Klausel (SELECT username FROM users WHERE username='$user'). Wenn du jetzt eine Ergebniszeile zurückbekommst ist der Name bereits vergeben, wenn du keine zurück bekommst ist er noch frei.
Achja, und nur weil du mysqli verwendest kannst du nicht auf das escapen der Usereingaben verzichten. Entweder den real_escape_string drüberlaufen lassen oder prepared Statements verwenden.