Habs eh schon... Trotzdem !
PHP/MySQL Script wird nicht angezeigt
Einklappen
X
-
Zitat von piratos Beitrag anzeigenIch muss das anders ausdrücken
PHP-Code:$row = mysql_fetch_object($login_query);
Beispiel:
PHP-Code:if ($row = mysql_fetch_object($login_query)) {
$userid = $row->id;
} else {
$userid = null;
}
Kommentar
-
Zitat von PHP&&C++ Beitrag anzeigenHabs eh schon... Trotzdem !
Danke
PeterNukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Kommentar
-
Zitat von h3ll Beitrag anzeigenTrotzdem gehört da das while() nicht hin. Wenn man nur einen Wert erwartet, sollte man keine Schleifen benutzen.
Jein
Und - mal am Rande - Performance:
Jeweils das beste Ergebnis aus 10 Abfragen:
while 4.6014785766602E-5
if 5.1021575927734E-5
Ist zwar für den Fall hier völlig uninteressant, zeigt aber das man nichts verliert.
Kommentar
-
nur mal so zum Verständniss, vielleicht gibt es ja auch andere Lösungen, ich würde es zB. so machen.
PHP-Code:$row = mysql_fetch_object($login_query);
if(!empty($row['user_id'])) {
echo 'Hallo du .$row['user_id'];
}
else {
echo 'Zugangsdaten falsch!';
}
ich muß auch gestehen das ich mysql_fetch_object nicht verwende.
Kommentar
-
Zitat von piratos Beitrag anzeigenWer lesen kann hat manchmal Vorteile:
Für Leute aus der anderen Region - das bedeutet man kann das eine wie das andere machen, wobei ich persönlich auch if bevorzugen würde, aber es gibt keinerlei Zwang bis auf die Meinung anderer.
Und - mal am Rande - Performance:
Jeweils das beste Ergebnis aus 10 Abfragen:
while 4.6014785766602E-5
if 5.1021575927734E-5
Ist zwar für den Fall hier völlig uninteressant, zeigt aber das man nichts verliert.
Natürlich kann man es machen und while verwenden. Man kann sogar sehr vieles machen, ohne dass es technisch gesehen "falsch" ist. Viele Wege führen nach Rom. Aber besser ist, wenn der Weg dreispurig, asphaltiert und vernünftig Beschildert ist. Man sollte niemanden auf den Schotterweg schicken, auch wenn er auch damit zum Ziel kommt.
Kommentar
-
den guten Programmierstil
Schreibe deinen Stil wie es dir gefällt aber bitte trete nicht als selbst ernannter Stilayatollah auf und vor allem zwinge deinen Stil den anderen nicht auf bzw. versuche nicht andere diesbezüglich ständig zu bevormunden.
Kommentar
-
Zitat von piratos Beitrag anzeigenIch möchte dir nicht zu Nahe treten und auch nicht beleidigen, aber das geht mir langsam auf den Senkel.
Schreibe deinen Stil wie es dir gefällt aber bitte trete nicht als selbst ernannter Stilayatollah auf und vor allem zwinge deinen Stil den anderen nicht auf bzw. versuche nicht andere diesbezüglich ständig zu bevormunden.
Von mir aus kannst du in deinem stillen Kämmerlein so programmieren, wie du es für richtig haltest. Aber bring nicht andere dazu zu glauben, dass es "eh egal" ist, wie sie es machen. Das ist es nämlich nicht.
Und ich denke auch, dass mir hier viele Recht geben werden. Und denen hab ich bestimmt nicht "meinen" Stil aufgezwungen, sondern das sagt einem einfach der gesunde "Programmierverstand".Zuletzt geändert von h3ll; 29.07.2009, 21:39.
Kommentar
-
Jetzt ist hier Ruhe im Karton. Sonst hau ich dazwischen.
PeterNukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Kommentar
-
Okay also meine Lösung:
Code:[COLOR=#000000][FONT=Courier New][COLOR=#0000cc]<?php[/COLOR][/FONT] [FONT=Courier New][COLOR=#000000]$username [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$_POST[/COLOR][COLOR=#006600][[/COLOR][COLOR=#cc0000]'username'[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]];[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000cc]$password [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$_POST[/COLOR][COLOR=#006600][[/COLOR][COLOR=#cc0000]'password'[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]];[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000cc]$session [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]session_id[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]();[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000cc]$connection [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]mysql_connect[/COLOR][COLOR=#006600]([/COLOR][COLOR=#cc0000]'localhost'[/COLOR][COLOR=#006600],[/COLOR][COLOR=#cc0000]'user'[/COLOR][COLOR=#006600],[/COLOR][COLOR=#cc0000]'geheim'[/COLOR][COLOR=#006600]) or die([/COLOR][COLOR=#cc0000]"Keine Verbindung zum Server."[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]); [/COLOR][/FONT] [FONT=Courier New][COLOR=#0000cc]mysql_select_db[/COLOR][COLOR=#006600]([/COLOR][COLOR=#cc0000]'datenbank'[/COLOR][COLOR=#006600]) or die([/COLOR][COLOR=#cc0000]"Keine Verbindung zur Datenbank."[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]); [/COLOR][/FONT] [FONT=Courier New][COLOR=#0000cc]$pass [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]md5[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$password[/COLOR][/FONT][FONT=Courier New][COLOR=#006600]);[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000cc]$user [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$username[/COLOR][/FONT][FONT=Courier New][COLOR=#006600];[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000cc]$login [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#cc0000]'SELECT id FROM members WHERE name="'[/COLOR][COLOR=#006600].[/COLOR][COLOR=#0000cc]$user[/COLOR][COLOR=#006600].[/COLOR][COLOR=#cc0000]'" AND pass="'[/COLOR][COLOR=#006600].[/COLOR][COLOR=#0000cc]$pass[/COLOR][COLOR=#006600].[/COLOR][COLOR=#cc0000]'" LIMIT 1';[/COLOR][/FONT][/COLOR] [COLOR=#000000][FONT=Courier New][COLOR=#0000cc]$login_query [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]mysql_query[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$login[/COLOR][COLOR=#006600]);[/COLOR][/FONT] [FONT=Courier New][COLOR=#006600]while([/COLOR][COLOR=#0000cc]$row [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]mysql_fetch_object[/COLOR][COLOR=#006600]([/COLOR][COLOR=#0000cc]$login_query[/COLOR][COLOR=#006600]))[/COLOR][/FONT][FONT=Courier New][COLOR=#006600] {[/COLOR][/FONT] [FONT=Courier New][COLOR=#0000cc]$userid [/COLOR][COLOR=#006600]= [/COLOR][COLOR=#0000cc]$row[/COLOR][COLOR=#006600]->[/COLOR][COLOR=#0000cc]id[/COLOR][/FONT][FONT=Courier New][COLOR=#006600];[/COLOR][/FONT] [FONT=Courier New][COLOR=#006600]}[/COLOR][/FONT] [FONT=Courier New][COLOR=#006600]echo [/COLOR][COLOR=#cc0000]'Willkommen User-Nummer '[/COLOR][/FONT][FONT=Courier New][COLOR=#006600];[/COLOR][/FONT] [FONT=Courier New][COLOR=#006600]echo [/COLOR][COLOR=#0000cc]$userid[/COLOR][/FONT][COLOR=#006600][FONT=Courier New];[/FONT][/COLOR] [FONT=Courier New][COLOR=#0000cc]?>[/COLOR][/FONT] [FONT=Courier New]<form action="login.php" method="post">[/FONT] [FONT=Courier New] Benutzername: <input type="text" name="username" /><br />[/FONT] [FONT=Courier New] Passwort: <input type="password" name="password" /><br />[/FONT] [FONT=Courier New] <input type="submit" name="submit" value="Einloggen" />[/FONT] [FONT=Courier New] </form>[/FONT][/COLOR]
Kommentar
-
Zitat von piratos Beitrag anzeigenIch muss das anders ausdrücken
PHP-Code:$row = mysql_fetch_object($login_query);
Notice: Trying to get property of non-object
Die While-Schleife macht ja genau das gleiche - sie wendet mysql_fetch_XY so lange an, bis der Rückgabewert false lautet.
Wenn es kein Ergebnis gibt, dann wird der Anweisungsblock der While-Schleife auch nicht durchlaufen.
Die von dir genannte Meldung bekommt man erst im nächsten Schritt, wenn man versuchen würde, auf Eigenschaften von $row zuzugreifen, obwohl $row eben nicht das erwartete Objekt, sondern auch wieder nur false enthält.
Und die While-Schleife "rettet" im eingangs geposteten Script auch nicht - wenn die nicht durchlaufen wird, dann hat halt $userid keinen Wert, und ist beim anschliessenden Versuch, es auszugeben, nicht vorhanden und wirft dann an der Stelle eine entsprechende Meldung.
Die While-Schleife finde ich jedenfalls auch fehl am Platze, wenn lediglich ein Datensatz erwartet wird. Da nutze ich mysql_num_rows, und entscheide an Hand dessen, ob ich mir einen Wert aus diesem einen Datensatz zur Ausgabe hole, oder melde dass gar nichts gefunden wurde.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Es kann hier nie um die letzte Ausarbeitung eines geposteten Fragescripte gehen, das wäre völlig unsinnig, da kommt man wegen kleinster Fragestellung ins Geschwafel ohne Ende und genau das hilft dem Fragenden kein Stück weiter, ja macht sogar das Forum selbst zunehmend uninteressanter.
Ich z.B. würde immer eine DB Klasse (nämlich meine) verwenden, da dort alles abgehandelt ist.
So eine normale Abfrage sieht da z.B. technisch so aus (Auszug):
PHP-Code:$result = mysqli_query($this->db,$sql);
if (preg_match("/^(select|explain|show|describe)\s+/i", $sql) )
{
$this->num_rows = mysqli_num_rows($result);
}
elseif (preg_match("/^(insert|delete|update|replace)\s+/i", $sql) )
{
$this->rows_affected = mysqli_affected_rows($this->db);
}
Man muss auch klar sehen, das hier in der Regel Leute Fragen die nicht so gewaltige Kenntnisse haben.
Ein solches Ausschweifen würde diesen nichts bringen und nur höchst verunsichern.
So auch das ewige Stilgeschwafel - das macht einen Anfänger bestimmt nicht schlauer.
Wer einen tollen Stil hat oder sich stur an eine interne Arbeitsanweisung seiner Firma hält und meint das wäre Gott und die Welt - ok - seine Sache, der soll das doch hier in ein Tutorial verkünden, das können dann alle lesen und sich dran halten oder nicht und nicht immer dann die Wundertüte öffnen, wenn einem nichts anderes mehr einfällt.
So etwas als tollen Stil zu bezeichnen kann ja wohl nicht das richtige sein.
PHP-Code:if ($row = mysql_fetch_object($login_query)) {
$userid = $row->id;
} else {
$userid = null;
}
PHP-Code:// var deklarieren und initalisieren
$userid = null;
if ($row = mysql_fetch_object($login_query))
$userid = $row->id;
Kommentar
Kommentar