[PHP/MySQL] Mysterium? Geht, geht nicht...

Bububoomt

ohne Vertrauen
ID: 10361
L
28 April 2006
19.666
769
Also so langsam sage ich es ist nichts unmöglich!!

Habt ihr auch shcon etwas mysteriöses gehabt, was unerklärlich für euch war??

Also ich habe gerade wieder so einen Fall:

MYSTERIUM 1

Habe ein Shop Programmiert, wo die Produkte in 3 Kategorien eingeteilt sind.
Kategorie 1 für sich selbst, Kategorie 2 ist hauptprodukt, und Kat egorie 3 ist unterprodukt von Kategorie 2.

So nun soll beim löschen von einem Produkt der kat 2, auch die dazugehörigen Produkte der kat 3 gelöscht werden.

Ist ja im grunde simpel, weil die id von produkt kat 2 = parent_id von kat 3.

also sollte sowas wie delete from tabel where id=2 or parent_id=2

alle zugehörigen zeilen von Produkt 2 sollten damit ja gelöscht sein...

Nur kann es ja nciht klappen, wenn man die ID nicht übergibt.

Nun das Mysteriöse:
Die Zeile wo ID=2 wurde gelöscht (obwohl die id gar nciht übergeben wurde!!!) aber parent_id=2 nicht (eigentlich ja auch richtig)

also der Befehl dazu:

PHP:
$db->db_query("DELETE from products where products_id=%d OR parent_id=%d",$_POST['P_ID'],$_POST['P_ID']);

naja beim Formular die richtige Variable nutzen, damit auch die richtige ID übergeben wird und siehe da, es klappt wie es sollte.

Aber erkläre mir mal wer, wie das kommt!?!? Ich kann es mir nicht erklären!!


MYSTERIUM 2
Nun sind auf einmal alle Zeilen bei type auf 3 gesetzt. Bis gestern abend, war da ein mix von 1,2,3 drin...

Naja dachte ich mir ich habe irgendwo ein UPADTE products set type=3...
ich war mir 100% sicher, das ichs nciht habe und so ist es, es gibt nur Insert befehle wo type=3 angegeben ist


P.s. nein ich habs auch nciht mit type=%d oder so, bin alle dateien mit suche type durchgegangen!!

also das kann ich mir auch nciht erklären!!!

Das war beides heute!!

MYSTERIUM 3

Habe vor einiger Zeit in dem Shop versehentlich die funktion für
mysql_affected_rows() und für mysql_num_rows
verwechselt.

Bei sowas kann ja auch das script nicht funktionieren. Diesen Fehler hatte ich dummerweise an mehreren stellen.

dadurch hätte ich ja an diversen stellen eine 0 statt einem anderen Wert bekommen müssen, dem entsprechend hätten weitere teile des Scripts nicht funktioniert...

Aber es ging dennoch! Ich hatte den Fehler gut 1 Woche drin, und habe das auch nciht bemerkt, das ich falsche funktion aufrief, da es ja ging wie es sollte!!

Als ich meinen kumpel bat das mal zu testen (also eine Besttellung durch zuführen) ging es auf einmal nicht mehr (wie gesagt vorher 1 Woche lang!!)

Ich schaute mir das script an und mir viel sofort auf, das cih die Funktion vertauscht habe, habe das korrigiert an einigen stellen und siehe da es ging wieder...

Wie kann das sein? 1 Woche ging es mit dem Fehler und dann auf mal nicht mehr....


Es war eindeutig mein Fehler, und es ist mir auch logisch, das es nciht ging... aber wieso ging es vorher, das ist mir unerklärlich...



MYSTERIUM 4
Das ist nun schon einige Jahre her und ja damals waren es meine Anfänge in PHP.
Mein kumpel und ich haben eine Seite erstellt (da die eigentlich Domain noch nicht
erreichbar war zunächst auf ner subdomain einer anderen Domain)
Ich glabe es war das zencart-Script...

Wir haben die Seite fertig gestellt (schönes Template, mit nem Header), haben die Seite erweitert, und das Template für die Erweiterung genutzt...

Als die Domain erreichbar war, haben wir einen Umzug durchgeführt. Haben natürlich die Pfade alle korrekt geändert!

Und was war? Bei der Erweiterung wurde der header nicht angezeigt, das restliche design schon.

Merkwürdig... da ich mich noch kaum auskannte in php hatte ich damals hier gefragt, aber da wußte auch keiner eine Lösung...

Naja was habe ich gemacht, meinen hoster gefragt. Der hat sich das Script angeguckt und konte sich auch nicht erklären, wieso es auf der Subdomain ging und auf der neuen Domain dann nciht.
Er hatte mir damals dann nur ein Workaround gebaut, so das der Header doch angezeigt wurde...


So das war ein Teil der Mysterien, die ich bsiher erlebt habe, sind noch zwei drei weitere, aber ich wll mal von euch hören ob euch sowas mal passiert ist.


Also mir ist klar, meist sind es fehler vom Progger, aber das waren ja keine fehler, bzw. trotz Fehler hätte es ein anderes Ergebnis sein müssen!!
 
und wo ist das mysteriöse dran? sind doch alles normale fehler die man öftersmal antrift.

1. ich kenn die db struktur nicht, aber das wird nen denkfehler von dir sein
2. mal ausversehn ne update ohne where und schon passiert sowas
3. vielleicht vergessen ne datei hochzuladen
4. es gibt wirkliche unscripte... wo config variablen in 58 verschiedenen varianten gesetzt werden und in 58 verschiedenen datein
 
