Portal > Foren > PHP > PHP-Programmierung > Leere Variable wird nicht ausgegeben
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 11.04.2006, 19:57 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 11.04.2006
Beiträge: 4
Standard Leere Variable wird nicht ausgegeben

Hallo,

bei folgendem Code für eine Kennwortabfrage erhalte ich bei übereinstimmendem Wert in der Datenbank eine korrekte Ausgabe.
Bei einem falschen Kennwort müsste die entsprechende Variable doch eigentlich leer sein (da nicht in Datenbank vorhanden). Bei einem Test mit var_dump erhalte ich aber nur eine leere Seite, keinen Ausgabewert true/false.

Hat jemand einen Tipp woran das liegen könnte?

Vielen Dank im voraus!


<?php

session_start ();

if(isset($_POST['Kennwort'])

AND
strcmp(trim($_POST['Kennwort']),'') != 0 )

$Kennung=$_POST['Kennwort'];

$dbID=mysql_connect ('localhost', 'root') or die(mysql_error());

mysql_select_db('login', $dbID)or die(mysql_error());

$sqlZiel="SELECT Ziel FROM kennwortabfrage WHERE Kennwort = '$Kennung'" or die(mysql_error());

$sqlAbfrage=mysql_query($sqlZiel)or die(mysql_error());

$Ergebnis=mysql_fetch_array($sqlAbfrage)or die(mysql_error());

mysql_close();

var_dump(isset($Ergebnis[Ziel]));

var_dump(empty($Ergebnis[Ziel]));


/* if(isset($Ergebnis[Ziel])) {


header("Location: $Ergebnis[Ziel]");

exit();

}

else {


//header("Location: falscheskennwort.php"); }


exit(); }

} */

?>
Ladbroke ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.04.2006, 22:45 Nach oben    #2
Jay
Gast
 
Beiträge: n/a
Standard

hehe. Kannst du mal nen Link zu deinem Login posten? Möchte nämlich eine SQL Injection durchführen!!!

Wie wärs wenn du Tags verwenden würdest?

PHP-Code:
$sqlZiel="SELECT Ziel FROM kennwortabfrage WHERE Kennwort = '$Kennung'" or die(mysql_error()); 
Wie soll bei einer Zuweisung ein MySQL Fehler autreten?!
Zitat:
var_dump(isset($Ergebnis[Ziel]));

var_dump(empty($Ergebnis[Ziel]));
Man verwendet grundsätzlich Doppelte- oder Einfachanführungszeichen für den Index!

Man oh man ... so einen unformatierten Code kann man ja net lesen.
Lies am besten mal das Handbuch und komm danach wieder.
www.php.net/manual/
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 08:37 Nach oben    #3
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.214
Standard

was dir auf jeden Fall helfen sollte:
Ein sessionbasiertes Loginsystem


du solltest lernen deinen Code sauber zu schreiben, damit auch andere ihn lesen können!
Dafür helfen auch die BBCode-Tags dieses Forums:
[php]php-code[/php]


ich habe deinen Code mal um ein paar Punkte reduziert...

Ich habe ganz bewusst auf eine Überprüfung der Variable verzichtet. Das muss auf jeden Fall rein. SQL-Injection wurde bereits angesprochen. So kann es also definitiv nicht bleiben!



Was kommt denn raus, wenn du folgendes ausprobierst?

PHP-Code:
<?php
  error_reporting
(E_ALL);
  
session_start();

  
// Datenbank-Parameter:
  
$db_host 'localhost';   // Server
  
$db_user 'root';        // username
  
$db_pw   '';            // Passwort
  
$db_name 'login';       // Tabelle


  // Verbindung zur Datenbank herstellen.
  
mysql_connect($db_host$db_user$db_pw) or exit('Fehler bei der Verbindung zum Datenbank-Server.');
  
