WinFuture-Forum.de: Erstellen einer User-Übersicht - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Erstellen einer User-Übersicht


#1 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 28. Mai 2012 - 20:02

Hallo alle zusammen,

ich hab mal wieder ein Problemchen mit PHP und MYSQL...
Folgendes:

Ein User der sich auf meiner Seite registriert und dann einloggt wird zu seinem Profil weitergeleitet. Als Link ist dann index.php?page=mitglieder&ID=1 angegeben. Wobei die ID am Ende je nach USer natürlich anders ist. Soweit sogut...
das läuft alles sehr gut... jetzt will ich aber, dass die User die anderen Profile einsehen können und so hab ich auf der Profilseite eine Auflistung mit allen Usernamen gemacht.
Jetzt weiß ich nur nicht so ganz, wie ich zu jedem Profil den passenden Link setzen kann :unsure:

Im Prinzip soll ja wenn der Benutzername ausgegeben wird ein Link (s.o.) mit seiner jeweiligen ID in der Liste stehen und nicht nur ein Name... Ich weiß nur nicht wie ich den Namen mit der ID verbinden soll...

folgendes steht bei mir:

Die Mitgliederseite:
<?php
session_start();
$userid =$_GET['ID'];
require_once('mysql/connect.php');
$query = mysql_query("SELECT * FROM login WHERE ID='$userid'");
while($row = mysql_fetch_assoc($query))
{
	$benutzer = $row['benutzer'];
	$alter = $row['alter'];
	$interessen = $row['interessen'];
}
if ($_SESSION['login']==true)
{
	echo "<h1>Mitgliederbereich</h1>";
	echo "Willkommen <strong>".$_SESSION['login']."</strong>  <a href='index.php?page=logout'>Logout</a>";

	if ($benutzer==$_SESSION['login'])
	{
		echo "<h3>Mein Profil</h3><br />";
		echo "Nickname: <strong>$benutzer</strong><br />
		Alter: <strong>$alter</strong><br />
		Interessen: <strong>$interessen</strong><br /><hr />";
		echo "<h1>Mitglieder</h1>";
		include('mitglieder/mitglieder_liste.php');
	}
	else
	{
		echo "<h3>Profil von: $benutzer</h3>
		<br />
		Nickname: <strong>$benutzer</strong><br />
		Alter: <strong>$alter</strong><br />
		Interessen: <strong>$interessen</strong><br /><hr />";
		echo "<h1>Mitglieder</h1>";
		include('mitglieder/mitglieder_liste.php');
	}
}
else
{
	echo "<h1>Mitglieder</h1>";
	include('mitglieder/mitglieder_liste.php');
}
?>


und die mitglieder_liste:
<?php
mysql_connect('localhost','root','passwort') or die();
mysql_select_db('minecraftnoobs') or die();

$query = mysql_query("SELECT * FROM login");
while($row = mysql_fetch_assoc($query))
{
	$benutzer = $row['benutzer'];
	$id = $row['ID'];
}
$abfrage = mysql_query("SELECT * FROM login");
while($daten = mysql_fetch_object($abfrage))
{
	$profil = $daten->benutzer;
	$profilbild = $daten->pb;
	echo "<div id='mitglieder'>";
	echo "<a href='index.php?page=mitglieder&ID=$id'>".$profil." </a>"."<hr /><br />".$profilbild;
	echo "</div>";
}
echo "<br clear='both' />";

?>


Ich hoffe jemand versteht mein Problem :rolleyes: und kann mir helfen :)
0

Anzeige



#2 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.111
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 28. Mai 2012 - 20:08

Nee das Problem verstehe ich nicht. Wenn du die Userdatenbank abfragts, hast du doch alle Datensätze zu jedem User.
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#3 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.288
  • Beigetreten: 08. April 06
  • Reputation: 884
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 28. Mai 2012 - 20:22

Wie ist denn die ID vergeben? Nummerisch ansteigend?

Dann würd' ich das mit ner Do-Loop-Schleife machen.

Vorher die aktuell letzte existierende ID laden und dann wie im Schemata:

Grad nicht die Zeit es zu frickeln daher das Schema nur grob:

Auslesen maximale ID = MAX_ID
Setzen ID = 1
DO ID = ID + 1

>>>> DEINE AUSGABE <<<<<

LOOP WHILE ID = MAX_ID



:wink:

Dieser Beitrag wurde von Stefan_der_held bearbeitet: 28. Mai 2012 - 20:23

0

#4 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 28. Mai 2012 - 20:40

Beitrag anzeigenZitat (Holger_N: 28. Mai 2012 - 20:08)