1.Also wenn ich ein formular habe, das wie folgt aussieht

PHP:
<form action="index.php?site=produkt_delete" method="post">
<input type="hidden" name="P_ID" value="<?=$P_ID?>">
<input type="hidden" name="typ" value="2">
<input type="submit" value="alle löschen ">
</form>

$P_ID aber $_GET['productid']sein müßte

Und beim gucken in den Quelltext dann value="" steht.

Erklär mir mal wieso er dann dies hier:

PHP:
$db->db_query("DELETE from products where products_id=%d OR parent_id=%d",$_POST['P_ID'],$_POST['P_ID']);

soweit ausführt, dass die Zeile gelöscht wird wo products_id= 29512 ist, aber nciht wo parent_id=29512 ist.

Also schon komisch, da ja vorher $_POST['P_ID'] nicht gesetzt ist. Also doppelt komisch, er hätte ja nix löschen dürfen, bzw nur wo die products_id 0 ist oder etwa nicht!?

Nach dem ich halt $P_ID durch $_GET['productid'] im formular ersetzt habe, gings.

Das hat doch nix mit der DB Strucktur zu tun und da ist ja kein Denkfehler von mir, das Where ist ja definitiv gesetzt!

2. Ich habe kein Update ohne where-clausel, ich habe gar kei UPDATE wo Type überhaupt vorkommt!! wo Type vorkommt sind nur select und insert anweisungen!

Ich habe ja nochmal alle dateien durchsucht!! War ja auch mein erster gedanken, wobei ich mir 100% sicher war, und ist ja wirklich so, das ich nie type=3 setze, auser in einer datei an einer Position und da ist es ein Insert befehl...

3.nein ich mache es immer online, also nix mit datei vergessen

4.gibt es, bei mir aber nicht, denke der Adminbereich hat nichtmal insgesamt soviele dateien... Ist also wirklich noch übersichtlich

wie erklärst dir den mein 3. Mysterium?? Klar ist es ein fehler meinerseits gewesen, aber es hätte ja nie funktionieren dürfen!
 
das waren bsp an den es leigen könnte... von mir aus kanns auch an einer sonneneruption liegen die die bits in der cpu deines server durcheinander gebracht hat ;) ich hab einfach mal das meiner meinung nach wahrscheinlichste gepostet... aber an was es wirklich liegt/lag kann man so nicht nachvollziehen. ich hab auch oft mit problemen zu kämpfen die nicht am script selbst leigen, sondern an dem was es ausführt. zb serialisierte objekte die aufm server ohne probleme funktionieren, aber lokal nur noch datenmüll entsteht. oder cookies die lokal ohne probleme funktionieren, aber sobald man aufm server ne java applet aufruft diese plötzlich das cookie "auseinader" fällt. da hängt dann plötzlich am php session cookie ein teil von nem anderen cookie. usw...

aber das kann man ebend nur nachvollziehen wenn man testen kann...

zum ersten hab ich aber noch was
PHP:
$P_ID != $_POST['P_ID']
 
PHP:
$P_ID != $_POST['P_ID']
Das ist mir klar, dass war so auch net mein fehler, ich dachte $P_IDhätte ich durch en DB abfrage gesetzt vor dem Formular, aber dem war nicht so, und daher war sie ja leer... und dann habe ichs ja korrekt auf $_GET gesetzt...


Ich wollte mit meinem Posting auch nur verdeutichen, dass ich wirklich kein Update drin habe, das es halt nicht normal ist, das die Variable nicht gesetzt ist und dennoch ein teil richtig gelöscht wird und ein teil net...

oder meinst nciht, das schon recht komisch?

P.S. naja sonnen eruption, gute idee, aber habs mehrfach getestet und jedes mal der "löschfehler"... Ich denke eher der Server mag mich net...
 
Achja jetzt weis ich was Du meinst. Ich habe gerade ein Query zusammengebaut und php sagt mir geht net. die eine Spalte der k Tabelle würde es nicht geben, Dann dachte ich mir ok ist nen Fehler von mir nochmal alles kontrolliert und siehe da kein Fehler. Nächster Schritt das sql ausgeben lassen und im Phpmyadmin probiert => Oh Wunder es geht. Nu sitz ich ratlos vor dem Query und denke mir warum sagt mir PHP sowas. :roll: Ist schon mnchmal alles seltsam.

*edit
Mysterium gefunden ich habe die Spalten in der ersten DB hinzugefügt aber in der zweiten TestDB nicht, weil ich dachte ich arbeite in der zweiten.
 
Zuletzt bearbeitet:
Als ich den Text gelesen habe hätte ich eher getippt, das du ne php version hast, bei der die Abfrage nicht geht, aber mysqladmin die schon kann... (z.B. subquery)
 
Ne ne war ein JOIN Query und sowas gibts doch nicht php mus doch nix können der sendet nur den String(Query) an die DB, oder sehe ich das falsch?
 
äh meinte mysql version... phpmyadmin kann es irgendwie auch wenn die mysql version das nciht kann, ahbe zumindest das Problem shcon mal gehabt...
 
äh meinte mysql version... phpmyadmin kann es irgendwie auch wenn die mysql version das nciht kann, ahbe zumindest das Problem shcon mal gehabt...

das bezweifle ich aber mal sehr stark, denn PHPMyAdmin sendet die Querys auch nur an den Server, der hat ja keinen eigenen SQLParser der Querys umformuliert wie direkt im MySQL drinnen :roll:
 
hmm, dann habe ich das mal local getestet wo ich ne neuere version habe und da gings, aber im script online nciht...

war wieder mein fehler...