mysql_fetch_object enthält kein Ergebnis

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • mysql_fetch_object enthält kein Ergebnis

    Ich habe folgendes Problem:

    Quellcode

    1. <?
    2. include 'connect.php';
    3. if(isset($_GET['username']))
    4. {
    5. $res = mysql_query("SELECT COUNT(`username`) FROM `user` WHERE `username` = '".$_GET['username']."' AND `passwort` = '". $_GET['passwort'] ."'");
    6. $row = mysql_fetch_object($res);
    7. if($row[0] == 1) {
    8. echo('login OK');
    9. } else {
    10. die('Ein Fehler ist aufgetreten!');
    11. }
    12. }
    13. //... Formularfeld ...
    Alles anzeigen

    Ich erhalte immer die Fehlermeldung "Ein Fehler ist aufgetreten!". Die $row-abfrage scheint also falsch zu sein, obwohl alle Vaiablen ordnungsmeäß übergeben werden. Die Datenbank wird auch abgefragt. Aber es scheint so als ob kein gültiger Count-Wert zurückgegeben wird. In einer einfachen SQL-Abfrage klappt das. Nur mit dem Script hier nicht.
  • Woher kommen die `Zeichen her? Lass die mal weg :)

    Und ich mache es nicht mit mysql_fetch_object sondern mit mysql_fetch_row, das ist aber jeden slebst überlassen.

    Quellcode

    1. <?
    2. include ("connect.php");
    3. if(isset($_GET['username']))
    4. {
    5. $res = mysql_query("SELECT COUNT(username) FROM user WHERE username='".$_GET['username']."' AND passwort='". $_GET['passwort'] ."'");
    6. list($anzahl) = mysql_fetch_row($res);
    7. if(anzahl == "1") {
    8. echo('login OK');
    9. } else {
    10. die('Ein Fehler ist aufgetreten!');
    11. }
    12. }
    Alles anzeigen
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Was ich mir auch überlegt habe, warum übergibst du Passwort und Benutzername via GET? Ich würde das via POST machen... und was d0nUt schon sagte auch...
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Danke für die Antworten.

    Mit "mysql_fetch_row" anstatt "mysql_fetch_object" hats geklappt, wobei ich nicht weiß warum. Hätte ja auch vorher gehen müssen, oder? Was ist denn der Unterschied zwischen "mysql_fetch_row" und "mysql_fetch_object". Also zumindest in diesem Fall. Es wird ein Objekt und gleichzeitg einen Zeile zurückgegeben. Na ja man merkt bin noch ein Laie. Aber jetzt funkts ja.

    Den Rat von dOnUt habe ich befolgt und eingesetzt. mysql_real_escape_string ist eingefügt. So hat meine Datenbank jetzt zumindest keine Interpretationsschwierieiten mehr. Danke dafür. :D

    Das mit dem $_GET und $_POST ist folgendermaßen. Ich übersenden mit dem POST zwar die beiden Variablen "username" und "passwort", aber ich brauche auch noch andere Variablen aus dem Formular (z.B. $lang). Die habe ich mittels hidden-field eingesetzt. Aber mit Post werden die nicht mitübergeben.

    Ich würde auch lieber Post nehmen. Wenn jemand weiß wie das geht, dann her mit den Antworten.
  • "mycros" schrieb:

    Mit "mysql_fetch_row" anstatt "mysql_fetch_object" hats geklappt, wobei ich nicht weiß warum. Hätte ja auch vorher gehen müssen, oder?

    Nein, das fetch_object liefert ein Objekt - kein Array. Zugriff nur mit ob->var.
    Wenn du dir mal unsicher bist, was so im Objekt drin ist: Mit print_r($arr) gibst du arrays aus, mit var_dump($ob) das Objekt.

    "mycros" schrieb:

    Die habe ich mittels hidden-field eingesetzt. Aber mit Post werden die nicht mitübergeben.

    Quellcode

    1. echo '<input type="hidden" name="user" value="'.$var'" />';


    Gib uns mal deinen Quelltext, wird kein großes Problem sein.
  • richtig man kann auch hidden-felder via post übergeben du kannst es dann ganz normal mit $_POST abrufen wie d0nUt schon geschrieben hat. Nur würde ich alles versuchen um zu verhindern das man Benutzername und PW via GET zu übergeben muss. Was ich auch noch machen würde wo wir gerade beim thema sicherheit sind ist http://de.php.net/manual/de/function.htmlspecialchars.php htmlspecialchar(), somit kannst du unterbinden das jemand unerlaubten Code in deine Inputfelder klatscht.

    so long
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert, der letzte Netzknoten kommerzialisiert, die letzte Newsgroup moderiert wird, werdet Ihr merken, dass man mit Geld allein nicht programmieren kann.
  • Hier mein Code (auszug):

    Quellcode

    1. <?
    2. if(isset($_POST['username']))
    3. {
    4. $res = mysql_query("SELECT COUNT(username) FROM gvs_user WHERE username = '".mysql_real_escape_string($_POST['username'])."' AND passwort = '".mysql_real_escape_string($_POST['passwort'])."'");
    5. $row = mysql_fetch_row($res);
    6. if($row[0] == 1) {
    7. echo('login OK');
    8. } else {
    9. $fehlercode = $fehler_100;
    10. include ("templates/login.html");
    11. include ("footer.php");
    12. }
    13. }
    14. ?>
    Alles anzeigen

    ... normalen html-code dazwischen ...

    Quellcode

    1. <form method="post" action="<?= $_SERVER['PHP_SELF']; ?>">
    2. <p><strong><font color="<? echo $pg_headline_color; ?>"><? echo $fehler_100; ?><? echo $fehlercode; ?></font></strong></p>
    3. <table>
    4. <tr>
    5. <td>Benutzer:</td>
    6. <td><input name="username" type="text" id="username" /></td>
    7. </tr>
    8. <tr>
    9. <td>Passwort:</td>
    10. <td><input name="passwort" type="password" id="passwort" /></td>
    11. </tr>
    12. <tr>
    13. <td>&nbsp;</td>
    14. <td><input type="submit" value="Anmelden" /></td>
    15. </tr>
    16. </table>
    17. <input name="user" type="hidden" id="user" value="<? echo $user; ?>" />
    18. <input name="pass" type="hidden" id="pass" value="<? echo $pass; ?>" />
    19. <input name="ref" type="hidden" id="ref" value="<? echo $ref; ?>" />
    20. <input name="lang" type="hidden" id="lang" value="<? echo $lang; ?>" />
    21. </form>
    Alles anzeigen


    ... normalen html-code dzu schluss ...


    Die hidden-fields werden nicht via post übergeben. username und passwort schon.
  • Die Werte werden nicht befüllt. Das erkenne ich daran, dass ein interner Includeaufruf nicht funktioniert.

    Es erscheint folgende Fehlermeldung:

    Warning: main(includes//inc_login.php): failed to open stream: No such file or directory in /srv/www/vhosts/mycros.de/subdomains/root/httpdocs/paid/login.php on line 3

    In Line 3 steht folgendes: include ('includes/'.$lang.'/inc_login.php');

    Im Normalfall, also mit $_get wird die Variable übergeben. Mit $_POST nicht. Das in der Fehlermeldung die Varaibale fehlt gehe ich von aus, dass via $_post nichts übergeben wird.

    Das ist der Quelltext:

    Quellcode

    1. <table width="100%" align="center"><tr><td><br />
    2. <b>Warning</b>: main(includes//inc_login.php): failed to open stream: No such file or directory in <b>/srv/www/vhosts/mycros.de/subdomains/root/httpdocs/paid/login.php</b> on line <b>3</b><br />
    3. <br />
    4. <b>Warning</b>: main(): Failed opening 'includes//inc_login.php' for inclusion (include_path='.:/usr/share/php') in <b>/srv/www/vhosts/mycros.de/subdomains/root/httpdocs/paid/login.php</b> on line <b>3</b><br />
    5. </td>
    6. <td width="600" align="center" valign="top"><table width="100%" border="0" align="right" cellpadding="0" cellspacing="3" style="border:#006699 solid; border-width:3px; border-spacing:0; border-collapse: collapse;">
    7. <tr>
    8. <td bgcolor="#006699">
    9. <div align="center"><strong><font color="#FFFFFF"></font></strong></div></td>
    10. </tr>
    11. <tr>
    12. <td>
    13. <form method="post" action="/paid/login.php">
    14. <p><strong><font color="#FFFFFF"></font></strong>
    15. <input name="user" type="hidden" id="user" value="" />
    16. <input name="pass" type="hidden" id="pass" value="" />
    17. <input name="ref" type="hidden" id="ref" value="" />
    18. <input name="lang" type="hidden" id="lang" value="" />
    19. </p>
    20. <table>
    21. <tr>
    22. <td>Benutzer:</td>
    23. <td><input name="username" type="text" id="username" /></td>
    24. </tr>
    25. <tr>
    26. <td>Passwort:</td>
    27. <td><input name="passwort" type="password" id="passwort" /></td>
    28. </tr>
    29. <tr>
    30. <td>&nbsp;</td>
    31. <td><input type="submit" value="Anmelden" /></td>
    32. </tr>
    33. </table>
    34. </form> </td>
    35. </tr>
    36. </table></td>
    37. </tr>
    38. </table>
    Alles anzeigen
  • Ich habe endlich ein Lösung gefunden. ich habe als if-Anweisung zum Anfang geprüft, ob bereits eine Variable $lang existiert. Wenn ich den Link ohne Variablen aufrufe (also nur login.php) prüfe ich über die Brwosereinstellung, welche Sprache die Standardsprache ist, dann üerbgebe ich diese per post. Und es funktioniert.

    Endlich. Danke für eure Geduld hier.

    Hier die Lösung:
    file: sprache.php

    Quellcode

    1. <?php
    2. // Browsersprache ermitteln
    3. function lang_getfrombrowser ($allowed_languages, $default_language, $lang_variable = null, $strict_mode = true) {
    4. // $_SERVER['HTTP_ACCEPT_LANGUAGE'] verwenden, wenn keine Sprachvariable mitgegeben wurde
    5. if ($lang_variable === null) {
    6. $lang_variable = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    7. }
    8. // wurde irgendwelche Information mitgeschickt?
    9. if (empty($lang_variable)) {
    10. // Nein? => Standardsprache zurückgeben
    11. return $default_language;
    12. }
    13. // Den Header auftrennen
    14. $accepted_languages = preg_split('/,\s*/', $lang_variable);
    15. // Die Standardwerte einstellen
    16. $current_lang = $default_language;
    17. $current_q = 0;
    18. // Nun alle mitgegebenen Sprachen abarbeiten
    19. foreach ($accepted_languages as $accepted_language) {
    20. // Alle Infos über diese Sprache rausholen
    21. $res = preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)'.
    22. '(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $accepted_language, $matches);
    23. // war die Syntax gültig?
    24. if (!$res) {
    25. // Nein? Dann ignorieren
    26. continue;
    27. }
    28. // Sprachcode holen und dann sofort in die Einzelteile trennen
    29. $lang_code = explode ('-', $matches[1]);
    30. // Wurde eine Qualität mitgegeben?
    31. if (isset($matches[2])) {
    32. // die Qualität benutzen
    33. $lang_quality = (float)$matches[2];
    34. } else {
    35. // Kompabilitätsmodus: Qualität 1 annehmen
    36. $lang_quality = 1.0;
    37. }
    38. // Bis der Sprachcode leer ist...
    39. while (count ($lang_code)) {
    40. // mal sehen, ob der Sprachcode angeboten wird
    41. if (in_array (strtolower (join ('-', $lang_code)), $allowed_languages)) {
    42. // Qualität anschauen
    43. if ($lang_quality > $current_q) {
    44. // diese Sprache verwenden
    45. $current_lang = strtolower (join ('-', $lang_code));
    46. $current_q = $lang_quality;
    47. // Hier die innere while-Schleife verlassen
    48. break;
    49. }
    50. }
    51. // Wenn wir im strengen Modus sind, die Sprache nicht versuchen zu minimalisieren
    52. if ($strict_mode) {
    53. // innere While-Schleife aufbrechen
    54. break;
    55. }
    56. // den rechtesten Teil des Sprachcodes abschneiden
    57. array_pop ($lang_code);
    58. }
    59. }
    60. // die gefundene Sprache zurückgeben
    61. return $current_lang;
    62. }
    63. ?>
    Alles anzeigen


    in file: login.php einfügen

    Quellcode

    1. <?php
    2. include_once ('sprache.php');
    3. $allowed_langs = array ('en','de');
    4. $lang = lang_getfrombrowser ($allowed_langs, 'de', null, false);
    5. ?>


    Dadurch, dass jetzt die Variable $lang verarbeitet werden kann, funktionieren auch die includes aus den externen Dateien. Und alles funkt. Auch mit $_post.

    Danke nochmal.