![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benutzer Registriert seit: 10.04.2007
Beiträge: 37
|
Hallo ich bräuchte da mal eure hilfe, ich hab leider nicht wirklich viel ahnung von php. die Datenbank sieht so aus: Tabelle user _vorname, _name, _username, _passwort (verschlüsselt), _email, _sprache, _anzahllogins, _user_active, _user_art, _user_gruppe Ich hab ein Login-Bereich, da mächte ich jetzt noch folgende Sachen haben: der User soll, wenn er sich eingeloggt hat folgende Sachen ändern können: _vorname, _name, _username, _passwort, _email, _sprache (soll dropdown menü sein) Eine Admin-Bereich ist schon vorhanden, da möchte ich noch folgendes haben: Im admin-bereich bei bearbeiten (datei heisst bearbeiten.php Ich will als erstes ein dropdown menü wo alle user drin stehen ich einen auswählen kann dann auf user anzeigen klick, dann werden die daten vom user angezeigt: _vorname, _name, _username, _passwort (verschlüsselt), _email, _sprache, _anzahllogins, _user_active, _user_art, _user_gruppe Die daten möchte ich dann ändern können Und zuletzt möchte ich noch im Admin-Bereich user Löschen können. Könnt ihr mir da bitte helfen, ich bekomms einfach net hin. Ich benutz das Login-System von Ben nur ein bischen erweitert: [PHP] Ein sessionbasiertes Loginsystem für den Änderungsbereich im Admin-Bereich hab ich bis jetzt folgenden code (aber er ändert mir die Daten nicht ab es kommt auch keine Fehlermeldung Code: <html>
<head>
</head>
<link rel="stylesheet" type="text/css" href="format.css" >
<center>
<h1>User bearbeiten</h1>
</center>
<form action="" method="post">
<?php
$connect_id = mysql_connect("localhost", "user","pw") or die ("Keine Verbindung moeglich");
mysql_select_db("datenbank") or die ("Die Datenbank existiert nicht");
$abfrage = "SELECT * from user ";
$result = mysql_query($abfrage,$connect_id);
while ($row = mysql_fetch_array ($result))
{
$_vorname = $row["_vorname"];
$_name = $row["_name"];
$_username = $row["_username"];
$_email = $row["_email"];
$_sprache = $row["_sprache"];
$_email = $row["_email"];
$_anzahlLogins = $row["_anzahlLogins"];
$_user_art = $row["_user_art"];
$_user_gruppe = $row["_user_gruppe"];
$_user_active = $row["_user_active"];
echo <<<ABC
<table>
<tr>
<td><input type="text" name="vorname" size="12" value="$_vorname"></td>
<td><input type="text" name="name" size="12" value="$_name"></td>
<td><input type="text" name="username" size="20" value="$_username"></td>
<td><input type="text" name="email" size="20" value="$_email"></td>
<td><input type="text" name="sprache" size="10" value="$_sprache"></td>
<td><input type="text" name="anzahlLogins" size="2" value="$_anzahlLogins"></td>
<td><input type="text" name="user_art" size="5" value="$_user_art"></td>
<td><input type="text" name="user_gruppe" size="7" value="$_user_gruppe"></td>
<td><input type="text" name="user_active" size="1" value="$_user_active"></td>
</tr>
ABC;
}
?>
</table>
<?php
if( isset($_POST['submit']) )
{
$aendern = "UPDATE user Set _vorname='$_vorname', _name='$_name', _username='$_username', _email='$_email', _sprache='$_sprache', _anzahlLogins='$_anzahlLogins', _user_art='$_user_art', _user_gruppe='$_user_gruppe', _user_active='$_user_active', ";
$update = mysql_query($aendern) or die(mysql_error());
}
?>
<input type="submit" value="Daten ändern"></form>
<?
mysql_close($connect_id);
?>
<br><br><br><br>
<hr align="left" height="10" color="#FF0000" noshande>
<TABLE>
<TR>
<TD>Menü: </TD>
<TD><a href="http://compoundbow83.co.funpic.de/passwortschutz/admin/verwalten.html" target="rechts">User verwalten</a> </TD>
<TD> </TD> <TD> </TD> <TD> </TD> <TD> </TD>
<TD> </TD>
</TR>
</TABLE>
|
| | |
| | Nach oben #2 |
| Christian W. Achatz Registriert seit: 05.02.2007 Ort: München
Beiträge: 150
|
Hallo compoundbow83, an sich formulierst du deine Wünsche doch exakt im obigen Text. Jetzt musst du das Ganze nur noch in PHP-Code gießen. Da du bereits ein fertiges Skript verwendest und dazu Fragen stellst, nehme ich an, dass du mit PHP noch nicht so bewandert bist. Ich würde dir hier dringend empfehlen Grundlagen zu lernen, denn die obigen Wünsche sind mit ein paar Zeilen Code locker abzuhandeln.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> http://adventure-php-framework.org)! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
| | Nach oben #4 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Auch wenn anderen meckern: ich hatte grade etwas Zeit und Lust: Da ich hoffe dein Adminbereich ist sicher, hab ich erstmal auf Sicherheitsfeatures verzichtet, aber damit sollte es definitiv noch übergearbeitet werden. PHP-Code: Bei Fragen dazu einfach reinhauen, ich antworte. Versprochen
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 |
| | |
| | Nach oben #5 |
| Benutzer Registriert seit: 10.04.2007
Beiträge: 37
|
Vielen Dank für deine Hilfe, aber jetzt kommt der Fehlder hier: abgeschicktid:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 Und noch eine frage dieses [$id] bedeutet des, dass er den user genau identifizieren kann? Geändert von compoundbow83 (07.05.2007 um 12:39 Uhr) |
| | |
| | Nach oben #6 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Jain. Jede Tabelle sollte einen Primary Key haben um jeden Datensatz eindeutig identifizieren zu können. Dazu musst du aber deine Tabelle um diese Spalte erweitern. Diese Testausgabe "abgeschickt..." kannst du rausnehmen, sie diente nur dazu, sicher zu gehen das die schleife das macht was sie soll Das die Namen der Input-Felder nun "bla[$id]" heißen ermöglich unteranderem, dass die Daten in einem Array gespeichert werden und anhand dieser $id auch direkt angesprochen werden können. Mit deinem Skript oben hättest du z.B. mit jedem Eintrag alles in der Datenbank überschrieben, du hättest also x identische Einträge. Durch die $id und die Erweiterung des SQL-Updates um die WHERE-Klausel sorgst du dafür, dass nur der Eintrag mit der $id auch bearbeiten und geupdated wird.
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 |
| | |
| | Nach oben #7 |
| Benutzer Registriert seit: 10.04.2007
Beiträge: 37
|
ich habe schon eine spalte mit _id un die wird auch automatisch vergeben jetzt kommt der fehlder: Warning: Invalid argument supplied for foreach() in /usr/export/www/vhosts/funnetwork/hosting/compoundbow83/passwortschutz/admin/bearbeiten.php on line 29 und er ändert mich nichts in der Datenbank Code: <html>
<head>
</head>
<link rel="stylesheet" type="text/css" href="format.css" >
<center>
<h1>User bearbeiten</h1>
</center>
<?php
$connect_id = mysql_connect("localhost", "user","pw") or die ("Keine Verbindung moeglich");
mysql_select_db("datenbank") or die ("Die Datenbank existiert nicht");
$_vorname = $_POST["vorname"];
$_name = $_POST["name"];
$_username = $_POST["username"];
$_email = $_POST["email"];
$_sprache = $_POST["sprache"];
$_anzahlLogins = $_POST["anzahlLogins"];
$_user_art = $_POST["user_art"];
$_user_gruppe = $_POST["user_gruppe"];
$_user_active = $_POST["user_active"];
$_id = $_POST["_id"];
if( isset($_POST['submit']) )
{
echo "abgeschickt";
foreach ($_id as $key => $id){
echo "id:".$id;
$aendern = "UPDATE user Set `_vorname`='$_vorname[$id]', `_name`='$_name[$id]', `_username`='$_username[$id]', `_email`='$_email[$id]', `_sprache`='$_sprache[$id]', `_anzahlLogins`='$_anzahlLogins[$id]', `_user_art`='$_user_art[$id]', `_user_gruppe`='$_user_gruppe[$id]', `_user_active`='$_user_active[$id]' WHERE `_id` = $id";
$update = mysql_query($aendern) or die(mysql_error());
}
}
?>
Geändert von compoundbow83 (07.05.2007 um 14:53 Uhr) |
| | |
| | Nach oben #8 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
wie sieht denn deine Tabelle mit den inputs aus? Das sieht ja fast so aus, als wenn du das hiddenfeld, das ich eingefügt habe, nicht übernommen hast. Dann wäre $_POST["_id"] leer und würde die Fehlermeldung erklären.
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 |
| | |
| | Nach oben #9 |
| Benutzer Registriert seit: 10.04.2007
Beiträge: 37
|
ne des hat schon gepasst hab aber den fehler gefunden es hat einmal des _ vor dem id gefehlt. Vielen danke für deine hilfe Jetzt probier ich grad das für den admin-bereich zu schreiben wo ich user löschen kann, aber da weiss ich jetzt net wirklich, wie ich des realisieren soll es muss ja dann hinter jeden user ein radiobutton sein den ich dann anklicken kann un dann auf den button user löschen klicken. Aber wie sag ich dem ganzen, dass er den angeklickten user löschen soll? Hier mal des was ich probiert habe, aber er löscht mir die user nicht: Code: <html>
<head>
</head>
<link rel="stylesheet" type="text/css" href="format.css" >
<center>
<h1>User löschen</h1>
</center>
<?php
$connect_id = mysql_connect("localhost", "user","pw") or die ("Keine Verbindung moeglich");
mysql_select_db("datenbank") or die ("Die Datenbank existiert nicht");
$abfrage = "SELECT _vorname, _name, _username FROM user ORDER BY _vorname ASC";
$ergebnis = mysql_query($abfrage, $connect_id);
if( mysql_error($connect_id) ) die(mysql_error($connect_id));
$felder = mysql_num_fields($ergebnis);
$daten = mysql_num_rows($ergebnis);
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<table>
<tr>
<?PHP
for ($i = 0;$i < $felder;$i++) {
$feldname = mysql_field_name($ergebnis, $i);
echo "<th><b>". preg_replace("#^_#", "", $feldname) ."</b></th>";
}
?>
</tr>
<?PHP
while ($row = mysql_fetch_assoc($ergebnis))
{
echo "<tr>";
foreach ($row as $key => $value)
{
echo "<td style='border: 1px solid black; padding: 5px'>$value</td>";
}
echo "<td><input type='radio' name='user' value='". $row['_username'] ."'></td> </tr>";
}
?>
</table>
<?php
if( isset($_POST['submit']) )
{
$loeschen = "DELETE FROM user WHERE _username = '". $_row['_username'] ."' LIMIT 1";
$update = mysql_query($loeschen) or die(mysql_error());
}
?>
<input type="submit" name="submit" value="User löschen" /> </form>
<?
mysql_close($connect_id);
?>
Geändert von compoundbow83 (07.05.2007 um 18:37 Uhr) |
| | |
| | Nach oben #10 |
| Jann Hendrik Bekaan Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.378
| Du solltest zu Beginn des Skriptes folgendes stehen haben: PHP-Code: Ebenso kann man das auch in die config-Datei schreiben, wenn diese auf jeder Seite zu Beginn eingebunden wird. Mögliche Fehler die dann auftreten und wie man sie beheben kann: Notice: Use of undefined constant ... Notice: Undefined variable ...
__________________ Umfragen: Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Danke! |
| | |
| | Nach oben #11 |
| Benutzer Registriert seit: 10.04.2007
Beiträge: 37
|
ok jetzt weiss ich dass es diese Zeile ist $loeschen = "DELETE FROM user WHERE _username = '". $_row['_username'] ."' LIMIT 1"; weil diese Fehlermeldung kommt: Notice: Undefined variable: _row in /usr/export/www/vhosts/funnetwork/hosting/compoundbow83/passwortschutz/admin/loeschen.php on line 58 die Frage ist jetzt nur, wo da der Fehler ist! |
| | |
| | Nach oben #12 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Undefined Variable heisst ganz klar, das diese dort das erste mal auftaucht und nirgendwo vorher einen Wert bekommen hat. Das dürfte dir erklären, warum er nichts löscht. Denn er würde nun wahrscheinlich den User löschen, der keinen Usernamen hat. Denn uninitialisierte Variablen haben bei PHP meistens einen leeren String als Wert (bin mir aber nicht ganz sicher). Ansonsten solltest du versuchen das gelernte (bezogen auf ID und eineindeutige Identifizierung eines Users) in dein Skript umsetzen. Als weitere wichtige Verbesserung solltest du versuchen, PHP-Code und HTML zu trennen, damit Fehlersuche vereinfacht wird und schneller geht. Wie das aussehen könnte sieht man hier (womit zeitgleich dein Skript funktioniert PHP-Code: So ab hier helf ich nur noch auf die Sprünge und liefer keinen kompletten Code mehr. Irgendwie müssen wir dich ja zwingen, auch mal selbst was zu lernen
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 |
| | |
| | Nach oben #13 |
| Benutzer Registriert seit: 10.04.2007
Beiträge: 37
|
Vielen vielen Dank. Jetzt bin ich grad am überlegen, wie ich den Code vom Userbearbeiten abändern muss, für die Profil-Änderung (also, dass jeder User seine eigenen Daten ändern kann) Da muss ich ja erstmal sagen, dass er nur die Daten vom eingeloggten User zeigen soll. Ich hab es jetzt mal damit versucht: Code: $abfrage = "SELECT * from user WHERE _id = '". mysql_real_escape_string($_SESSION['id']) ."' "; Geändert von compoundbow83 (07.05.2007 um 20:20 Uhr) |
| | |
| | Nach oben #14 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Das ist richtig. Aber so wie du erkennst, dass du als Admin eingeloggt bist, so kannst du auch erkennen, dass es der oder der user ist. Da kommen also Sessions ins Spiel Also als Ideenstütze: In der Session speicherst du die ID des eingeloggten Users (oder in Cookies, das geht auch). Dann kannst du jederzeit darauf zugreifen und deine SQL-Abfragen durch die schönen WHERE-Klauseln so schneidern, dass nur die für den User wichtigen Daten angezeigt werden. Das wars dann auch schon. Viel Spass damit.
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 |
| | |
| | Nach oben #15 |
| Benutzer Registriert seit: 10.04.2007
Beiträge: 37
|
Des hab ich ja versucht, aber er bringt mir ja die Daten nicht. Die Session von der ID würd beim einloggen so gespeichert: $_SESSION['id'] = $user->_id; aber warum zeigt er mir die Daten vom User nicht an? Geändert von compoundbow83 (07.05.2007 um 21:28 Uhr) |
| | |
| | Nach oben #16 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
ok, dann lass dir mit doch mal mit echo ausgeben, ob in der Session etwas gespeichert ist?! PHP-Code: Das wäre: PHP-Code: //edit: ich geh jetzt erstmal heim, bin noch auf arbeit. bis denne
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 |
| | |
| | Nach oben #18 |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
Dann klappt das mit deiner Session so ganz und gar nicht. Kannst ja mal zeigen wo du deine Session startest.
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 |
| | |
| | Nach oben #19 |
| Benutzer Registriert seit: 10.04.2007
Beiträge: 37
|
Guck mal, des is ja schon bei dem Login von hier drin: [PHP] Ein sessionbasiertes Loginsystem unter validateLogin.inc.php halt mal, was bedeutet Session starten? Edit: hab den Fehler jetzt gefunden. Jetzt aber noch ne Frage, wie mach ich des jetzt, dass die User ihr eingegebene Passwort sehen? Geändert von compoundbow83 (07.05.2007 um 21:51 Uhr) |
| | |
| | Nach oben #20 | |
| Martin Breuer Registriert seit: 17.08.2005 Ort: Berlin
Beiträge: 1.653
|
du musst bei jeden skript das du aufrufst irgendwo vor der ersten Ausgabe ein session_start() haben. Denn nur dann wird die Session initialisiert und du kannst auf Werte zugreifen oder Werte zuweisen. Zitat:
__________________ I did it my way - Senseless-Blog Weihnachtsgeschenk? Schülern helfen - Bodypainting Kalender für 2009 | |
| | |