datenbank feld vergleich
Ronny
- php
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
Hi,
weiss nicht, aber generell würde ich es so machen:
SELECT COUNT(*) FROM Login WHERE usr_name="$benutzername";
Ciao
Andreas
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
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
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
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
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
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
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