Nee das Problem verstehe ich nicht. Wenn du die Userdatenbank abfragts, hast du doch alle Datensätze zu jedem User.


Ja die Daten hab ich alle... ich weiß halt nur nicht wie ich dem sagen soll wie er im Link zum Benutzerprofil automatisch -also per Variable- die ID ändert...

Beitrag anzeigenZitat (Stefan_der_held: 28. Mai 2012 - 20:22)

Wie ist denn die ID vergeben? Nummerisch ansteigend?

Dann würd' ich das mit ner Do-Loop-Schleife machen.

Vorher die aktuell letzte existierende ID laden und dann wie im Schemata:

Grad nicht die Zeit es zu frickeln daher das Schema nur grob:

Auslesen maximale ID = MAX_ID
Setzen ID = 1
DO ID = ID + 1

>>>> DEINE AUSGABE <<<<<

LOOP WHILE ID = MAX_ID



:wink:


Ja die ID beginnt bei 1 und hat die Einstellung AI (AUTO_INCREMENT)

so ganz versteh ich dein Beispiel nicht... also das erste würde für mich heißen mysql_query("SELECT max(ID) FROM login");
Was du aber mit dem andern meinst versteh ich nicht so ganz...:unsure:
0

#5 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.288
  • Beigetreten: 08. April 06
  • Reputation: 884
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 28. Mai 2012 - 21:08

Na deine Variante hört beim ersten Datensatz auf wenn ich das richtig sehe.

Bin SQL-mäßig etwas aus der Übung... AI heißt doch automatich zählen oder war das ein Zufallswert?

beim ersteren wärs genjal und für meinen "Fetzen" korrekt

while($daten = mysql_fetch_object($abfrage)){        
$profil = $daten->benutzer;        
$profilbild = $daten->pb;        
echo "<div id='mitglieder'>";        
echo "<a href='index.php?page=mitglieder&ID=$id'>".$profil." </a>"."<hr /><br />".$profilbild;        echo "</div>";}



hört ja beim ersten auf.

Das heißt VORHER musst du fetlegen/auslesen was derzeit die höchste ID ist (ID_MAX). Dann setzt du einmal die ID auf 1 (für den ersten Datensatz) und lässt diesen pro DO-LOOP-Durchlauf um 1 wachsen bis ID = ID_MAX ist. Somit wird die schleife solange wiederholt bis alle User gelistet wurden.
0

#6 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 28. Mai 2012 - 21:23

Hmmm.... ja ich weiß wie du das meinst. Ich guck mal ob ich das jetzt auch hin bekomme :lol: do loop muss ich mir erstmal etwas genauer anschauen, glaub ich.

EDIT:

