php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.12.2008, 18:17  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 4
PureFranky befindet sich auf einem aufstrebenden Ast
Standard MySQL-Problem: In Array, auslesen in einzelvariable geht nicht

Hi Leute, ich bin der Neue

Und wie üblich hat ein Neuling auch gleich eine Frage, und zwar:

Ich habe es geschafft, eine Datenbank zu erstellen und darin User zu registrieren. Nun müssen diese durch erstmaligen Login ihren Account aktivieren. Und da hackt es, bzw. bei dem Auslesen der richtigen E-Mail (Einloggkriterium)

PHP-Code:
  $db=@mysql_connect('localhost','root','');
  
$daten=mysql_db_query('mydb',"SELECT * From user_inactive",$db);
  
$User=mysql_fetch_array($daten);
  
$id=$User[0];
  
$email=$User[1];
  
$pwd=$User[2];
  
$x=0;
  while ((
$email=!'') AND ($x<=1))
   {
     
$k=0;
     while (
$k<=2)
       {
         echo 
$k.'<br>';
         echo 
$User[$k].'<br>';
         switch(
$k)
         {
          case 
0:
            echo 
$id.'<br>';
            echo 
$User[0].'<br>';
            break;
          case 
1:
            echo 
$email.'<br>';
            echo 
$User[1].'<br>';
            break;
          case 
2:
               echo 
$pwd.'<br>';
               echo 
$User[2].'<br>';
               break;
         }
         
$k=$k+1;
         echo 
'................<br>';
       } 
So, wo das für mich Unlogische im Pfeffer liegt
- Ich habe in meiner DB Testweise 2 Einträge erstellt
-Die Variable X bräuchte ich nicht, würde es funktionieren, wie ich will. In $nichdas, weil ich dachte, ich hätte eine reservierte Variable erwischt
-Die DB-Tabelle sieht so aus: ID(BigInt) Email(Text) Passwort(Text)

Wenn ich mein Script aufrufe bekomme ich als Ergebnis folgendes:
Code:
0
10
10
10
................
1
mail1@web.de
1
mail1@web.de
................
2
abitur
abitur
abitur
................
______________________________
0
9
9
9
................
1
mail2@gmx.net
1
mail2@gmx.net
................
2
Dingsbums
Dingsbums
Dingsbums
................
______________________________
Die Ausgabe im Einzelnen; Spalten sind mit ... getrennt, neue Zeile beginnt ab _______:

1.) Wert von $k (0-2, Für jede Spalte
2.) Wert von $User[$k]
3.) Wert von der Variable, in die $User übertragen wurde (siehe Zeile 4-6)
4.) Wert von $User[0,1,2] ; Wert von $k über eine Switchanweisung


Der Fehler
$email enthält immer den Wert 1, nie die E-Mailadresse, egal, was ich mache. EIGENTLICH müsste es mail1@web.de bzw. mail2@gmx.net enthalten, da bei der Zuweisung ja eigentlich genau so verfahren wird wie mit den Werten der Passwörter in PWD=$User[2] bzw. wie bei den Echo-Ausgaben.


Kann mir bitte jemand den Fehler erklären? Klar, ich könnte und werde wohl auch das Variablenverschiebe durch $User[1] statt $nichdas/$email einsetzen.

Aber als Anfänger interessiert mich einfach, ob das ein Fehler in meiner PHP-Konfiguration, ein Bug oder ein völlig logisches Fehlverhalten ist.


Danke für eure Aufmerksamkeit und eure Antworten im Vorraus

Mfg PureFranky

Geändert von PureFranky (20.12.2008 um 18:20 Uhr).
PureFranky ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.12.2008, 19:17  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

schau Dir das Beispiel hier an:
http://de.php.net/mysql_fetch_assoc
PHP-Code:
  <?php

$conn 
mysql_connect("localhost""mysql_user""mysql_password");

if (!
$conn) {
    echo 
"Keine Verbindung zur DB: " mysql_error();
    exit;
}

if (!
mysql_select_db("mydbname")) {
    echo 
"Kann  mydbname nicht auswählen: " mysql_error();
    exit;
}

$sql "SELECT id as userid, fullname, userstatus 
        FROM   sometable
        WHERE  userstatus = 1"
;

$result mysql_query($sql);

