backbone: loginscript... :(

alloa folks, hab ne total billiges problem aber ich kappiere das einfach nicht :(.

hier der ausschnitt aus meinem script. will damit dei daten aus der db mit den einträgen aus dem formular vergleichen und wenn alles stimmt die nachricht ausgeben aber es funzt net :(.

code:-----------------------

<!-- db_connect.php funzt --!>

$login  = "SELECT * FROM login WHERE name='$username'";

if($submit)  { $a=mysql_query($login,$connect);
     $login_data = mysql_fetch_array($a);
     if($login_data[1] == $username && $a[2] == $password) {echo"alles happy!";}
     else { echo"none login";}}
else {
echo"
<html>
<head>
<title>login</title>
</head>
<body>
<table border="1">
<form method="post" action="$PHP_SELF">
<tr><td><p>username:&nbsp<input type="text" name="name" value="$username" size="15"></p></td></tr>
<tr><td><p>password:&nbsp<input type="text" name="pw" value="$password" size="15"></p></td></tr>
<tr><td width="200" align="center"><input type="submit" name="submit" value="submit"></td></tr>
</forum>
</table>
</body>
</html>";
}?>

war mache ich mal wieder falsch. ich raffe das einfach nicht :(((

  1. sorry, kleiner fehler (habsch jetzt berichtigt) aber funzt trotzdem nicht :(

    code:-----------------------

    <!-- db_connect.php funzt --!>

    $login  = "SELECT * FROM login WHERE name='$username'";

    if($submit)  { $a=mysql_query($login,$connect);
         $login_data = mysql_fetch_array($a);
         if($login_data[1] == $username && $login_data[2] == $password) {echo"alles happy!";}
         else { echo"none login";}}
    else {
    echo"
    <html>
    <head>
    <title>login</title>
    </head>
    <body>
    <table border="1">
    <form method="post" action="$PHP_SELF">
    <tr><td><p>username:&nbsp<input type="text" name="name" value="$username" size="15"></p></td></tr>
    <tr><td><p>password:&nbsp<input type="text" name="pw" value="$password" size="15"></p></td></tr>
    <tr><td width="200" align="center"><input type="submit" name="submit" value="submit"></td></tr>
    </forum>
    </table>
    </body>
    </html>";
    }?>

    1. Hallo backbone,

      sorry, kleiner fehler (habsch jetzt berichtigt) aber funzt trotzdem nicht :(

      was "funzt" nicht? Fehlermeldung?

      $login  = "SELECT * FROM login WHERE name='$username'";

      warum lässt du dir alle Spalten der Tabelle ausgeben? oder hat die Tabelle nur zwei Spalten?

      if($submit)  { $a=mysql_query($login,$connect);

      if(isset($_POST["submit"])...

      $login_data = mysql_fetch_array($a);
           if($login_data[1] == $username && $login_data[2] == $password) {echo"alles happy!";}

      nicht $username und $password sondern $_POST["username"] und $_POST["passwort"] (ich hoffe doch du verwendest POST)

      else { echo"none login";}}

      mach doch deine Klammern nicht so hintereinander, sondern in eine neuen Zeile, das macht das ganze etwas übersichtlicher

      else {
      echo"

      hier wäre es einfacher, wenn du den php-Bereich beendest und erst nach dem Formular wieder öffnest.

      <form method="post" action="$PHP_SELF">

      action="$_SERVER["PHP_SELF"]"

      [...]<input type="text" name="name" value="$username" size="15">[...]

      warum value="$username"?

      [...]<input type="text" name="pw" value="$password" size="15">[...]

      bei einem Passwort sollte man nun wirklich nicht value="$password" verwenden (zumal hier ein type="password" angebracht wäre)

      [...]</tr>
      </forum>
      </table>

      </form> (ich nehme mal an, da ist ein 'u' zufiel :-)) darf nicht zwischen </tr> und </table> stehen (<form> natürlich genausowenig zwischen <table> und <tr>)

      Grüße aus Nürnberg
      Tobias

      1. was "funzt" nicht? Fehlermeldung?

        es kommt gar keine fehlermeldung. es kommt nur "alles happy". also also ob user / pw richtig sind.

        warum lässt du dir alle Spalten der Tabelle ausgeben? oder hat die Tabelle nur zwei Spalten?

        nein, hat 3 spalten aber es ist aufwendiger nur 2 spalten auszulesen als alle oder net?

        » if($submit)  { $a=mysql_query($login,$connect);
        » if(isset($_POST["submit"])...

        wieso nehmt ihr immer $_POST? ich hab globale variablen auf meinem server an deswegen dachte ich das geht so.

        1. Hi,

          nein, hat 3 spalten aber es ist aufwendiger nur 2 spalten auszulesen als alle oder net?

          nein. Insbesondere lulus Hinweis auf die Wartbarkeit solltest Du ernst nehmen.

          wieso nehmt ihr immer $_POST? ich hab globale variablen auf meinem server an

          Eben dies stellt ein Sicherheitsrisiko dar; vrgl. Archiv. Du solltest Dich _niemals_ auf derartiges verlassen.

          Was hast Du übrigens für Testausgaben gemacht?

          Cheatah

          --
          X-Will-Answer-Email: No
      2. Hallo,

        $login  = "SELECT * FROM login WHERE name='$username'";
        warum lässt du dir alle Spalten der Tabelle ausgeben? oder hat die Tabelle nur zwei Spalten?

        Ist das denn schlimm, wenn er sich alles ausgeben laesst? Beeinflusst das die "freie Rechenleistung" (also die Faehigkeiten des Servers ;-) ) signifikant?
        Gruesse
        der Hilse

        1. Hi,

          Ist das denn schlimm, wenn er sich alles ausgeben laesst?

          schlimm nicht, aber unsinnig und wartungsunfreundlich.

          Beeinflusst das die "freie Rechenleistung" (also die Faehigkeiten des Servers ;-) ) signifikant?

          Ui, wenn die Tabelle ganze Romane über den User enthält, könnte das sein... :-)

          Cheatah

          --
          X-Will-Answer-Email: No
    2. Huhu backbone

      sorry, kleiner fehler (habsch jetzt berichtigt) aber funzt trotzdem nicht :(

      Wo wird $connect definiert?

      * im SQL-SELECT und dann nummerische Indizes im Array zu verwenden ist IMHO wenig durchschaubar und sehr wartungsunfreundlich.
      Besser die benötigten Spaltennamen im SQL-Statement angeben, und/ oder assoziative Indizes benutzen.

      Zur Steigerung der Übersichtlichkeit des Codes könnte evtl. auch dies beitragen:
      http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc.

      Die gesparten 'backslashes' heizen im Winter den Kamin und können im Sommer zum Baumhaus bauen benutzt werden ;-)

      Dann kann es Dir sicherlich nicht schaden, Dir eine etwas konsequentere Art der Klammersetzung anzueigenen.

      Viele Grüße

      lulu

      --
      bythewaythewebsuxgoofflineandenjoytheday
      1. Wo wird $connect definiert?

        $db_host  = "localhost";
        $db_username = "xxx";
        $db_password = "xxx";
        $db_name  = "use message";

        $connect = mysql_connect($db_host,$db_username,$db_password);

        if(!mysql_query($db_name,$connect)) die ("<html><head><title>Verbindungsfehler</title><body><p style="color:red;"><b>Verbindung fehlgeschlagen</b></p></body></html>");

        jo, das den anderen tipp werde ich mal beherzigen. thx for it

  2. gut, gehen wa vielleicht nochmal zum hauptsript.

    $login  = "SELECT * FROM login WHERE name='$username'";

    if($submit)  { $a=mysql_query($login,$connect);
         $login_data = mysql_fetch_array($a);
         $aLogin=$login_data[1];
         $aPassword=$login_data[2];
         if($aLogin == $username_in and $aPassword == $pwd_in) {echo"alles happy!";}
         else {echo"none login"; }
         }

    else{....

    was ist hier falsch bzw. wieso funzt dat net :( (lassen wa mal mit den variablen alles so wie es da ist, also globale-variablen: on)

    1. Huhu backbone

      lass Dir mal Deine Daten anzeigen.
      Z.B. mit

      var_dump($login_data);

      oder evtl. stimmt die Zuordnung nicht (Array-Index beginnt mit [0]!)

      Viele Grüße

      lulu

      --
      bythewaythewebsuxgoofflineandenjoytheday
      1. Habs jetzt glaube ich gefunden. am array liegt es insofern das es
        keine daten enthält.

        $a = mysql_query($login,$connect);

        habe das gefühl das das nicht ganz funktionieren kann. wird ja nie
        aufgerufen, die abfrage oder??? nun weiss ich aber nicht wie ich ner
        variable das ergebnis anders zuweisen kann :(. kann man da
        vielleicht jemand helfen oder bin ich da aufn holzweg?

  3. Hi,

    Versuch das mal.. ungetestet... quick & dirty :)

    <?php
    if($submit){
       if(mysql_num_rows(mysql_query("Select username,password from login WHERE name='$username' AND password='$password'")))>0){
          echo "login true";
       }
    }else{
    ..[HTML]..
    }

    ?>

    Ludwig