Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 21

Thema: php mysql select und insert - datensatz wird gefunden obwohl nicht da?!

  1. #1
    TP-Supporter Avatar von Katjusha
    Registriert seit
    Feb 2008
    Beiträge
    392

    php mysql select und insert - datensatz wird gefunden obwohl nicht da?!

    Nabend,

    komisches Problem hier mit php und mysql. eine Tabelle wird nach einem bestimmten Datensatz abgefragt. Wenn dieser nicht vorhanden ist, soll er angelegt werden und ein bestimmter text ausgegeben werden. Wenn doch schon vorhanden, dann nicht angelegt und ein anderer text ausgegeben werden. Pseudo-code:

    mysql-select

    if (kein treffer) {

    $ausgabevariable = 'datensatz gibt es noch nicht';

    mysql-insert
    hier wird nun der nicht gefundene datensatz angelegt

    } else {

    $ausgabevariable = 'datensatz gibts schon';

    }

    Das problem ist jetzt das das programm immer in den else-zweig springt auch wenn die tabelle ganz leer ist, fast so, als würde erst das insert gemacht und dann das select.
    ich denke ja eigentlich eher nicht, aber mittlerweile habe ich den code-bereich schon so intensiv auf fehler gecheckt ohne was zu finden, das fast nichts anderes mehr in frage kommt.

    PS: in der betreffenden tabelle zeigt phpmyadmin was von überhang, aber das dürfte wohl nix damit zu tun haben (oder doch?)

    Jemand ne idee?

    Gruß, Katjusha

  2. #2
    TP-Specialist Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Hallo,

    dann einfach mal kein Pseudo Code hinschreiben, sondern den tatsächlichen. Auch nicht nur mit 08/15 Auszügen davon, sondern mit allen relevanten Teilen. Soll bedeuten, wenn da im Statement oder sonstwo Variablen benutzt werden auch dazu schreiben was drin steht und wo diese deklariert werden, usw.

    Überhang in einer Tabelle bedeutet, dass Daten(sätze) zum löschen markiert sind, der Speicherplatz aber noch nicht freigegeben wurde. Die tatsächliche Löschung erfolgt dann erst, wenn man die Tabelle optimiert. PMA bietet diese Option extra an. Es ist also etwas harmloses und hat mit deinem Problem nichts zu tun.

  3. #3
    TP-Supporter Avatar von Katjusha
    Registriert seit
    Feb 2008
    Beiträge
    392
    Ich habe die eigentliche Frage wohl nicht deutlich genug hervorgehoben. Hier noch mal der Pseudo-code, anschließend die Frage, bezogen auf das Modell:

    _____________

    mysql-select

    if (kein treffer) {

    $ausgabevariable = 'datensatz gibt es noch nicht';

    mysql-insert
    hier wird nun der nicht gefundene datensatz angelegt

    } else {

    $ausgabevariable = 'datensatz gibts schon';

    }

    Das problem ist jetzt das das programm immer in den else-zweig springt auch wenn die tabelle ganz leer ist, fast so, als würde erst das insert umgesetzt und dann das select. Ist das überhaupt möglich?

    Gruß, Katjusha

  4. #4
    TP-Insider Avatar von Settler
    Registriert seit
    Feb 2008
    Ort
    Marl
    Beiträge
    805
    Wie soll man dir helfen, wenn du nicht die relevanten Informationen bereitstellst. Anhand deines Pseudo Codes wird dir nur ein sehr guter Wahrsager erklären können, warum dein Code nicht das macht, was er soll.

  5. #5
    TP-Supporter Avatar von Katjusha
    Registriert seit
    Feb 2008
    Beiträge
    392
    ........

  6. #6
    TP-Senior
    Registriert seit
    Nov 2002
    Beiträge
    289
    Zitat Zitat von Katjusha Beitrag anzeigen
    ........
    Eigenartige Programmiersprache - die kenn ich noch nicht - wie heißt die und wo kann ich sie lernen ?
    ...zur Zeit außer Betrieb...

  7. #7
    TP-Moderator Avatar von Cybergreek
    Registriert seit
    Nov 2005
    Ort
    Köln
    Beiträge
    1.666
    Um Dir mal die Fragen zu beantworten, die man beantworten kann:
    Zitat Zitat von Katjusha Beitrag anzeigen
    PS: in der betreffenden tabelle zeigt phpmyadmin was von überhang, aber das dürfte wohl nix damit zu tun haben (oder doch?)
    Das sollte nichts damit zu tun haben.

    Zitat Zitat von Katjusha Beitrag anzeigen
    Das problem ist jetzt das das programm immer in den else-zweig springt auch wenn die tabelle ganz leer ist, fast so, als würde erst das insert umgesetzt und dann das select. Ist das überhaupt möglich?
    Möglich ist das, was Du vorhast generell schon. Dein Pseudo-Code sieht auch korrekt aus. Von daher wird der Fehler eher im "richtigen" Code liegen.
    Grüße vom Griechen,
    Cybergreek!

    everygain Translator - eine Firefox-Erweiterung, damit der Grieche Euch besser versteht

  8. #8
    TP-Specialist Avatar von max.m
    Registriert seit
    Dec 2005
    Ort
    Stuttgart
    Beiträge
    2.021
    Zitat Zitat von Moritz Beitrag anzeigen
    Eigenartige Programmiersprache - die kenn ich noch nicht - wie heißt die und wo kann ich sie lernen ?
    http://de.wikipedia.org/wiki/Brailleschrift

  9. #9
    TP-Supporter Avatar von Katjusha
    Registriert seit
    Feb 2008
    Beiträge
    392
    Max und Moritz, das ist kein richtiger Code und auch keine brailleschrift, sondern ein Modell. Einfach mal den Hutständer einschalten, dann versteht ihr das vieleicht sogar, sonst ist es aber auch nicht schlimm, es gibt ja genug Themen wo ihr euren Senf dazugeben könnt.

    Zur Veranschaulichung des Problems hier noch mal das Modell:

    select-abfrage

    wenn kein treffer {

    insert

    $ausgabe = 'dies';

    } else {

    $ausgabe = 'jenes';
    }

    Das Problem ist, es wird immer die variable aus dem else-zweig ausgegeben, auch wenn die tabelle leer ist und gar kein datensätze gefunden werden können, gleichzeitig wird aber das insert gemacht, welches ja nur im if-zweig enthalten ist.
    Wenn ich das insert aber auskommentiere, dann wird ganz richtig kein datensatz gefunden und die variable aus dem if-zweig ausgegeben.
    Sieht für mich so aus, als würde der datensatz, der durch das insert angelegt wird, bei der select-abfrage vorher mit einbezogen, obwohl das doch eigentlich nicht möglich sein sollte.

  10. #10
    TP-Senior
    Registriert seit
    Nov 2002
    Beiträge
    289
    Dein Modell sehen wir bereits zum Dritten mal. Wenn Du Hilfe möchtest, dann poste den realen Code und kein Veranschauungsmaterial. Schalte Du doch mal bitte deine Augen ein und gebrauche Sie zum lesen - dann erkennst Du, dass in jedem Antwortpost (ausgenommen meinem) steht, Du möchtest bitte den Code posten, da (ich zitiere Cybergreek)
    Möglich ist das, was Du vorhast generell schon. Dein Pseudo-Code sieht auch korrekt aus. Von daher wird der Fehler eher im "richtigen" Code liegen.
    Vielleicht verstehst Du es ja jetzt. Ich kümmere mich nun um die anderen Threads.

    [NACHRAG]
    Vielleicht bist Du noch so gut und erklärst mir, was an acht Punkten ein Modell sein soll?
    ...zur Zeit außer Betrieb...

  11. #11
    TP-Supporter Avatar von Katjusha
    Registriert seit
    Feb 2008
    Beiträge
    392
    PHP-Code:
    $einlesen mysql_query("SELECT uid,item_uid,benutzer_id FROM tabelleXY WHERE item_id=4 AND benutzer_id=5");

    if(
    mysql_num_rows($einlesen)==1) {
            
    $ausgabe 'datensatz existiert bereits';

    } else {

    mysql_query("INSERT INTO tabelleXY (item_id, benutzer_id)
    VALUES ('4', '5')"
    );

    $ausgabe 'datensatz existierte noch nicht und wurde jetzt angelegt';

    Hier also noch mal echter php-code. Wie schon gesagt, selbst wenn der Datensatz nicht existiert, die ausgabe ist 'datensatz existiert bereits', wärend gleichzeitig das insert aus dem anderen zweig vorgenommen wird.

  12. #12
    TP-Supporter Avatar von Katjusha
    Registriert seit
    Feb 2008
    Beiträge
    392
    Moritz, wenn du nicht weißt was ein Modell ist, ist das nicht mein Problem.

  13. #13
    TP-Veteran
    Registriert seit
    Jan 2008
    Ort
    Hessen
    Beiträge
    1.044
    Zitat Zitat von Katjusha Beitrag anzeigen

    Hier also noch mal echter php-code.
    Ok, nun wird es klarer. Es könnte ein Problem mit mysql_num_rows sein, aus der PHP Doku:
    "and mysql_num_rows() will return the number of actual results + 1
    Wenn $einlesen leer ist, weil mysql_query nicht zurückliefert, dann ist mysql_num_rows auch nicht eindeutig definiert. Also erst mal testen ob $einlesen überhaupt ein Ergebnis enthält.

    PHP-Code:
    $einlesen NULL;
    $einlesen mysql_query("SELECT uid,item_uid,benutzer_id FROM tabelleXY WHERE item_id=4 AND benutzer_id=5");

    if(
    $einlesen) {
            
    $ausgabe 'datensatz existiert bereits';

    } else {

    mysql_query("INSERT INTO tabelleXY (item_id, benutzer_id)
    VALUES ('4', '5')"
    );

    $ausgabe 'datensatz existierte noch nicht und wurde jetzt angelegt';


  14. #14
    TP-Supporter Avatar von Katjusha
    Registriert seit
    Feb 2008
    Beiträge
    392
    Hallo Frangulus,

    Ich glaube deine Antwort hat mir schon ein ganmzes Stück weiter geholfen. Und zwar habe ich jetzt mal die Bedingung um 1 erhöht, also das zwei datensätze gefunden werden müssen und siehe da, das beschriebene Problem tritt nicht mehr auf. ABER es werden nun zwei Datensätze angelegt und das spricht wohl eindeutig dafür das das script zweimal aufgerufen wird, was auch erklären würde, warum das insert das eigentlich nach dem select ausgeführt wird, mit in dieses einbezogen wurde. Hätte man echt früher drauf kommen können.
    Jetzt ist nur die Frage, warum wird dieses Script doppelt ausgeführt? Ich bleib dran...

    Danke erstmal, Katjusha

  15. #15
    TP-Veteran
    Registriert seit
    Jan 2008
    Ort
    Hessen
    Beiträge
    1.044
    Zitat Zitat von Katjusha Beitrag anzeigen
    Hallo Frangulus,

    Ich glaube deine Antwort hat mir schon ein ganmzes Stück weiter geholfen. Und zwar habe ich jetzt mal die Bedingung um 1 erhöht,
    Nimm doch einfach mal die Abfrage, die ich im Code geändert habe.

Seite 1 von 2 12 LetzteLetzte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. [PHP] + [MySQL] INSERT INTO funktioniert nicht
    Von -Andi- im Forum Traum-Dynamik
    Antworten: 2
    Letzter Beitrag: 06.03.2010, 17:01
  2. [Extensions] tt_address - Datensatz wird nicht referenziert
    Von Elli im Forum TYPO3
    Antworten: 0
    Letzter Beitrag: 26.10.2008, 15:44
  3. Es wird nur ein Datensatz angezeigt (mySQL)
    Von Highlander99 im Forum Dreamweaver & andere Webeditoren
    Antworten: 3
    Letzter Beitrag: 16.03.2008, 10:44
  4. Seite wird nicht gefunden!
    Von sess im Forum SEO
    Antworten: 12
    Letzter Beitrag: 18.01.2005, 22:27
  5. laufwerk wird nicht gefunden
    Von robster im Forum Hardware
    Antworten: 5
    Letzter Beitrag: 23.01.2004, 17:21

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

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 45 46 47 48 49 50 51