mysql_select_db($db_name) or exit('Fehler: Tabelle konnte in der Datenbank nicht gefunden werden.');

  
$sql "SELECT
              `Ziel`
          FROM
              `kennwortabfrage`
          WHERE
              `Kennwort` = '"
.$_POST['kennwort']."'
            AND
              `user` = '"
.$_POST['user']."'
          LIMIT 1"
;
  
$result mysql_query($sql) or exit('Fehler: '.mysql_error());

  
$row mysql_fetch_assoc($result) or exit('Fehler: '.mysql_error());


  
// Testweise Ausgabe:
  
echo '<pre>';
  
print_r($row);
  echo 
'</pre>';


  
mysql_close();

  if(
mysql_num_rows($result) == 1)
  {
    echo 
'user ist 1x in der Datenbank';
#    header(...);
  
}
  else
  {
    echo 
'user ist nicht in der Datenbank';
#    header(...);
  
}

?>
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!

Geändert von Jann Hendrik (26.05.2007 um 12:42 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 08:50 Nach oben    #4
Neuer Benutzer
 
Registriert seit: 11.04.2006
Beiträge: 4
Standard

Fat Tony,

Du warst sicher auch schon mal irgendwo Anfänger!?

Stell Dir vor, Dein Arzt erläutert Dir Deine Krankheit nur in Fachchinesisch. Auf eine kurze Rückfrage deinerseits verweist er auf die einschlägige Fachliteratur mit dem Angebot, dass Du gerne zu einem weiteren Gespräch vorbeikommen kannst, wenn Du Dich dort richtig eingelesen hast.

In (Nicht-Programmier-)Boards wo ich Ahnung habe, gebe ich auch Auskunft, ohne mich über Anfänger zu ereifern. Man sollte beim zwischenmenschlichen Umgang keinen Unterschied zwischen face-to-face und Internet-Kontakt machen.

Anders ausgedrückt (In den Regeln für die Nutzung des Supportforums des Projects Developer's Guide §6
"Sei geduldig mit Anfängern oder mit Leuten, die sich in die Foren "verirrt" haben. Niemand ist vollkommen, und wir haben alle mal "klein" angefangen!
Allen, die denken, dass sie etwas Besseres sind sei nochmals §1 Absatz 1 ans Herz gelegt."

Prima! Danke Dir für die Mühe, Jann Hendrik!

Code funktioniert einwandfrei bei einem in der DB vorhandenen Kennwort. Allerdings erhalte ich bei Eingabe eines nicht in der DB vorhandenen Kennworts eine leere Seite mit der Meldung "Fehler". (Ich hatte zum Testen nur

$db_pw = ''; // Passwort

und

, $db_pw aus $db_pwmysql_connect($db_host, $db_user, $db_pw)

sowie

$sql = ..... AND
`user` = '".$_POST['user']."'

herausgenommen.






PHP-Code:
<?php
  error_reporting
(E_ALL);
  
session_start();

  
// Datenbank-Parameter:
  
$db_host 'localhost';   // Server
  
$db_user 'root';        // username
  //$db_pw   = '';            // Passwort
  
$db_name 'login';       // Tabelle


  // Verbindung zur Datenbank herstellen.
  
mysql_connect($db_host$db_user) or exit('Fehler bei der Verbindung zum Datenbank-Server.');
  
mysql_select_db($db_name) or exit('Fehler: Tabelle konnte in der Datenbank nicht gefunden werden.');

  
$sql "SELECT
              `Ziel`
          FROM
              `kennwortabfrage`
          WHERE
              `Kennwort` = '"
.$_POST['Kennwort']."'
            
          LIMIT 1"
;
  
  
$result mysql_query($sql) or exit('Fehler: '.mysql_error());

  
$row mysql_fetch_assoc($result) or exit('Fehler: '.mysql_error());


  
// Testweise Ausgabe:
  
echo '<pre>';
  
print_r($row);
  echo 
'</pre>';


  
mysql_close();

  if(
mysql_num_rows($result) == 1)
  {
    echo 
'user ist 1x in der Datenbank';
#    header(...);
  
}
  else
  {
    echo 
'user ist nicht in der Datenbank';
#    header(...);
  
}

?>
// edit by Jann Hendrik: 2 Beiträge zusammengefasst und php-tag hinzugefügt

Geändert von Jann Hendrik (12.04.2006 um 11:05 Uhr).
Ladbroke ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 10:48 Nach oben    #5
Jay
Gast
 
Beiträge: n/a
Standard

Lies dir diesen Ratschlag von Jann Hendrik genau durch und überlege was du falsch gemacht hast.
Zitat:
Zitat von Jann Hendrik
du solltest lernen deinen Code sauber zu schreiben, damit auch andere ihn lesen können!
Dafür helfen auch die BBCode-Tags dieses Forums:
[ php ] php-code [ /php ]
MfG Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 11:28 Nach oben    #6
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.214
Standard

wie lautet denn die Ausgabe?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 12:00 Nach oben    #7
Neuer Benutzer
 
Registriert seit: 11.04.2006
Beiträge: 4
Standard

Es wird nur eine leere Seite mit der Meldung "Fehler" ausgegeben.



Fat Tony,

...... "Lies dir diesen Ratschlag von Jann Hendrik genau durch und überlege was du falsch gemacht hast."


mir ist schon klar, dass man in 5 Tagen nicht PHP lernen kann. Ich bin bestenfalls ein normaler, interessierter User und kein Programmierer. Ich schaue mir Code-Vorschläge immer an und versuche das Ganze nachzuvollziehen ggf. auf meine Fragestellung umzubauen.
Aber was soll dieses Salami-Oberlehrergehabe (es fehlt noch irgendwo eine Kleinigkeit, ich sag' aber nicht wo, ich will mein Herrschaftswissen noch ein bisschen auskosten)? Wenn's so leicht ist, gib' mir einen Tipp. Wenn meine Anfragen zu unbedeutend sind, dann denk' Dir doch einfach Deinen Teil.
Mag' ja sein, dass Du mit 15 schon recht fit bist im Programmieren, hervorragend. Wär schön, wenn der normale Umgang mit andern - auch mit Anfängern - dabei nicht zu kurz kommt. Im Englischen gibt es den Ausdruck "nerd"; ich persönlich glaube, dass dies ein Vorurteil ist - allerding bin ich auch noch nicht so lange in Computer- und Programmierforen aktiv. Es wär schön, wenn sich die Art der Kommunikation jetzt einfach mal normalisieren liesse.
Ladbroke ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 12:16 Nach oben    #8
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.214
Standard

was Fat Tony damit sagen wollte hat er ja auch nochmal zitiert. Damit das lesen von Quellcode vereinfacht wird ist es ratsma diesen einzurücken.

Außerdem bietet diese Forum die Möglichkeit es farbig darzustellen - das wollte er damit sagen....


Ok, für die Fehlermeldung können nur 2 Zeilen verantwortlich sein.

Daher habe ich diese mal modifiziert:
PHP-Code:
<?php
  error_reporting
(E_ALL);
  
session_start();

  
// Datenbank-Parameter:
  
$db_host 'localhost';   // Server
  
$db_user 'root';        // username
  //$db_pw   = '';            // Passwort
  
$db_name 'login';       // Tabelle


  // Verbindung zur Datenbank herstellen.
  
mysql_connect($db_host$db_user) or exit('Fehler bei der Verbindung zum Datenbank-Server.');
  
mysql_select_db($db_name) or exit('Fehler: Tabelle konnte in der Datenbank nicht gefunden werden.');

  
$sql "SELECT
              `Ziel`
          FROM
              `kennwortabfrage`
          WHERE
              `Kennwort` = '"
.$_POST['Kennwort']."'

          LIMIT 1"
;

  
$result mysql_query($sql) or exit('Fehler #1: '.mysql_error());

  
$row mysql_fetch_assoc($result) or exit('Fehler #2: '.mysql_error());


  
// Testweise Ausgabe:
  
echo '<pre>';
  
print_r($row);
  echo 
'</pre>';


  
mysql_close();

  if(
mysql_num_rows($result) == 1)
  {
    echo 
'user ist 1x in der Datenbank';
#    header(...);
  
}
  else
  {
    echo 
'user ist nicht in der Datenbank';
#    header(...);
  
}

?>

Welcher Fehler kommt nun?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 12:25 Nach oben    #9
Jay
Gast
 
Beiträge: n/a
Standard

hehehehe . Deine Vorträge sind immer wieder bringen mich immer wieder zum lachen.

Zitat:
Hat jemand einen Tipp woran das liegen könnte?
Ja. Ich verrate es dir! Das Script arbeitet 100% korrekt!

Was macht folgende Zeile?
PHP-Code:
  $row mysql_fetch_assoc($result) or exit('Fehler #2: '.mysql_error()); 
Sie weißt $row ein Array zu und bricht mit exit ab wenn die Variable $row zB den Wert NULL oder false hat.
Genau das ist der Fall wenn du ein falsches Passwort eingibst.

MfG Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 12:27 Nach oben    #10
Neuer Benutzer
 
Registriert seit: 11.04.2006
Beiträge: 4
Standard

Merci vielmals!

Fehlermeldung ist: Fehler #2:

Jetzt klappt alles einwandfrei. Brilliant. Vielen Dank nochmal!

..... Leider gab's doch noch ein Fehlermeldung. Diesmal wieder Fehler 1 (Eingabe eines in der DB vorhandenen Kennworts).

Fehlermeldung: Resource id #3
Warning: Cannot modify header information - headers already sent by (output started at C:\Apache\xampp\htdocs\login\IDcheck.inc.php:29) in C:\Apache\xampp\htdocs\login\IDcheck.inc.php on line 44

Die erste Codeversion funktionierte also nur bei Eingabe eines in der DB vorhandenen Kennwortes. Die zweite, abgeänderte Codeversion nur bei Eingabe eines nicht in der DB vorhandenen Kennworts. Ich habe die Fehlermeldung einfach so interpretiert, dass der abgefragte Wert der DB (in Variable) nicht sowohl als if-Parameter als auch als header-Parameter eingesetzt werden kann. Ich weiss zwar nicht, ob ich das richtig gedeutet und fachgerecht ausgedrückt habe, zumindest klappt's mit folgender Ergänzung:
PHP-Code:
......

 
$result mysql_query($sql);   //or exit('Fehler #1: '.mysql_error());
 
$numbrow mysql_query($sql);
  
  
$row mysql_fetch_assoc($numbrow); // or exit('Fehler #2: '.mysql_error()); //falsche Fehlermeldung
$destination mysql_fetch_array($result);

 
mysql_close();

if(
mysql_num_rows($numbrow) == 1)
  {
    
header("Location: $destination[Ziel]");

....... 

Geändert von Jann Hendrik (12.04.2006 um 16:06 Uhr). Grund: trippelposting
Ladbroke ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 15:31 Nach oben    #11
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

Naja du kannst ja auch nicht eine echoausgabe tätigen und danach noch den header ändern. Warhscheinlich also einfach ein echo zuviel oder ein header zuviel
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
php variable in JS anzeigen Galge JavaScript und AJAX 9 28.03.2007 14:44
[Smarty] Variable in variable aus Konfigurationsdatei umwandeln? thrawn PEAR, PECL und Frameworks 9 20.07.2006 11:52
[smarty] Modifier betrifft alle Variablen die ausgegeben werden freezer PEAR, PECL und Frameworks 7 01.03.2006 18:24
[Realisierung] [Brainstroming] Variable Wertanzahl Du-weisst-schon-wer Datenbanken 5 08.01.2006 20:41
Variablennamen mit Variable. Creativ PHP-Programmierung 9 30.11.2005 08:40


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:16 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44