kostenloser Webspace werbefrei: lima-city


"Passwort-Manager"

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    s******i

    Hallo Leute,
    ich wollte mal ein Passwort-Manager als Übung erstellen. Jetzt kann ich aber die Daten auf meine MySQL-Datenbank nur teilweise ändern. (Ich weiß, dass das Skript nicht sehr sinvoll ist, aber ich muss ja irgendwie PHP lernen und da lohnt es sich net gleich mit einem Form zu beginnen...). Und zwar wollte ich einfach meine Passörter ändern, indem ich in ein Textarea mein bisherigen Stand der Passwörter eintragen lasse, und der User dann die Passwörter belibieg ändern kann. Aber leider ändert sich nicht das Passwort...
    Hier das Skript:
    <?php
    mysql_connect("localhost", "alpha-squad", "xxxxxxx") or die("Could not connect: " . mysql_error());
    mysql_select_db("xxxxxxx");
    $name = $_POST["name"];
    
    $result = mysql_query("SELECT passwort, beschreibung FROM passwort WHERE user='$name'");
    while ($id = mysql_fetch_object($result))
    {
    echo "<form action='pwsend.php' method='post'><textarea name='passwort' rows='20' cols='70'>$id->passwort</textarea><input type='hidden' name='passwort' value='".$id->passwort."'><input type='hidden' name='user' value='".$name."'><input
    type='Submit' value='Senden...'>";
    }
    
    ?>



    Grüße,
    spuglisi
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wie sieht denn die Datei pwsend.php aus? Denn in diesem Skript wird ja nichts in der DB geändert sondern es werden nur Daten aus der DB geholt....

    Beitrag zuletzt geändert: 18.5.2010 22:25:52 von volnerius
  4. Heisst das script das du gepostet hat pwsend.php? Wenn ja, dann hast du vergessen, die Änderungen wieder in die Datenbank zurückzuschreiben. Wenn das der Fall ist, könnte ich Dir beschreiben wie du das machen kannst, falls vonnöten :wink:
  5. Autor dieses Themas

    s******i

    Tut mir leid, dass ist die Datei "change2". Hier wird jedeglich der Wert (Die Variable) in das nächste Skript übergeben.
    Ich poste mal die Datei pwsend:
    <?php
    mysql_connect("localhost", "xxxxxxx", "xxxxxxx") or die("Could not connect: " . mysql_error());
    mysql_select_db("xxxxxxx");
    
    $user = $_POST["user"];
    $passwort = $_POST["passwort"];
    $result = mysql_query("SELECT passwort FROM passwort WHERE user = '$user'");
    while ($id = mysql_fetch_object($result))
    
    $update = mysql_query("UPDATE passwort SET passwort = '$passwort' WHERE user = '$user'");
    
    ?>


    Grüße,
    spuglisi
  6. Bei der Suche nach Felern fangen wir mal bei deinem geposteten Script an:

    <?php
    @mysql_connect("localhost", "alpha-squad", "xxxxxxx") or die("Could not connect: " . mysql_error());
    @mysql_select_db("xxxxxxx") or die("Could not select database");
    
    $name = $_POST['name'];
    
    $result = @mysql_query("SELECT passwort, beschreibung FROM passwort WHERE user='".$name."' LIMIT 1") or die("Kann Query nicht ausf&uuml;hren");
    while ($id = @mysql_fetch_array($result))
    {
    	$password = $id['passwort'];
    }
    
    echo "<form action=\"pwsend.php\" method=\"post\">
    <input type=\"hidden\" name='user\" value=\"".$name."\">
    <input type=\"text\" name=\"passwort\" value=\"".$password."\">
    <input type=\"Submit\" value=\"Senden...\">
    </form>";
    ?>


    So, oder so ähnlich würde ich es machen ;) Das Problem an deinem obigen Code ist nämlich u.a. dass du bei mehr als einem Passwort in der Datenbank auch entsprechend mehr Formulare des selben Typs hast.

    Ferner kannst du nur ein Formularfeld mit gleichem Namen verwenden. In deinem Falle benutzt du das Feld "passwort" zwei Mal (als Hidden und als Textarea). Sollte nur ein Passwort ausgegeben werden, würde ich eher ein Textfeld an Stelle einer ganzen Textarea anzeigen :)

    Wenn du mehrere Passwörter in der Textarea angezeigt haben möchtest, könntest du es in etwa so machen:

    <?php
    @mysql_connect("localhost", "alpha-squad", "xxxxxxx") or die("Could not connect: " . mysql_error());
    @mysql_select_db("xxxxxxx") or die("Could not select database");
    
    $name = $_POST['name'];
    
    echo "<form action=\"pwsend.php\" method=\"post\">
    <input type=\"hidden\" name='user\" value=\"".$name."\">
    <textarea name=\"passwort\" rows=\"20\" cols=\"70\">";
    
    $result = @mysql_query("SELECT passwort, beschreibung FROM passwort WHERE user='".$name."'") or die("Kann Query nicht ausf&uuml;hren");
    while ($id = @mysql_fetch_array($result))
    {
    	echo $id['passwort']."\n";
    }
    
    echo "</textarea>
    <input type=\"Submit\" value=\"Senden...\">
    </form>";
    ?>


    Das ist nur ein sehr simples Beispiel. In der gängigen Praxis sieht das etwas anders aus.

    Hier dann mal die einfachste Version deiner pwsend.php:

    <?php
    @mysql_connect("localhost", "xxxxxxx", "xxxxxxx") or die("Could not connect: " . mysql_error());
    @mysql_select_db("xxxxxxx") or die("Could not select database");
    
    $user = $_POST["user"];
    $passwort = $_POST["passwort"];
    
    @mysql_query("UPDATE passwort SET passwort = '".$passwort."' WHERE user = '".$user."'") or die("Kann Query nicht ausf&uuml;hren");
    
    echo "Passwort gespeichert";
    ?>


    Beitrag zuletzt geändert: 18.5.2010 23:33:22 von fabo
  7. Autor dieses Themas

    s******i

    Ok. ich werde es mir mal anschauen. Aber ich schon zugeben, die Realisierung ist abenteuerlich... Ich habe nämlich für eine Zelle alle PW'S vorgesehen, die jeweils mit einem <br> getrent sind.
    Danke für deinen schnellen Post.
  8. <br /> kannst du in einer Textarea nicht verwenden ;) Daran habe ich bei meiner 2. Version natürlich gedacht :)

    Du kannst aber die 2. Version mit der Textarea NICHT mit der aktuellen pwsend.php verwenden.

    Im Prinzip gibt es, wenn du mehrere Passwörter verwalten möchtest, zwei Möglichkeiten...

    1. Du benutzt nach wie vor Textfelder für jedes Passwort. Hier ein Beispiel:

    <?php
    @mysql_connect("localhost", "alpha-squad", "xxxxxxx") or die("Could not connect: " . mysql_error());
    @mysql_select_db("xxxxxxx") or die("Could not select database");
    
    $name = $_POST['name'];
    
    echo "<form action=\"pwsend.php\" method=\"post\">
    <input type=\"hidden\" name='user\" value=\"".$name."\">";
    
    $result = @mysql_query("SELECT passwort, beschreibung FROM passwort WHERE user='".$name."' LIMIT 1") or die("Kann Query nicht ausf&uuml;hren");
    while ($id = @mysql_fetch_array($result))
    {
    	echo "<input type=\"hidden\" name=\"passwortalt[]\" value=\"".$id['passwort']."\">";
    	echo "<input type=\"text\" name=\"passwoerter[]\" value=\"".$id['passwort']."\"><br />";
    }
    
    echo "<input type=\"Submit\" value=\"Senden...\">
    </form>";
    ?>


    Damit erhälst du in der pwsend.php zwei Arrays (die alten Passwörter und die Werte in den Textfeldern). Mit denen kannst du dann wie folgt arbeiten:

    <?php
    @mysql_connect("localhost", "xxxxxxx", "xxxxxxx") or die("Could not connect: " . mysql_error());
    @mysql_select_db("xxxxxxx") or die("Could not select database");
    
    $user = $_POST["user"];
    $passwortalt = $_POST["passwortalt"];
    $passwoerter = $_POST["passwoerter"];
    
    foreach($passwortalt as $key => $label)
    {
    	@mysql_query("UPDATE passwort SET passwort = '".$passwoerter[$key]."' WHERE user = '".$user."' AND passwort = '".$label."'") or die("Kann Query nicht ausf&uuml;hren");
    }
    
    echo "Passw&ouml;rter gespeichert";
    ?>


    Die 2. Möglichkeit besteht darin, wie ursprünglich vorgesehen, eine Textarea zu verwenden. Nachteil daran ist jedoch, dass jedes einzelne Kennwort durch einen eindeutigen Delimiter getrennt werden MUSS. In einer Textarea ist das Normalerweise der Umbruch, also \n.

    Nachteil darin sehe ich jedoch in der temporären Speicherung der alten Passwörter. Insofern du mehr als ein Passwort hast bzw. mehrere Spalten mit dem selben Namen verändert werden, muss MySQL wissen, welche Spalte welchen Wert erhält. Um MySQL das mitzuteilen, wird in der Tabelle nach dem alten Passwort gesucht und dieses dann durch das neue ersetzt.

    Mit der Textarea Version funktioniert das zwar auch, ist dann wiederrum schwierig mit den alten Passwörtern.

    Ist alles ein wenig schwieriger, aber halt nicht unmöglich, wie du in meinem obrigen Beispiel sehen kannst.


    Beitrag zuletzt geändert: 18.5.2010 23:35:36 von fabo
  9. ich habe aus langeweile auch mal so ein Ding geschrieben, verzichte dabei allerdings komplett auf eine Datenbank, sondern speicher das ganze einfach in einer .txt, welche mit htaccess vor dem Zugriff von außen geschützt ist, ich hab dazu sogar eine online-demo eingerichtet, es ist zwar ziemlich schlecht programmiert, aber es funktioniert einwandfrei man kann das auch downloaden und auf seinem eigenen webspace im Ordner passwords anlegen.
  10. Autor dieses Themas

    s******i

    Das ist ja sehr nett, jedoch möchte ich der Übung wegen nicht auf die Datenbank verzichten...;-)
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!