if (!
$result) {
    echo 
"Anfrage ($sql) konnte nicht ausgeführt werden : " mysql_error();
    exit;
}

if (
mysql_num_rows($result) == 0) {
    echo 
"Keine Zeilen gefunden, nichts auszugeben, daher Abbruch";
    exit;
}

// Solange eine Zeile mit Daten existiert, wird dies in dem assoziativen Array
// $row abgelegt.
// Anmerkung: Wenn Sie nur eine Zeile erwarten, brauchen Sie keine Schleife.
// Anmerkung: Wenn Sie extract($row) innerhalb der folgenden Schleife
//            verwenden, können Sie damit die Variablen
//            $userid, $fullname und $userstatus erzeugen.

while ($row mysql_fetch_assoc($result)) {
    echo 
$row["userid"];
    echo 
$row["fullname"];
    echo 
$row["userstatus"];
}

mysql_free_result($result);

?>
Koala ist offline  
Alt 20.12.2008, 19:38  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 4
PureFranky befindet sich auf einem aufstrebenden Ast
Standard

Öh, ja, das Beispiel ist super, weil es mir eine Möglichkeit der gesicherten Abfrage von Datenbanken gibt (mysql_num_rows() kannte ich noch nicht)

Von daher schonmal schönen Dank


Was dieses Beispiel mir jedoch nicht sagt ist, warum das Problem mit $email auftritt

Irgendwer ne idee?
PureFranky ist offline  
Alt 20.12.2008, 21:04  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Was dieses Beispiel mir jedoch nicht sagt ist, warum das Problem mit $email auftritt
Weil $email=!'' nicht $email != '' ist! Was Du machst ist

NOT (bool) {empty string}
also
NOT FALSE
also
TRUE
in der Weiterverarbeitung also
'1' bzw. 1
an $email zuzuweisen.

Die Schleife wird so auch unabhängig von der Email immer durchlaufen.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 21.12.2008, 01:39  
Neuer Benutzer
 
Registriert seit: 02.12.2008
Beiträge: 4
PureFranky befindet sich auf einem aufstrebenden Ast
Standard

Achso, danke für die Antwort

Ich programmier seid Jahren in nem Basic-Dialekt (PureBasic), da gibt es diese Zuweisungen in Wahrheitsabfragen nicht. Super, wieder was gelernt
PureFranky ist offline  
Alt 21.12.2008, 02:00  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
da gibt es diese Zuweisungen in Wahrheitsabfragen nicht.
in PHP auch nicht !

if($x = 2) wäre falsch (Zuweisung)
if($x == 2) oder if($x === 2) ist richtig.

Ein Vergleich ist letztendlich auch nur eine Rechenoperation,
die ein Ergebnis liefert.
Beschäftige Dich mal mit Assembler oder Mikroprozessoren,
dann verstehst wieso das so ist.

Auch das Prüfen eines Zustands wie if($var) ist z.B. eine Rechenoperation welche dann true oder false liefert.
Koala ist offline  
Alt 21.12.2008, 12:58  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
in PHP auch nicht !
Stimmt nicht. Jeder Ausdruck in PHP liefert einen Rückgabewert, der von der Bedingung nach bool typisiert wird und dann verarbeitet werden kann.
Typisches Beispiel:
PHP-Code:
while ($array mysql_fetch_assoc (...)) 
eigentlich
PHP-Code:
if (false !== ($array mysql_fetch_assoc (...))) 
Nach der Zuweisung an $array liefert der gesamte Zuweisungsausdruck das Array als Rückgabewert zurück. Zum Vergelich mit FALSE wird das Array nach BOOL konvertiert und hernach der Vergleich ausgeführt.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 21.12.2008, 16:04  
Erfahrener Benutzer
 
Registriert seit: 28.09.2008
Beiträge: 1.168
PHP-Kenntnisse:
Fortgeschritten
Koala befindet sich auf einem aufstrebenden Ast
Standard

ja - aber in if-Abfragen macht eine Zuweisung keinen Sinn
(und daruas reusltieren auch viele Fehler)
z.B: if($x = 0)
Koala ist offline  
Alt 21.12.2008, 16:41  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Was ich eben im while geschrieben habe kannst Du auch für einen Datensatz in ein if () packen. Siehe Beispiel darunter. Das ist auch durchaus üblich. Bei Dateiverarbeitung gilt dasselbe. Oder DB Verbindungsaufbau. Schließlich und endlich kann bspw. sowas sinnvoll sein:
PHP-Code:
<?
$email 
$_GET['email'] or die ('unerlaubter Aufruf.');
echo 
$email;
bzw.
PHP-Code:
<?
if (!$email $_GET['email']) {
  
do_anything ();
  die (
'unerlaubter Aufruf.');
  }