So die IDs steigen jetzt... nur kommt jetzt jedes Profil so oft vor, wie es maxIDs gibt :(

Wüsste jetzt nicht, was ich in/an der Schleife ändern muss...

<?php
mysql_connect('localhost','root','passwort") or die();
mysql_select_db('minecraftnoobs') or die();

$query = mysql_query("SELECT MAX(ID) AS idmax FROM login");
while($row = mysql_fetch_assoc($query))
{
	$idmax = $row['idmax'];
}
$abfrage = mysql_query("SELECT * FROM login");
while($daten = mysql_fetch_object($abfrage))
{
	$profil = $daten->benutzer;
	$profilbild = $daten->pb;
	$id = 1;
	
	do{
		echo "<div id='mitglieder'>";
		echo "<a href='index.php?page=mitglieder&ID=$id'>".$profil."</a>"."<hr /><br />".$profilbild;
		echo "</div>";
		$id++;
	}while($id <= $idmax);
	
}
echo "<br clear='both' />";

?>


Also ich bekomme 4x User 1 mit allen Links (ID 1-4 am Ende), 4x User 2, 4x User 3 usw.

Dieser Beitrag wurde von J000S bearbeitet: 28. Mai 2012 - 22:37

0

#7 Mitglied ist offline   N1truX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.823
  • Beigetreten: 06. Juli 06
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Berlin
  • Interessen:Bei WF vorbeischauen, Webprogrammierung, mit Freunden treffen oder irgendwas anderes...

geschrieben 29. Mai 2012 - 07:55

Ich verstehe dein gesamtes Kontrukt nicht? Was willst du mit dem Max-Wert und warum um alles in der Welt zwei Abfragen?

Auch wenn man nur in der Schule mal kurz Informatik hatte, sollte man sich (anfangs auch für simple Sachverhalte) einen Ablaufplan zurechtlegen, dann wird es wesentlich klarer was zu tun ist.

  • Was willst du haben? - Eine Auflistung aller Nutzer mit Link zum Profil.
  • Was brauche ich dafür? - Eine Abfrage aus der Datenbank mit allen ID´s und den zugehörigen Namen.


Das ganze lässt sich doch fix umsetzen:
<?php
$db = @new mysqli('localhost','root','passwort', 'minecraftnoobs'[, Port-Nummer]);

if (!$db->set_charset("utf8")) Die("Error: ".$mysqli->error); 
if (mysqli_connect_errno() != 0) Die("Uuuups, ein Fehler...");


$query  	= "SELECT `ID`, `benutzer`, `pb` FROM `login`";
$html		= '';

if ($result = $db->query($query)) {

    while ($obj = $result->fetch_object()) {
        $id = $obj->id;
        $profil = $obj->benutzer;
        $profilbild = $obj->pb;

        $html .= '<div id="mitglieder">'."\n";
        $html .= '<a href="index.php?page=mitglieder&ID='.$id.'">'.$profil.'</a>'.'<hr /><br />'."\n";
        $html .= $profilbild.'</div>'."\n";
		
    }

    $html .= '<br clear="both" />';
	
    echo $html;

}

else Die('Es ist ein interner Fehler aufgetreten.');

?>



Mal abgesehen davon hast du in deinem obrigen code ein Paradebeispiel für eine mögliche SQL-Injection. Du übergibst hier ungefiltert eine Nutzervariable an die Datenbank:
$userid =$_GET['ID'];
...
$query = mysql_query("SELECT * FROM login WHERE ID='$userid'");


Dieser Beitrag wurde von N1truX bearbeitet: 29. Mai 2012 - 08:04

PC: AMD FX-8150 | Sapphire Radeon HD 5770 @OC-Bios | GA-990XA-UD3 - 4x4 GB DDR3-2133 | OCZ Agility II 128 GiB SSD (OS) & 10 TB-Storage-Server | Win7 Professional x64
NB: Sony Vaio VPCYB16 - AMD Fusion E-350 - 1x4 GiB Kingston DDR3-1333 - 64 GiB Super*Talent SSD
0

#8 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 29. Mai 2012 - 10:05

Ah danke schön. So läuft es :)

Das mit der Injection muss ich nochmal googeln. Wüsste jetzt nicht, wie ich das Filtern soll.
0

#9 Mitglied ist offline   N1truX 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.823
  • Beigetreten: 06. Juli 06
  • Reputation: 2
  • Geschlecht:Männlich
  • Wohnort:Berlin
  • Interessen:Bei WF vorbeischauen, Webprogrammierung, mit Freunden treffen oder irgendwas anderes...

geschrieben 29. Mai 2012 - 10:15

Beitrag anzeigenZitat (J000S: 29. Mai 2012 - 10:05)

Das mit der Injection muss ich nochmal googeln. Wüsste jetzt nicht, wie ich das Filtern soll.

Ich habe dir ja schon den Wikipedia-Artikel verlinkt, darin stehen bereits brauchbare Möglichkeiten die sich schnell implementieren lassen. Bei PHP lässt sich dies mit der Funktion "real_escape_string" auch bei bestehenden Code schnell einfügen. Wer neuen Code schreibt, wird meistens eh direkt Objektorientiert programmieren und da bietet sich dann z.B. die Nutzung von Prepared Statements via MySQLi an.

Solltest du deine Seite aktuell bereits so am Netz haben, würde ich dir stark empfehlen diese vorübergehend abzuschalten. Andernfalls ist das ein weit offenes Tor für diverse Angriffe...

PS: Das gilt natürlich auch für dein Anmeldescript aus dem anderen Thread.

Dieser Beitrag wurde von N1truX bearbeitet: 29. Mai 2012 - 10:16

PC: AMD FX-8150 | Sapphire Radeon HD 5770 @OC-Bios | GA-990XA-UD3 - 4x4 GB DDR3-2133 | OCZ Agility II 128 GiB SSD (OS) & 10 TB-Storage-Server | Win7 Professional x64
NB: Sony Vaio VPCYB16 - AMD Fusion E-350 - 1x4 GiB Kingston DDR3-1333 - 64 GiB Super*Talent SSD
0

#10 Mitglied ist offline   J000S 

  • Gruppe: aktive Mitglieder
  • Beiträge: 2.051
  • Beigetreten: 13. Juni 09
  • Reputation: 38
  • Geschlecht:Männlich
  • Wohnort:C:\Home
  • Interessen:Computer, Feuerwehr, Sport

geschrieben 29. Mai 2012 - 11:06

Bisher läuft die Seite noch lokal bei mir :)

Werd mich aber schnellst möglich mit befassen.

Danke.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0