Ronny: datenbank feld vergleich

hallo, hatte vor paar tagen schonmal was ähnliches angefragt, aber die hilfen die kamen, konnten mir nicht helfen, da ich trotzdem nicht weiterkomme.

ich möchte einen eingegebenen namen mit der db agleichen um zu prüfen ob der name schon vergeben ist, damit es keine doppelt gibt. dazu habe ich ne tabelle login, dort ne spalte usr_name mit den namen.
hab mir mal schattenbaummäßig einen kleinen schnipsel gebastelt.

<?php

require "db.php";

$benutzername = "analogbernd";

mysql_connect($db_server,$db_username,$db_passwort)or die ("Verbindungsabbruch");
mysql_select_db($db_database)or die ("Datenbankauswahl fehlerhaft");

$abfrage = "SELECT usr_name FROM Login";
$ergebnis = mysql_query($abfrage);

while($row = mysql_fetch_object($ergebnis))

{
    echo $row->usr_name;
    }

if ($row->usr_name == $benutzername)
{
echo "$benutzername ist vorhanden";
}
echo "Name ist frei";

?>

funktioniert ja soweit, nur leider bekomme ich dann die meldung das der name analogbernd noch frei ist, er steht aber schon drin, ist also quasi vergeben.

was mache ich falsch? bin für jeden tipp dankbar.

danke ronny

  1. Hi,

    weiss nicht, aber generell würde ich es so machen:

    SELECT COUNT(*) FROM Login WHERE usr_name="$benutzername";

    Ciao
    Andreas

    1. SELECT COUNT(*) FROM Login WHERE usr_name="$benutzername";

      mmhm, danke für die schnelle Re

      bin leider nicht ganz so dolle im umgang mit sql und co ;)

      wie geh ich denn dann damit um? da müsste ja dann im falle eines noch nicht vergebenen namens ne fehlermeldung kommen oder?

      ronny

      danke

      1. hi,

        SELECT COUNT(*) FROM Login WHERE usr_name="$benutzername";

        da müsste ja dann im falle eines noch nicht vergebenen namens ne fehlermeldung kommen oder?

        nein. count() zählt die anzahl der datensätze, die zur bedingung passen.

        wenn der name nicht existiert, kommt also 0 raus, sonst 1 (oder ggf. mehr).

        erweitere am besten die query noch um folgendes:

        SELECT COUNT(*) as anzahl FROM Login WHERE usr_name="$benutzername";

        damit hast du nachher in dem einen(!) datensatz, der dir zurückgeliefert wird, einen "feldnamen" anzahl, in dem der wert steht.

        gruss,
        wahsaga

        1. danke danke, habs jetzt folgendermaßen gelöst

          <?php

          require "db.php";

          $benutzername = "testname";

          mysql_connect($db_server,$db_username,$db_passwort)or die ("Verbindungsabbruch");
          mysql_select_db($db_database)or die ("Datenbankauswahl fehlerhaft");

          $abfrage = "SELECT usr_name FROM Login WHERE usr_name = '$benutzername'";

          $ergebnis = mysql_query($abfrage);

          if (mysql_num_rows ($ergebnis) == 0) :
            print "Name ist noch frei";
            else:
            print "Name ist schon vergeben";
          endif;

          ?>

          mir ging es um was kurzes zackiges..ich denke mal so liege ich richtig. beim test mit zwei namen hats funktioniert ;)

          dankr

          ronny

          1. Hi,

            so geht's auch, ist aber keine so tolle Lösung, weil Du nur das Vorkommen des Benutzernamens prüfen willst. So sendest Du jetzt ein SELECT-Statement, der MySQL Server freut sich darauf Dir Daten zu senden, bereitet alles vor, aber Du rufst das eigentliche Suchergebnis nie ab. Naja... Wenn's Dich so glücklich macht... Sei froh, dass Software nicht intelligent ist...

            Ciao
            Andreas

            1. Hallo,

              Sei froh, dass Software nicht intelligent ist...

              Ronny selbst ist offenbar auch nicht sehr intelligent.
              Er weigert sich standhaft, gute Ratschlaege auf Anhieb
              zu akzeptieren...

              Ich hatte ihm beides (COUNT und mysql_num_rows)
              schon vor ein paar Tagen vorgeschlagen...
              [pref:t=62330&m=352541]
              Dieser Thread ist also das Resultat eines Doppel-/Draengelpostings.

              Gruesse,

              Thomas

              1. Ronny selbst ist offenbar auch nicht sehr intelligent.
                Er weigert sich standhaft, gute Ratschlaege auf Anhieb
                zu akzeptieren...

                Ich hatte ihm beides (COUNT und mysql_num_rows)
                schon vor ein paar Tagen vorgeschlagen...
                [pref:t=62330&m=352541]
                Dieser Thread ist also das Resultat eines Doppel-/Draengelpostings.

                nee, würde ich so nicht sagen ;)

                bitte mal mein erstes posting dazu heute lesen, hab nen comment dazu erwähnt. beide lösungen waren nicht möglich. auch wenn ich in sachen php u.ä. vielleicht nicht so fit bin, kannst du sicherlich nicht meine intelligenz beurteilen ;)

                man lernt nie aus, und deine lösungen funktionierten nunmal nicht auf anhieb, auch nicht nach "umschreiben" aber diese bringt erstmal eine lösung, ändern kann man später immer noch ;)

                ronny

                1. Hallo,

                  Dieser Thread ist also das Resultat eines Doppel-/Draengelpostings.
                  nee, würde ich so nicht sagen ;)

                  Solange ein Thread noch in der "Hauptdatei" des Forums
                  gelistet ist, gibt es _keinen_ Grund, einen neuen Thread
                  zur gleichen Fragestellung anzufangen, siehe </faq/#Q-06c>.

                  man lernt nie aus, und deine lösungen funktionierten nunmal nicht auf anhieb, auch nicht nach "umschreiben" aber diese bringt erstmal eine lösung, ändern kann man später immer noch ;)

                  Aus meinem Posting [pref:t=62330&m=352541]

                  <ZITAT aus meinem Posting [pref:t=62330&m=352541]>
                  $query="SELECT usr_name FROM Login WHERE usr_name='$wunschnameharmlos'";
                  $result = mysql_query($query, $verbindung)
                     or die("Query: $query <br>MySQL-Fehler: " . mysql_error());
                  $anzahlzeilen = mysql_num_rows($result);
                  if $anzahlzeilen>0
                    { print("Sorry, Name schon vergeben!"); /* u.s.w. */ }
                  else
                    { /* Weiterfahren... */ }
                  </ZITAT>

                  Da fehlt gerade mal eine Klammer um die Bedingung
                  if ($anzahlzeilen>0)
                  Diesen Tippfehler hat Dir hoffentlich der Parser gezeigt,
                  und Du hast ihn sofort beheben koennen.

                  Dass ich bei mysql_query() als zweites Argument
                  den Bezeichner der Verbindung angebe, ist gaengige
                  Praxis. Wenn Dein Lehrbuch bzw. Deine Beispiele
                  das nicht tun, kann ich auch nichts dafuer.
                  Falls mein Beispiel bei Dir deswegen nicht geklappt
                  hat, haettest Du auch diesen "Fehler" finden koennen.

                  Ansonsten sehe ich keinen wesentlichen Unterschied zu
                  Deiner "Loesung" in diesem Thread:
                  <ZITAT Dein Posting [pref:t=62552&m=353957]>
                  $abfrage = "SELECT usr_name FROM Login WHERE usr_name = '$benutzername'";
                  $ergebnis = mysql_query($abfrage);
                  if (mysql_num_rows ($ergebnis) == 0) :
                    print "Name ist noch frei";
                    else:
                    print "Name ist schon vergeben";
                  endif;
                  </ZITAT>

                  Mein Vorschlag in [pref:t=62330&m=352541]
                  SELECT COUNT (*) FROM Login WHERE usr_name='$wunschnameharmlos'

                  Der Vorschlag von Andreas in [pref:t=62552&m=353858]
                  SELECT COUNT(*) FROM Login WHERE usr_name="$benutzername";

                  Kann sein, dass Andreas und ich beide den gleichen Denkfehler
                  haben, aber das ist IMHO eher unwahrscheinlich...

                  Wie in diesem Thread bereits gesagt wurde: COUNT waere
                  die sinnvollere Loesung.

                  Gruesse,

                  Thomas