echo 
$email;

Die Aussage stimmt so also nicht. Mein Netbeans markiert solche stellen übrigens im Editor mit einem Achtung-Zeichen.

Ein Großteil der Fehler kann so vermieden werden:
PHP-Code:
if (== $x
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (21.12.2008 um 16:49 Uhr).
nikosch ist gerade online  
Alt 21.12.2008, 23:19  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von Koala Beitrag anzeigen
ja - aber in if-Abfragen macht eine Zuweisung keinen Sinn
(und daruas reusltieren auch viele Fehler)
z.B: if($x = 0)
Das ist so nicht richtig.
Man muss sich nur im Klaren sein, dass es eine Zuweisung ist und kein Vergleich.

PHP-Code:
<?php
if ($Result func($para))
{
... 
Mach was mit $Result oder auch nicht.
}
?>
ist durchaus korrekt und sinnvoll.

Es ist sogar etwas kürzer als
PHP-Code:
<?php
$Result 
func($para);
if (
$Result)
{
... 
Mach was mit $Result
}
?>
Wobei das nicht wirklich relevant ist.
Allerdings wird es interessanter, wenn es um die Bedingung für eine Schleife geht.

Das sieht dann so aus:
PHP-Code:
<?php
$Result 
func($para);
while (
$Result)
{
... 
Mach was mit $Result
$Result 
func($para);
}
?>
Das birgt immer das Risiko, dass man bei einer Änderung des Funktionsaufrufs vergisst, den identischen zweiten Aufruf auch zu ändern.

Insofern ist das hier vorzuziehen.
PHP-Code:
<?php
while ($Result func($para))
{
... 
Mach was mit $Result
}
?>
Allerdings um hier etwas klugzuscheißen (und Dir recht zu geben) :
Sinn macht das natürlich trotzdem keinen, weil es in der deutschen Sprache einfach nicht möglich ist, dass etwas "einen Sinn macht". Es kann nur "einen Sinn haben" oder "einen Sinn ergeben" oder sonst was.
Aber ich glaube nicht, dass Du das aussagen wolltest.
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Auswahlfeld in MYSQL abspeichern ( Array Problem ) VodKen PHP Tipps 2008 16 14.05.2008 14:02
Funktions Problem mit Array andrew22 PHP Tipps 2007 11 03.07.2007 17:30
Mysql und Array Problem PHP Tipps 2006 2 16.05.2006 09:39
Zweidimensionales Array auslesen u wieder in Array schreiben Lobo PHP Tipps 2006 7 20.04.2006 11:37
[Erledigt] array im array auslesen PHP Tipps 2006 3 15.03.2006 21:33
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
[Erledigt] bestimmte ID's auslesen als array PHP Tipps 2007 2 31.10.2005 20:23
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Array aus MySQL auslesen und permutieren? PHP Tipps 2005-2 2 24.07.2005 14:11
mysql mittels php abfragen- array problem PHP Tipps 2005-2 6 20.07.2005 15:21
Array in Session speichern und wieder auslesen Riot PHP Tipps 2005-2 3 08.07.2005 11:43
Assoziatives Array auslesen phpwiki PHP Tipps 2005 4 21.04.2005 13:27
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-tipps-2008/49978-mysql-problem-array-auslesen-einzelvariable-geht-nicht.html, array $row mysql einzeln ausgeben, mysql array variable, sql wahrheitsabfragen, php sql array auslesen und inhalt in variable, $pwd = \$user[2]\;, php ersten eintrag aus array auslesen, mysql array auslesen, arrays einzeln auslesen java netbeans, beispiele für arrays in pure basic, php werte einzeln aus array lesen, purebasic datenbank ausgeben, sql wahrheitsfragen, array purebasic tabelle zuweisen, php array auslesen und einzeln als variablen speichern, arrayin einzelvariablen umwandeln php, mysql where array einzeln, mysql zeile array einzeln, sql daten in netbeans auslesen, php mysql wert nicht als array auslesen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:39 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum