[function.mysql-result]: Unable to jump to row 0

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

  • [function.mysql-result]: Unable to jump to row 0

    Ich hab jetzt mal mein Script soweit geändert, dass alles funktioniert. Alle Werte werden übergeben. Aber folgende Fehlermeldung stört ein wenig. Normalerweise ist das ein Zeichen dafür, dass keine Resultate eingelsenen wurden, aber alles funktioniert wunderbar.

    Quellcode

    1. PHP Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 10


    Betreffende Codezeilen:

    Quellcode

    1. if ($_POST['pass'] == $_POST['pass2']) {
    2. $query = sprintf('SELECT email FROM kcc_user WHERE email=%s',quote_smart($_POST["email"]));
    3. $email = mysql_result(mysql_query($query),0);
    4. $query1 = sprintf('SELECT username FROM kcc_user WHERE username=%s',quote_smart($_POST["username"]));
    5. $username = mysql_result(mysql_query($query1),0);
    6. if ($email == $_POST["email"] && $username == $_POST["username"]) {
    7. echo 'nur paket';
    8. } elseif ($email == $_POST["email"] && $username != $_POST["username"]) {
    9. echo 'Ihr Benutzername ist falsch.';
    10. } elseif ($email != $_POST["email"] && $username == $_POST["username"]) {
    11. echo 'Ihre email ist falsch. Sie können jederzeit ihre email im Login-Bereich ändern.';
    12. }
    13. }
    Alles anzeigen


    quote_smart ist eine Funktion mit der die Magic Quotes getestet werden. Das funktioniert alles.
  • danke für die antwort. aber was für ein index. wie stelle ich das ein bzw. wie / wo prüfe ich diesen denn? ist halt blöd, wenn diese fehlermeldung immer kommt. sicher ich könnte dies auch ausstellen, aber so sehe ich nicht, wenn ich mich mal woanders nochmal vertan habe.

    und das mit den joins hab ich auch mal probiert. aber das muss ich irgendiwe nochmal richtig üben. irgendiwe kriege ich das nie so richtig hin. ich weiß, dass es besser ist. auch der ressourcen wegen, aber ich kenne mich da halt noch nicht so aus.
  • Query = SELECT email FROM kcc_user WHERE email='hab@keine.de'
    Query1 = SELECT username FROM kcc_user WHERE username='admin'

    Bei richtiger Eingabe erfolgen dann auch die Variablen
    email = hab@keine.de
    username = admin

    Eigentlich doch alles korrekt. Irgendwas scheint wohl mit der funktion mysql_result() nicht zu stimmen. Aber was? Ich hab das schon mal mir mysql_fetch_array bzw. mysql_fetch_row probiert, aber auch kein Erfolg gehabt. Mit mysql_result liest er die Werte wenigstens noch aus der Datenbank aus.
  • mycros, warum machst du nicht das was dir wegen error_reporting Donut empfholen hat, hm?

    Nur weil du hier nicht mehr jeden kleinen Hinweis von PHP angezeigt bekommst, heist das nicht, dass er dir die wirklichen Fehler nicht mehr anzeigt, das hast du dann total falsch verstanden. Probier das einfach mal aus. Sollte dein Script dann keine Fehler auswerfen, läuft er einwandfrei.

    Und kannst du uns mal den Code zeigen, den du mit mysql_fetch_array hast? Das wäre eine deutlich Leistungsstärkere Alternative. Du könntest dann auch gleich alles in eine MySQL-Abfrage stecken und diese dann ausführen. Am Ende würdest du dann als Output ein Array mit den Index 'email' und 'username' erhalten. Einfacher und schneller.
  • danke mad für die antwort.

    vielleicht sieht das alles total dumm aus - kann schon sein, aber der Grund für die Abfrage ist die prüfung auf Vorhandensein der per POST übergebene email in der Datenbank, denn wenn das so ist , dann sollen nicht alle anderen Kommandos ausgeführt werden. Das Script hier ist ja abgespeckt, damit ich euch nicht ganz so auf die Nerven gehe.

    Das mit dem Error_Reporting weiß ich ja. Aber ich denke mir - an irgendwas muss es ja liegen, dass diese Fehlermeldung kommt. Auch wenn diese nicht wichtig ist. Wenn ich das Reporting ändere erscheint die Fehlermeldung auch nicht.

    Ich bin halt noch ein Neuling auf diesem PHP/Mysql-Feld. Aber ich will ja lernen ;) Und deshalb frage ich. Natürlich suche ich vorher hier im Forum nach Lösungen oder auch auf Suchmaschinen. Nur wenn ich absolut keine Lösung finde und ich deshalb schon wieder ziemlich genervt frage ich hier. Denn Aufgeben kann ja jeder.

    So genug gelabert.

    PS @ mad: Ich heiße übrigends Mycros hier im Board. :D
  • "mycros" schrieb:

    danke mad für die antwort.

    vielleicht sieht das alles total dumm aus - kann schon sein, aber der Grund für die Abfrage ist die prüfung auf Vorhandensein der per POST übergebene email in der Datenbank, denn wenn das so ist , dann sollen nicht alle anderen Kommandos ausgeführt werden. Das Script hier ist ja abgespeckt, damit ich euch nicht ganz so auf die Nerven gehe.

    PS @ mad: Ich heiße übrigends Mycros hier im Board. :D


    Das war nicht böse gemeint, ok?
    Gut, wenn das so ist, dann sind die Abfragen wiederum logisch. Nur so ganz allein waren sie ein wenig unverständlich, entschuldige...

    Übrigens deine Fehlermedlung könnte so entstehen:
    Du erzeugst mit mysql_result ein Ergebnis, sowfern er in der Datenbank etwas findet, das der Abfrage entspricht. Ist dies nicht der Fall, so hat die Funktion mysql_result kein Ergebnis. UNd daher kann er auch nicht auf den Index 0 zugreifen.
    Das ist die Code Zeile dazu:

    Quellcode

    1. $username = mysql_result(mysql_query($query1),0);

    das ganze solltest du vorher abfangen in dem du abfragst, ob du überhaupt einen Datensatz zurückbekommst. Das geht entweder mit einer MYSQL-Funktion ... num(bla) .... oder direkt in PHP mysql_num_rows()

    Versuch einfach die Funktion mysql_query nicht zu verwenden (das empfielt auch das manual) oder sichere diese Fälle ab.

    Denk beim Programmieren immer an die "dümmsten" Fälle, gehe davon aus, dass das die erste Sache ist, die ein Angreifer oder Skeptiker des Systems versuchen wird.

    cya
  • Zu den Fehlermeldungen:

    Warning heist im Deutschen Warnung. Okay, weist du sicher, warum erzähle ich dir das also. Ganz einfach: Warnung heist nicht gleich Fehler. Das wäre so, als würdest du Schwimmen gehen wollen und am Wasserrand steht: Warnung: Nicht für Nichtschwimmer.
    PHP weist dich nur auf eine mögliche Ursache für einen vielleicht irgendwann auftreten Fehler hin. Im Grunde keine schlechte Sache, du solltest dir da aber deshalb nicht den Kopf zerbrechen. PHP ist nicht intelligent, jedenfalls nicht soweit, dass er jede Warnung und jeden Hinweis - sollte man dessen Reporting eingeschaltet haben - als wesentlich oder unwesentlich einstufen kann. Du verschwendest also denke ich viel Zeit damit, hier einen Fehler zu suchen und selbst wenn du eine mögliche Fehlerquelle findest, ist damit nicht auch gesagt, dass der Script weiterhin richtig laufen kann. Es kann auch passieren, dass du eine gewisse Struktur in der Datenbank und in deinem Script haben musst, um hier zu deinem gewünschten Ergebnis zu kommen. Eine Struktur, die dir jeder Programmierer als okay erklärt, PHP aber auf Grund mangelnder Intelligenz (wer kreidet das bitte schon rot an und welche Prog.sprache ist wirklich intelligent) nicht richtig einschätzen kann.

    Also hör auf, so darauf zu beharren, dass hier ein Fehler liegt. Dein Script läuft und da ich dein Programm nur bei diesem Ausschnitt bewerten kann, würde ich auch sagen, dass deine Vorgehensweise okay ist.
  • @Baby Herman:
    Das ist nicht wirklich die richtige Herangehensweise... Wenn man programmiert, sollte man das entweder ganz oder gar nicht machen. Ich finde es gut, dass er hier fragt, warum diese Warnung auftritt und egal ob das Skript läuft oder nicht, es hat einen Programmierfehler. Denn für mich sind es auch Fehler, wenn man Sonderfälle nicht behandelt oder zumindest sicherstellt, dass das Skript dann nicht abbricht.
    Ein System ist nur dann gut, wenn es trotz fehlerhafter Eingaben zum Ziel (wenn auch dann Korrigierungen nötig sind).

    Also ist es meiner Meinung nach GUT, nach Fehlerquellen zu suchen, auch wenn php sie nur als Warnung anzeigt.

    cya
  • PHP zeigt diese Meldungen aber nicht umsonst als Warnung an. Und wie der Script mit dem Eingaben des Benutzers umgeht, liegt nicht bei PHP, sondern viel mehr daran, wie man das ganze programmiert, wie viele Sicherheitsabfragen man macht etc.
    Zu dem Wort Programmierfehler. Mag sein, dass das Ansichtssache ist, aber meiner Meinung nach kann man nicht von Programmierfehler sprechen, wenn alles reibungslos läuft und so gut wie möglich auf alle Lücken überprüft wurde. Schon mal beim phpBB, WBB oder anderen großen Scripten das Reporting umgeschaltet? Okay, das WBB mag nen schlechtes Beispiel sein, was ich damit aber sagen will, ist schlicht und ergreifend, dass PHP hier etwas überreagiert. Wie schon einmal gesagt, kann es gar nichts dafür, weil es nicht intelligent genug ist, die Situation als wesentlich oder unwesentlich einzustufen. Es erkennt lediglich die Situation und gibt daher eine Warnung aus.
    Belassen wir es einfach bei reiner Ansichtssache. Wenn ich den Script wirklich intensiv getestet habe und alles einwandfrei läuft, bringen mir auch solche Warnung nichts. Manchmal ist es einfacher, gewisse Sachen wegzulassen oder einfacher zu umschreiben. Wenn ich dann alles nötige überprüft habe, warum soll ich dann nicht auf diese Möglichkeit eingehen und die Warnung ignorieren? Also, wie gesagt, belassen wir es dabei.

    Ich kann mycros nur abraten, sich zu intensiv damit zu beschäftigen. Wenn du dich gut mit den wesentlichen Fehlermeldungen auskennst, lernst du auch daraus und machst sie dann folglich immer weniger. Wenn du dich aber mit kleinkram aufhällst und eventuell der Fehler so einfach gar nicht ersichtlich ist, warum dann damit aufhalten und eventuell Zeit für weitere "Lerneinheiten" verschwenden? Bla, Baby hör auf. ;)
  • 1. heißt es DAS script.
    2. ist hier der Fehler doch ersichtlich, man muss doch nur mal lesen.
    3. kann man ihm doch erklären, was diese Warnungen bedeuten, wenn er es noch nicht weiß. Nur einfach zu sagen, mach das Error_reporting aus, dann siehst du nicht mehr, was du falsch machst, ist ne Klasse Antwort. Werd ich zu meinem Chef später auch mal sagen. "Ich habe einfach alle Fehler unterdrückt, damit sie nicht sehen, wie viele Fehler in das Skript/Programm programmiert wurden. Bekomm ich jetzt mein Geld?"

    Außerdem, wenn du schon mit "großen" Scripten vergleichst, dann nimm doch bitte nicht das wbb (am besten noch 1 oder 2) oder das phpBB. Beide sind nicht wahnsinnig professionell, da sich am phpBB jeder versucht hat und woltlab die ersten beiden Versionen noch nicht so gut hinbekommen hat. Wenn du große Scripte aufzählst, dann geh doch eher in Richtung vb oder ipb. Und wenn du da das Reporting anschaltest, findest du nur (!) Warnungen die mit Einstellungen des Servers zu tun haben.
    Sauber programmiert, bleibt sauber programmiert.

    Ich sag ja auch nicht, dass ich immer zu 100% sauber programmiere, aber hier in diesem Fall, kann man ihm doch zeigen, was er besser machen kann.

    ...
  • Ja danke . Mein Script klappt jetzt. Hab das jetzt mal so gemacht:

    Quellcode

    1. if ($_POST['pass'] == $_POST['pass2']) {
    2. $query = mysql_query(sprintf('SELECT email FROM kcc_user WHERE email=%s',quote_smart($_POST["email"])));
    3. $email = mysql_num_rows($query);
    4. $query1 = mysql_query(sprintf('SELECT username FROM kcc_user WHERE username=%s',quote_smart($_POST["username"])));
    5. $username = mysql_num_rows($query1);
    6. if ($email > "0" && $username > "0") {
    7. echo 'nur paket';
    8. } elseif ($email > "0" && $username == "0") {
    9. echo 'Ihr Benutzername ist falsch.';
    10. } elseif ($email == "0" && $username > "0") {
    11. echo 'Ihre email ist falsch. Sie können jederzeit ihre email im Login-Bereich ändern.';
    12. }
    13. }
    Alles anzeigen

    Klappt jetzt wunderbar. Und endlich ohne Fehlermeldung. Auch wenn es nur Warnings waren. Wieder enorm dazugelernt. Danke euch.