Ergebnis 1 bis 9 von 9

Thema: Schwer zu beschreibenes Problem also 1. Bedingung wird erfüllt 2. nicht angezeigt

  1. #1

    Schwer zu beschreibenes Problem also 1. Bedingung wird erfüllt 2. nicht angezeigt

    Ich schon wieder <.<

    Mal wieder eins von diesen nOOB Problemen also ich wollte jetzt nen Script machen wo man die Profile bearbeiten kann

    Das heisst zuerst will ich prüfen lassen welcher User überhaupt bearbeitet werden soll dies erfolgt durch erneute Eingabe des Namens und Passworts dannach soll man auf eine Seite weitergeleitet werden wo man die Sachen halt ändern kann

    Auf jeden Fall wenn man das Script aufruft (das 1. mal) steht form Abschnitt 1 und form Abschnitt 2 da , wobei da ja nur Form Abschnitt stehen soll.

    Wenn ich dann im Abschnitt 1 den Usernamen und das PW eingebe dann steht aber auf einmal Abschnitt 2 nicht mehr da obwohl da so sein soll. Und wenn man Abschnitt 1 erfüllt hat soll Abschnitt 1 ja verschwinden und dafür nur 2 stehen <.<

    Aber irgendwie schaff ich das nicht wirklich bin jetzt schon 3 Stunden am rumprobieren

    Kann mir vielleicht einer helfen?
    Wäre sehr dankbar

    Hier der Code (das was ich bis jetzt geschafft hab):
    PHP-Code:
    <?php
    include("config.php");

    $query mysql_query("Select * from user");
      while(
    $row mysql_fetch_object($query))
      {
      
    $row2->username;
      
    $row3->password;
      }
    ?>
    <form method="post">
    Gib dein Namen und dein PW bitte nochmal ein:<br>
    Name: <input type="text" name="editprofileusername"><br>
    Passwort: <input type="password" name="editprofilepassword">
    <input value="Ok" type="submit">
    </form>
    <?

    if($row2 == $editprofileusername && $row3 == $editprofilepassword)
    {
    $sql = "SELECT * FROM user where '".$username."'";
    $abfrage = mysql_query($sql);
      while($row = mysql_fetch_object($abfrage))
        {
        ?>
        
    Avatar-URL: <? echo $row->ava; ?><br>
    Wohnort: <? echo $row->wohnort; ?><br>
    ICQ: <? echo $row->icq; ?><br>
    MSN: <? echo $row->msn; ?><br>
    <?
    }
    $eintrag = "UPDATE user SET icq='".$newicq."', msn='".newmsn."', wohnort='".$newwohnort."' where '".$editprofileusername."'";
    $eintragen = mysql_query($eintrag);
    ?>
    <form method="post">
    Noch muss alles mit geändert werden das wird sich aber in späteren Versionen ändern ;)<br><br>
    Neue ICQ:<input name="newicq" type="text"><br>
    Neue MSN:<input name="newmsn" type="text"><br>
    Neuer Wohnort:<input name="newwohnort" type="text"><br>
    <input value="Absenden" type="submit">
    </form>
    <?
    }
    ?>

  2. #2
    Ich verstehe nicht so ganz, was dieser Teil hier soll:
    PHP-Code:
    while($row mysql_fetch_object($query))
      {
      
    $row2->username;
      
    $row3->password;
      } 
    Imo müsste das so aussehen:
    PHP-Code:
    while($row mysql_fetch_object($query))
      {
      
    $row2 $row->username;
      
    $row3 $row->password;
      } 
    Überhaupt wirkt dein Code total chaotisch und nicht so, als würde er überhaupt funktionieren... Da weiß ich schon garnicht mehr, womit ich anfangen soll...
    Ich nehme mal an, das du mit dem ersten Teil einen Login bezweckst. Dann müsste es aber imo so aussehen:
    PHP-Code:
    include("config.php");
    if(!isset($_POST['OK'])) {
    ?>
    <form method="post">
    Gib dein Namen und dein PW bitte nochmal ein:<br>
    Name: <input type="text" name="editprofileusername"><br>
    Passwort: <input type="password" name="editprofilepassword">
    <input value="Ok" type="submit">
    </form>
    <?
    } else {
      $query = mysql_query("SELECT `password` FROM `user` WHERE `username` = '".$_POST['"editprofileusername']."' LIMIT 1;");
      if(mysql_num_rows($query) < 1)
        die("Diesen Benutzer gibt es nicht");
      $row = mysql_fetch_assoc($query);

      if($row['password'] != $_POST['editprofilepassword'])
        die("Falsches Passwort");
      // hier folgt das, was kommt, wenn man eingeloggt ist
    }
    Mit dem zweiten Teil soll man seine Daten ändern können? Wenn ja würde ich das so machen:
    PHP-Code:
    ...
    if(isset($_POST['submit'])) {
      $eintrag = "UPDATE `user` SET `icq`='".$_POST['newicq']."', `msn`='"._POST['newmsn']."', `wohnort`='".$_POST['newwohnort']."' WHERE `username` = '".$_POST['editprofileusername']."' LIMIT 1";
      $eintragen = mysql_query($eintrag);
    }
    $sql = "SELECT * FROM `user` WHERE `username` = '".$_POST['editprofileusername']."' LIMIT 1;";
    $abfrage = mysql_query($sql);
    $row = mysql_fetch_assoc($abfrage);
    ?>
    Avatar-URL: <?= $row['ava']; ?><br>
    <form method="post">
    Noch muss alles mit geändert werden das wird sich aber in späteren Versionen ändern ;)<br><br>
    Neue ICQ:<input name="newicq" type="text" value="<?= $row['icq'?>"><br>
    Neue MSN:<input name="newmsn" type="text" value="<?= $row['msn'?>"><br>
    Neuer Wohnort:<input name="newwohnort" type="text" value="<?= $row['wohnort'?>"><br>
    <input type="hidden" name="editprofilepassword"  value="<?= $_POST['editprofilepassword'?>">
    <input type="hidden" name="editprofileusername"  value="<?= $_POST['editprofileusername'?>">
    <input value="Absenden" name="submit" type="submit">
    </form>
    <?
    }
    ?>
    Den Code oben kannst du einfach an der Stelle mit dem Kommentar im ersten einfügen. Der Code ist ungetestet, also könnten da noch Fehler drin sein. Noch ein paar Tips für dich:
    1. gewöhn dir an, bei Formularen statt $username $_POST['username'] oder $_GET['username'] zu schreiben. Wenn auf dem Server register_globals nämlich ausgeschaltet (off) ist, funktioniert dein Script nicht mehr! Mehr...
    2. Gewöhn dir einen vernünftigen und lesbaren MySQL-Syntax an. Schreibe jeden Tabellennamen und Feldnamen in diese `` Anführungszeichen und alle variablen Werte in diese ''. Schreibe alle MySQL-Befehle in Großbuchstaben (Beispiele findest du in dem von mir geposteten Code) Das hat den Vorteil, dass es keine Verwechslungen und Probleme bei Feldnamen wie zB "text" gibt (text ist ein MySQL Schlüsselwort)
    3. Wenn du eigentlich nur eine Zeile bei MySQL auslesen willst, schreibe ans Ende des MySQL Befehls "LIMIT 1" Dann wird auch wirklich nur eine Zeile ausgelesen. Auch brauchst du dann keine Schleife, um die Werte auszulesen, ein einfaches $row = mysql_fetch_assoc() reicht eigentlich schon.
    4. Lies dir irgendwelche MySQL und PHP Tutorials oder ähnliches nochh einmal durch. Du hast eine Menge seltsamer Fehler gemacht (zB das mit dem $row2->$username)

    Manni

  3. #3
    Zitat Zitat von Manni_the_Dark
    Ich verstehe nicht so ganz, was dieser Teil hier soll:
    PHP-Code:
    while($row mysql_fetch_object($query))
      {
      
    $row2->username;
      
    $row3->password;
      } 
    Imo müsste das so aussehen:
    PHP-Code:
    while($row mysql_fetch_object($query))
      {
      
    $row2 $row->username;
      
    $row3 $row->password;
      } 
    Aber es funktioniert auch meine Version problemlos zumindestens auf Servern mit PHP4

    Also aber am Anfang wird ja der Loginbereich angezeigt, soll ja das Formular einegeblendet werden wo man seine Einstellungen edittieren kann. Aber nach dem einloggen zeigt er auch bei deinem Script nichts

    ich hab das jetzt nochmal so versucht:
    PHP-Code:
    <?php
    include("config.php");
    session_start();
      
    $query mysql_query("Select * from user where (username like '$_POST[username]') AND (password = '$_POST[password]')");


    if( 
    mysql_num_rows($query) > ) {

    $login "ok";
    session_register("login");
    } else {

    echo(
    "Die Daten waren falsch!");
    }
    ?>
    <form method="post">
    <table border="0" width="80%" align="center" bgcolor="#CCCCCC">
    <tr>
    <td bgcolor="#000000" width="40%"><span style="color:#FFFFFF"><font size="+2">Login</font></span></td>
      <td bgcolor="#000000" width="40%"></td>
      </tr><tr>
    <td>Username:</td><td> <input type="text" name="username"><br></td>
    </tr><tr><td>
    Passwort: </td><td><input type="password" name="password"><br></td></tr><tr><td>
    <input type="submit" name="submit" value="Einloggen"></td><td></td></tr></table>
    </form>
    <?
      if(isset($_POST['submit'])) { 
      $eintrag = "UPDATE `user` SET `icq`='".$_POST['newicq']."', `msn`='".$_POST['newmsn']."', `wohnort`='".$_POST['newwohnort']."' WHERE `username` = '".$_POST['editprofileusername']."' LIMIT 1"; 
      $eintragen = mysql_query($eintrag); 

    /* $sql = "SELECT * FROM `user` WHERE `username` = '".$_POST['editprofileusername']."' LIMIT 1;"; 
    $abfrage = mysql_query($sql); 
    $row = mysql_fetch_assoc($abfrage); */
    ?> 
    Avatar-URL: <?= $row['ava']; ?><br> 
    <form method="post"> 
    Noch muss alles mit geändert werden das wird sich aber in späteren Versionen ändern ;)<br><br> 
    Neue ICQ:<input name="newicq" type="text"><br> 
    Neue MSN:<input name="newmsn" type="text"><br> 
    Neuer Wohnort:<input name="newwohnort" type="text"><br> 
    <!--
    <input type="hidden" name="editprofilepassword"  value="<? //= $_POST['editprofilepassword'] ?>"> 

    <input type="hidden" name="editprofileusername"  value="<? //= $_POST['editprofileusername'] ?>"> 
    -->
    <input value="Absenden" name="submit" type="submit"> 
    </form>
    Damit wird endlich der 2te Teil angezeigt, aber geändert wird nachher auch nix an der DB wenn man dann auf Absenden drückt, es kommt nur die Fehlermeldung (die selbst definiert ist)

    Zitat Zitat
    Die Daten waren falsch!
    Was ist das denn jetzt schon wieder für nen ********?

    Bin für jede Hilfe dankbar

  4. #4
    Du hast zwei mal
    PHP-Code:
    if (isset($_POST['submit'])
    ... 
    und arbeitest ohne Actions in Deinen Formularen. Wenn Du Dein zweites Formular abschickst, springt er wieder in die erste IF-Schleife und meckert dann natürlich, dass die Daten falsch sind.

    Versuch es z.B. mal so für Dein Loginformular:
    PHP-Code:
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>?login=1">
    ...
    if (isset($_GET['login'])
    {
    ...
    }
    ...
    Und für Dein Updateformular
    PHP-Code:
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>?profil=1">
    ...
    if (isset($_GET['profil'])
    {
    ...
    }
    ...
    Oder nenn' Deine Submit-Buttons "submit1" und "submit2".

    Die Idee mit dem PHP Tutorial wäre nicht mal so schlecht.

  5. #5
    Also ich hab das Script nochmal komplett neu gestaltet

    Aber mehr oder weniger mit euren Codes

    Auf jeden Fall wenn man dann auf Absenden drückt
    wird alles per SET auch eingeben nur das where macht Probleme
    denn der will trotz Angabe im Script den usernamen dort nicht eintragen

    das gibt der mir aus
    wenn ich das per echo ausgeben lassen will
    Code:
    UPDATE user SET icq='123123123", msn="test", wohnort="test" WHERE (username = "') LIMIT 1
    Nur ich hab Null Plan warum...

    Hier mal das Script

    PHP-Code:
    <?php
    include("config.php");
    if (isset(
    $_GET['login']))
    {
    $sql mysql_query("SELECT * FROM user WHERE (username = '".$_POST['username']."') AND (password = '".$_POST['password']."')"); 
    if( 
    mysql_num_rows($sql) > ) { 
    $login "ok";
    } else {
    echo(
    "Die Daten waren falsch!");
        }

    ?>
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>?login=1">
    <table border="0" width="80%" align="center" bgcolor="#CCCCCC">
    <tr>
    <td bgcolor="#000000" width="40%"><span style="color:#FFFFFF"><font size="+2">Login</font></span></td>
      <td bgcolor="#000000" width="40%"></td>
      </tr><tr>
    <td>Username:</td><td> <input type="text" name="username"><br></td>
    </tr><tr><td>
    Passwort: </td><td><input type="password" name="password"><br></td></tr><tr><td>
    <input type="submit" value="Einloggen"></td><td></td></tr></table>
    </form>
    <?
    if(isset($_GET['profil'])) {
    $eintragen = "UPDATE user SET icq='".$_POST['newicq']."', msn='".$_POST['newmsn']."', wohnort='".$_POST['newwohnort']."' WHERE (username = '".$_POST['username']."') LIMIT 1";
    echo $eintragen;
    //$eintrag = mysql_query($eintragen);
    }
    ?>
    <form method="post" action="<?php echo $_SERVER["PHP_SELF"]?>?profil=1"> 
    Noch muss alles mit geändert werden das wird sich aber in späteren Versionen ändern ;)<br><br> 
    Neue ICQ:<input name="newicq" type="text"><br> 
    Neue MSN:<input name="newmsn" type="text"><br> 
    Neuer Wohnort:<input name="newwohnort" type="text"><br> 

    <input type="hidden" name="password" value="<? $_POST['password'] ?>"> 

    <input type="hidden" name="username" value="<? $_POST['username'] ?>"> 

    <input value="Absenden" name="submit" type="submit"> 
    </form>
    Jemand ne Idee?

    Bin für jegliche Hilfe dankbar

    Geändert von fanrpg (04.07.2005 um 17:39 Uhr)

  6. #6
    Du hast in der Query an einer Stelle " und ' vertauscht.
    ... WHERE (username = '".$_POST['username']."') LIMIT 1";
    Das kann man sogar an der ausgegebenen Query sehen

  7. #7
    Code:
    UPDATE user SET icq='123123123', msn='test', wohnort='test' WHERE (username = '') LIMIT 1
    fügt der trotzdem nicht hinzu...

    Die Zeile sieht jetzt so aus:
    PHP-Code:
    $eintragen "UPDATE user SET icq='".$_POST['newicq']."', msn='".$_POST['newmsn']."', wohnort='".$_POST['newwohnort']."' WHERE (username = '".$_POST['username']."') LIMIT 1"

  8. #8
    Wenn ich mir deinen Code anschaue, sehe ich nur, das beim falschen Usernamen eine Meldung ausgegeben wird. Das weitere Ausführen des Scriptes wird dadurch nicht beieinträchtigt. Dh das auch wenn man ausgeloggt ist, eigentlich der Teil zum ändern der Daten angezeigt werden müsste. Hast du eigentlich mein Script mal ausprobiert?
    Ausserdem kannst du an der ausgegebenen Query sehen, dass kein Username gesetzt ist. Das liegt daran, dass beim Abschicken des zweiten Formulars die Benutzerdaten nicht mehr mitgeschikt werden. (Da oben nur überprüft wird, ob das erste Formular abgeschickt wurde, wird dass Passwort nicht überprüft. Deswegen gibt es keine Fehlermeldung obwol kein Nutzername eingegeben wurde.)

    Hier nochmal der Code von oben, schau ihn dir nochmal genau an:
    PHP-Code:
    include("config.php");
    if(!isset($_POST['OK'])) {
    ?>
    <form method="post">
    Gib dein Namen und dein PW bitte nochmal ein:<br>
    Name: <input type="text" name="editprofileusername"><br>
    Passwort: <input type="password" name="editprofilepassword">
    <input value="Ok" type="submit">
    </form>
    <?
    } else {
      $query = mysql_query("SELECT `password` FROM `user` WHERE `username` = '".$_POST['"editprofileusername']."' LIMIT 1;");
      if(mysql_num_rows($query) < 1)
        die("Diesen Benutzer gibt es nicht");
      $row = mysql_fetch_assoc($query);

      if($row['password'] != $_POST['editprofilepassword'])
        die("Falsches Passwort");
    // User ist eingeloggt!
    if(isset($_POST['submit'])) {
      $eintrag = "UPDATE `user` SET `icq`='".$_POST['newicq']."', `msn`='"._POST['newmsn']."', `wohnort`='".$_POST['newwohnort']."' WHERE `username` = '".$_POST['editprofileusername']."' LIMIT 1";
      $eintragen = mysql_query($eintrag);
    }
    $sql = "SELECT * FROM `user` WHERE `username` = '".$_POST['editprofileusername']."' LIMIT 1;";
    $abfrage = mysql_query($sql);
    $row = mysql_fetch_assoc($abfrage);
    ?>
    Avatar-URL: <?= $row['ava']; ?><br>
    <form method="post">
    Noch muss alles mit geändert werden das wird sich aber in späteren Versionen ändern ;)<br><br>
    Neue ICQ:<input name="newicq" type="text" value="<?= $row['icq'?>"><br>
    Neue MSN:<input name="newmsn" type="text" value="<?= $row['msn'?>"><br>
    Neuer Wohnort:<input name="newwohnort" type="text" value="<?= $row['wohnort'?>"><br>
    <input type="hidden" name="editprofilepassword"  value="<?= $_POST['editprofilepassword'?>">
    <input type="hidden" name="editprofileusername"  value="<?= $_POST['editprofileusername'?>">
    <input value="Absenden" name="submit" type="submit">
    </form>
    <?
      }
    }
    Der Code ist zwar ungetestet, sollte aber zumindest von der logischen Struktur stimmen. Das ist vielleicht nicht die eleganteste Lösung, aber ich glaube das wäre jetzt ein wenig aufwändig, das zu erklären

  9. #9
    Was 2 "=" alles ausmachen können

    Auf jeden Fall funzt das jetzt so

    Ein grosses THX an alle

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •