Userprofile

DrySolution

Grünschnabel
Hallo tutorials.de Community.

Ich habe folgendes Problem:
Ich arbeite seit mehreren Stunden an einem Profilscript, welches alle Benutzer auflistet (das hat soweit geklappt)

PHP:
<h1>Folgende Benutzer haben sich bereits registriert:</h1>
<table style="margin: 0 auto;">
    <colgroup>
        <col width="250" span="12">
    </colgroup>
    <tr>
        <th align='left'>ID:</th>
        <th align='middle'>Username:</th>
        <th align='right'>Email-Adresse</th>
    </tr>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "access";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM user";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "
    <tr>
        <td align='left'><a href='files/content/profile.php?user=" . $row["user_id"]. "'>" . $row["user_id"]. "</a></td>
        <td align='middle'>" . $row["user_name"]. "</a></td>
        <td align='right'>" . $row["user_email"]. "</td>
    </tr>
";
    }
}
?>
</table>

Nun möchte ich es so machen, wenn man auf die ID eines Benutzers klickt, dass man dann das Profil des Benutzers sehen kann.
Ich habe schon andere Wege probiert, aber jedes mal wurden entweder alle Profile geladen oder nur das des derzeit eingeloggten Benutzers.
PHP:
<?php session_start()?>
<?php  
    if(isset($_GET["section"]))
    {
        $section = $_GET["section"];
    }
    else
    {
        $section = "";
    }
?>
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "access";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM user ";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
?>
<?php if("". $row["user_name"]."") { ?>
<html>
    <head>
        <title>Profil von <?php echo "".$row["user_name"]."" ?></title>
        <link rel="stylesheet" type="text/css" href="../css/style.css">
        <meta charset="utf-8">
    </head>
    <body>
        <div id="wrapper">
            <div id="header">
                <?php include('../basis/header.php') ?>
            </div>
            <div id="nav">
                <ul>
                    <li><a href='../../index.php?section=home'>Startseite</a></li>
                    <li><a href="../../index.php?section=chat">Chaträume</a></li>
                    <li><a href="../../index.php?section=news">Neuigkeiten</a></li>
                    <li><a href="../../index.php?section=forum">Forum</a></li>
                    <li><a href="../../index.php?section=userlist">Userliste</a></li>
                    <li><a href="../content/profile.php?user=<?php echo "". $row["user_name"]."" ?>&&id=<?php echo "". $row["user_id"]."" ?>">Profil</a></li>
                    <li><a href="../login/logout.php">Logout</a></li>
                </ul>
            </div>
            <div id="content">
                <?php include('sites.php');?>
                <div id="profil_wrapper">
                    <div id="profil_header">
                        <?php echo "<p>Das ist das Profil von ". $row["user_name"]." </p>" ?><?php echo "<br>"?>
                    </div>
                    <div id="little_profil_wrapper">
                        <div id="profil_avatar">
                            <?php echo "<img src='". $row["user_avatar"]."' alt='image'style='max-width: 300px; max-height: 300px;'>" ?>
                        </div>
                        <div id="profil_content">
                            <table>
                                    <colgroup>
                                        <col width="160" span="12">
                                    </colgroup>
                                    <tr>
                                        <td valign="middle" align="left"><b>Username:</b></td><td align="right"><?php echo "". $row["user_name"].""?></td><br>
                                    </tr>
                                    <tr>
                                        <td valign="middle" align="left"><b>Email-Adresse:</b></td><td align="right"><?php echo "". $row["user_email"].""?></td><br>
                                    </tr>
                                    <tr>
                                        <td valign="middle" align="left"><b>ID</b></td><td align="right"><?php echo "". $row["user_id"].""?></td><br>
                                    </tr>
                                </table>
                        </div>
                    </div>
                </div>
            </div>
            <div id="footer">
                <?php include('../basis/footer.php') ?>
            </div>
        </div>
    </body>
</html>
<?php
    }
}
$conn->close();
?>
<?php
}
?>

Hoffentlich könnt ihr mir ein paar Tipps geben und bei der Lösung helfen :)
 
Es wäre hilfreich wenn Du den ganzen HTML Pfeffer weglässt, und nur relevanten Quelltext schreibst, der Deiner Meinung nach das Problem darstellt. Nicht jeder möchte sich durch hunderte von Zeilen wuseln wenn es unnötig ist ;-) Ich bin jedenfalls dazu zu faul...

Code:
<a href='profile.php?action=benutzeraufruf&user=" . $row["user_id"]. "'>" . $row["user_id"]. "</a>
PHP:
if ($_REQUEST['action'] == 'benutzeraufruf' && preg_match("@^[0-9]+$@",$_REQUEST['user'])) {
 $ergebnis = $pdo->prepare("SELECT felder FROM user WHERE id = :id LIMIT 1");
 $ergebnis->bindValue(':id',intval($_REQUEST["user"]),PDO::PARAM_INT);
 $ergebnis->execute();

 while ($userdaten = $ergebnis->fetch()) {
  echo $userdaten['user_id'];
 }
}
So würde ich das angehen (ungetestet, nur schnell hingeschrieben) Hoffe Du kannst was damit anfangen...
 
Hi DrySolution,

der zweite Sourcecode zeigt deine profile.php, oder? Hier hast du um Zeile 28 den Fehler. Du rufst hier mit deiner SQL-Query alle Benutzer aus der Datenbank ab, willst aber nur den übergebenen laden, oder?

Ändere die Query wie folgt:
PHP:
// ...
$sql = "SELECT * FROM user WHERE user_id = " . intval($_GET['user']);
// ...

Würde dir aber auch (wie von Registrierer angesprochen) zu Prepared-Statements raten. Die sind gar nicht so schwer einzubauen, erhöhen aber die Sicherheit deines Codes immens.

Grüße,
BK
 
Zurück