echo-Schreibweise leider suboptimal
Claudia
- php
0 hotti0 Claudia
0 dedlfix
Guten Abend!
Ich sitze hier gerade und habe mir eine sql-abfrage ausgegeben und bin nicht ganz zufrieden mit der schreibweise der echo zeile. wie könnte man es besser schreiben?
<?php
$anzahl = mysql_query("SELECT sum(anzahl) as summe FROM tabelle ");
while(($row = mysql_fetch_assoc($anzahl)) !== FALSE ) {
echo "" . $row['summe'] . ' ';
}
?>
Liebe Grüße,
Claudia
hi,
<?php
$anzahl = mysql_query("SELECT sum(anzahl) as summe FROM tabelle ");
while(($row = mysql_fetch_assoc($anzahl)) !== FALSE ) {
echo "" . $row['summe'] . ' ';
}?>
Wieso baust Du eine Schleife, wenn nur eine Zeile zu erwarten ist?
O'Hotti
Wieso baust Du eine Schleife, wenn nur eine Zeile zu erwarten ist?
Wie wäre es denn noch einfacher?
<?php
$anzahl = mysql_query("SELECT sum(anzahl) FROM tabelle ");
echo "$messeranzahl";
?>
Hier schein ein fehler drin zu sein...
Hier schein ein fehler drin zu sein...
Jetzt müsste es gehen!
<?php
$anzahl = mysql_query("SELECT sum(anzahl) FROM tabelle ");
echo "$anzahl";
?>
filoxin
Jetzt müsste es gehen!
Tut es aber nicht. Hm.
Hi!
Jetzt müsste es gehen!
Tut es aber nicht. Hm.
Mit einer Kontrollausgabe
var_dump($anzahl);
sähe man, dass die Query-Funktion bei einem SELECT wie üblich entweder eine Ressourcenkennung oder false zurückliefert, aber keinesfalls die Ergebnisse der Abfrage, welche stets gefetcht werden müssen.
Lo!
aber keinesfalls die Ergebnisse der Abfrage, welche stets gefetcht werden müssen.
Ich habe folgendes geschrieben:
<?php
$anzahl = mysql_query("SELECT sum(anzahl) FROM tabelle; ");
$row = mysql_fetch_row($anzahl);
echo $row;
?>
Gibt mir aber ein leeres array aus.
Moin!
aber keinesfalls die Ergebnisse der Abfrage, welche stets gefetcht werden müssen.
Ich habe folgendes geschrieben:
<?php
$anzahl = mysql_query("SELECT sum(anzahl) FROM tabelle; ");
$row = mysql_fetch_row($anzahl);
echo $row;
?>
Was bitte ist das denn?
~~~php
<?php
# Wo ist die Datenbankverbindung und deren Kennung?
$sql="SELECT SUM(`anzahl`) AS `summe` FROM `tabelle`;";
$result=mysql_query($sql) or die(mysql_error() . '<pre>$sql</pre>');
$row = mysql_fetch_row($result);
echo $row[0];
?>
Gibt mir aber ein leeres array aus.
Das kann viele Ursachen haben. Hast Du überhaupt eine Verbindung zur Datenbank? Du hast insbesondere nicht daran gedacht Dir ggf. die Fehlermeldung von MySQL ausgeben zu lassen. Auf Produktivsystemen wirst Du die am besten in ein Logfile schreiben und/oder sogar per eMail senden lassen und nicht ausgeben.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Moin!
$result=mysql_query($sql) or die(mysql_error() . "<pre>$sql</pre>");
... natürlich.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
$result=mysql_query($sql) or die(mysql_error() . "<pre>$sql</pre>");
Danke das hat geklappt! :)
Claudia
Mahlzeit fastix®,
$result=mysql_query($sql) or die(mysql_error() . "<pre>$sql</pre>");
... natürlich.
MfG,
EKKi
Moin!
Mahlzeit fastix®,
$result=mysql_query($sql) or die(mysql_error() . "<pre>$sql</pre>");
... natürlich.
Ein wenig kommt mir das vor wie ein Kindergarten oder eine Grundschule: "Frau Lehrerin! Ich weiß aber auch was!"
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi!
Ein wenig kommt mir das vor wie ein Kindergarten oder eine Grundschule: "Frau Lehrerin! Ich weiß aber auch was!"
Oftmals wird einfach nur vorhandener Code kopiert, ohne dass sich der Empfänger Gedanken um die Sinnhaftigkeit macht. "Der Antwortende weiß mehr als ich, also wird das schon so richtig sein, was er da so schreibt." Begleittext wird auch nicht immer genau gelesen oder verstanden. Fertiger Code nimmt dem Probleminhaber das Beschäftigen mit dem Stoff ab, was der "Energie des Verstehens" nicht unbedingt förderlich ist.
Wenn du zudem Code zeigst, der quick'n'dirty ist und erstmal (hoffentlich) funktioniert, jedoch nicht zeigt, wie man es in der Praxis "richtig" macht, dann förderst du, dass dieser "falsche" Code sich noch mehr verbreitet. Wenn schon Code gezeigt werden soll, dann reicht es, dass die Grundprinzipien für das Verstehen des Lösungsweges erkennbar sind. Nebensächlichkeiten (u.a. Fehlerbehandlung) müssen nicht ausführlich dargestellt werden, sollten aber nach Best-Practice-Prinzipien angedeutet sein.
Setz dem Fragenden keine Lösung vor sondern führ ihn zu einer!
Lo!
Grundlage für Zitat #1878.
Moin!
Nebensächlichkeiten (u.a. Fehlerbehandlung) müssen nicht ausführlich dargestellt werden, sollten aber nach Best-Practice-Prinzipien angedeutet sein.
Bitte beschreibe unter umfassender Würdigung auch des übrigen Textes was ich da eigentlich gemacht habe.
Ich selbst würde es so beschreiben: Ich habe der Threaderöffnerin einen Weg gezeigt die Fehlermeldung wahrzunehmen [1] und [2]. Das war auch zielführend. Für die von Die selbst genannte Andeutung der Fehlerbehandlung sollte der Satz
"Auf Produktivsystemen wirst Du die am besten in ein Logfile schreiben und/oder sogar per eMail senden lassen und nicht ausgeben" absolut ausreichen.
Bei allem "Lo!" und "Quapla'"! - Was bitte soll das sinnlose Gekrittel [3, [4]]?
Ist da jemand gelb vor Neid weil seine Antworten weniger oft hilfreich sind? Diese Art und Weise des Vorgehens, erst eine Textstelle aus dem Kontext zu reißen und sich dann fürchterlich, rechthaberisch und kleinlich aufzuregen habe ich vor allem bei dem Riesenrindvieh Günter Freiherr von Gravenreuth kennengelernt.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
@@fastix®:
nuqneH
Dass ein „Danke das hat geklappt!“ von Fragenden rein gar nichts über die Qualität der gegebenen Antwort aussagt, hatten wir kürzlich erst thematisiert. https://forum.selfhtml.org/?t=207373&m=1409401 ff.
Qapla'
Dass ein „Danke das hat geklappt!“ von Fragenden rein gar nichts über die Qualität der gegebenen Antwort aussagt, hatten wir kürzlich erst thematisiert. https://forum.selfhtml.org/?t=207373&m=1409401 ff.
Man sollte zwei Sachen trennen:
Eine *technische Lösung* hat Stärken und Schwächen, sie lässt sich anhand allgemeiner Maßstäbe bewerten.
Dieser Vorgang passiert nie im leeren Raum, sondern in einer Kommunikation unter gewissen, keinesfalls idealen Bedingungen.
Eine *Antwort* in einem technischen Fachforum ist erst einmal ein kommunikativer Akt. Der kann, performativ gesehen, erfolgreich sein oder fehlschlagen.
Würde der Fragesteller die gegebenen Lösungen anhand allgemeiner Maßstäbe bewerten können, so hätte er sich wahrscheinlich nicht ans Forum gewandt. Auf dieser Ebene gibt es daher kein anderes Kriterium als dass der Fragesteller die Antwort verstanden hat, anwenden konnte und das gewünschte Ergebnis erzielt wurde.
Sicherlich, es gibt gute und schlechte Lösungen, deren Vermittlung erfolgreich ist, und es gibt gute und schlechte Lösungen, deren Vermittlung scheitert. Im Idealfall schafft man es, ein gute Lösung zu vermitteln, in allen Fällen ist der Welt wenig geholfen. Es kann höchstens einige Mitleser geben, die etwas mit der »besseren« Antwort anfangen können.
Mathias
Im Idealfall schafft man es, ein gute Lösung zu vermitteln, in allen Fällen ist der Welt wenig geholfen.
Ganz so schlimm ist es nicht. ;)
»In allen *anderen* Fällen …«
Moin!
"Es könnte aber auch sein, dass der Fragesteller überhaupt NICHT bewerten kann, ob eine Antwort das für ihn Richtige gebracht hat oder nicht."
Aha. Ganz tolle Luftnummer!
Dafür mutest Du mir zu auf einen Link zu klicken und Netzlast zu verschwenden? Du solltest dringend an Deiner sozialen Kompetenz arbeiten. Für jemanden, der in diesem Thread bisher gar keine Antwort gegeben hat, ist das nämlich ziemlich vorlaut.
Genau so könnte ich auch sagen, das ist hier schon besprochen worden.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
@@fastix®:
nuqneH
Aha. Ganz tolle Luftnummer!
Dafür mutest Du mir zu auf einen Link zu klicken und Netzlast zu verschwenden? Du solltest dringend an Deiner sozialen Kompetenz arbeiten.
Was bitte soll das denn? Du bezeichnest Postings anderer als „Luftnummer“ und „Verschwendung“ – ohne auch nur einen Hauch einer Begründung? Dein Hinweis auf soziale Kompetenz war da schon ein starker Steinwurf. Muss ganz schön gesplittert haben, dein Glashaus.
Für jemanden, der in diesem Thread bisher gar keine Antwort gegeben hat, ist das nämlich ziemlich vorlaut.
Ich wusste nicht, dass hier Anwesenheits- und Mitredepflicht besteht.
Das Backend ist übrigens nicht meine Lieblingsbaustelle. Da muss ich nicht immer meinen Senf dazugeben. Nuhr und so.
Genau so könnte ich auch sagen, das ist hier schon besprochen worden.
Bei dem Thread hatte ich mir auf die Zunge gebissen – sonst hätte ich „Doppelposting“ gerufen.
Ich halte es für sinnvoller, Unstimmigkeiten dort zu klären, wo sie auftreten; nicht einen neuen Thread zu eröffnen, der ein pauschalisiertes Urteil fällt.
Qapla'
Moin!
ohne auch nur einen Hauch einer Begründung?
sollte ich an der Stell wirklich alle möglichen Fundstellen über "Totschlagargumente", schlechte Diskussionskultur oder das Buch "Ein ultimativer Weg sein Umfeld verbal zu ärgern" zitieren?
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
@@fastix®:
nuqneH
sollte ich an der Stell wirklich alle möglichen Fundstellen über "Totschlagargumente" […] zitieren?
Es würde genügen, wenn du keine anbrächtest.
Qapla'
Moin!
sollte ich an der Stell wirklich alle möglichen Fundstellen über "Totschlagargumente" […] zitieren?
Es würde genügen, wenn du keine anbrächtest.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi,
Dafür mutest Du mir zu auf einen Link zu klicken und Netzlast zu verschwenden? Du solltest dringend an Deiner sozialen Kompetenz arbeiten.
Oh, please – STFU …
Vielleicht arbeitest du (zusammen mit Tom) einfach mal daran, etwas Luft aus euren aufgeblasenen Programmierer-Egos abzulassen – damit ihr nicht jedes Mal die crying like a bitch–Nummer abziehen müsst, sobald jemand es wagt, eine eurer Antworten fachlich zu ergänzen oder fachlich zu kritisieren …?
Wenn jemand zu einer meiner Antworten eine fachliche Ergänzung anbringt, dann kann ich das doch entweder mit „Ja, danke für die Ergänzung“ beantworten (wenn ich unbedingt das letzte Wort haben muss) – oder diese Ergänzung auch einfach so für sich stehen lassen.
Und das auch ohne diese Ergänzung als feindselige Infragestellung meiner fachlichen Kompetenz anzusehen. Das man nicht immer jeden Aspekt jeder Frage ausschöpfend behandeln kann oder will, haben wir doch jetzt schon festgestellt. Was ist also das Problem, dass du mit einer Ergänzung durch jemand anderen hast? Die kann der Fragesteller annehmen, wenn er möchte, ggf. noch mal nachfragen – oder es bleiben lassen.
Der Buhei, den ihr beide immer wieder um sowas macht, ist doch langsam nicht mehr lustig.
MfG ChrisB
Moin!
Vielleicht arbeitest du (zusammen mit Tom) einfach mal daran, etwas Luft aus euren aufgeblasenen Programmierer-Egos abzulassen
Du wolltest ein "Leck mich!" provozieren?
Leck mich!
fastix
Hi,
Vielleicht arbeitest du (zusammen mit Tom) einfach mal daran, etwas Luft aus euren aufgeblasenen Programmierer-Egos abzulassen
Du wolltest ein "Leck mich!" provozieren?
Nein – sondern dich mal zum Nachdenken anregen.
Darüber, dass du nicht immer alles so eng sehen musst, und darüber, wie man mit fachlicher Kritik etwas souveräner umgeht.
Leck mich!
Ich seh’ schon, du und Tom, ihr seid echt „Brüder im Geiste“.
MfG ChrisB
Moin!
Vielleicht arbeitest du (zusammen mit Tom) einfach mal daran, etwas Luft aus euren aufgeblasenen Programmierer-Egos abzulassen
Leck mich!
Ich seh’ schon, du und Tom, ihr seid echt „Brüder im Geiste“.
Kannst das nicht ab, wenn Dir jemand auf das "aufgeblasenen Programmierer-Egos" mit der richtigen Antwort kommt oder was?
Dann kannst Du mich sogar "kreuzweise".
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi,
Kannst das nicht ab, wenn Dir jemand auf das "aufgeblasenen Programmierer-Egos" mit der richtigen Antwort kommt oder was?
Kannst du es nicht ab, wenn man dein Verhalten hier beim Namen nennt?
Dann kannst Du mich sogar "kreuzweise".
Und du faselst allen Ernstes was von „sozialer Kompetenz“ und „suboptimaler Diskussionskultur“ ...?
MfG ChrisB
Moin!
Vielleicht arbeitest du (zusammen mit Tom) einfach mal daran, etwas Luft aus euren aufgeblasenen Programmierer-Egos abzulassen
Leck mich!
Ich seh’ schon, du und Tom, ihr seid echt „Brüder im Geiste“.Kannst das nicht ab, wenn Dir jemand auf das "aufgeblasenen Programmierer-Egos" mit der richtigen Antwort kommt oder was?
Dann kannst Du mich sogar "kreuzweise".
Und du faselst allen Ernstes was von „sozialer Kompetenz“ und „suboptimaler Diskussionskultur“ ...?
Nun, der gewiss erst zu nehmende Bundesgerichtshof hat entschieden das Äußerungen wie "Du kannst mich mal (kreuzweise)", "Leck mich" in vielen Fällen keine Beleidigung darstellen sondern eine Aufforderung. Nämlich die des Äußernden an den Empfänger der Nachricht, dass der zweite den ersten in Ruhe lassen soll.
Also: Lass mich in Ruhe wenn Du nichts sachliches beizutragen hast. Hier und jetzt nämlich.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi,
Nun, der gewiss erst zu nehmende Bundesgerichtshof hat entschieden das Äußerungen wie "Du kannst mich mal (kreuzweise)", "Leck mich" in vielen Fällen keine Beleidigung darstellen sondern eine Aufforderung. Nämlich die des Äußernden an den Empfänger der Nachricht, dass der zweite den ersten in Ruhe lassen soll.
Well then … fuck off! (Kann im Englischen das gleiche bedeuten :-))
Also: Lass mich in Ruhe wenn Du nichts sachliches beizutragen hast. Hier und jetzt nämlich.
Stop crying like a bitch – dann brauch’ ich darauf auch nicht reagieren.
MfG ChrisB
Moin!
Stop crying like a bitch – dann brauch’ ich darauf auch nicht reagieren.
Erst keifen wie eine Hexe und mir dann mit dem Text kommen. Ehrlich - wer braucht das?
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hi,
Erst keifen wie eine Hexe und mir dann mit dem Text kommen.
Ich habe nicht gekeift, sondern dir nur vorgeschlagen, dich selbst mal etwas weniger wichtig zu nehmen.
MfG ChrisB
Moin!
Hi,
Erst keifen wie eine Hexe und mir dann mit dem Text kommen.
Ich habe nicht gekeift, sondern dir nur vorgeschlagen, dich selbst mal etwas weniger wichtig zu nehmen.
Soso.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Om nah hoo pez nyeetz, fastix® und andere!
Ich für meinen Teil blende diesen Thread jetzt aus und jeder darf sich angesprochen fühlen.
Matthias
Oh, please – STFU …
Es ist schon erstaunlich, wohin sich dieses Forum bewegt hat. Man darf anderen »Halt die Fresse« und »Bitch« an den Kopf werfen, ohne dass es jemanden stört oder jemand eingreift.
Mathias
Hi,
Es ist schon erstaunlich, wohin sich dieses Forum bewegt hat. Man darf anderen »Halt die Fresse« und »Bitch« an den Kopf werfen, ohne dass es jemanden stört oder jemand eingreift.
Ich halte Fastix’ Äußerungen und Vorwürfe für kein bisschen freundlicher, nur weil der von ihm gewählte Tonfall vielleicht etwas polierter/blasierter sein mag.
Wald.raus(Wald.rein());
MfG ChrisB
Ich halte Fastix’ Äußerungen und Vorwürfe für kein bisschen freundlicher
Deshalb sollte dieser gesamte Teilthread gelöscht werden, wo ihr euch bloß abwechselnd Beleidigungen an den Kopf werft.
Dass andere sich mies verhalten, ist keine Rechtfertigung, das Faustrecht anzuwenden.
Mathias
Moin!
Dass andere sich mies verhalten, ist keine Rechtfertigung, das Faustrecht anzuwenden.
Wie ich an VIELEN anderen Threads sehe kann man sich hier im Forum auch sehr gut ohne mich dissen.
Ich habe nichts dagegen, wenn ich auf echte Fehler hingewiesen werde - und es finden sich gewiss viele solche Beiträge wo ich unumwunden einräume das die Kritik berechtigt war. Aber mich einer solchen kleingeistigen und vorliegend tatsächlich falschen Krittelei auszusetzen ist nicht mein Ding.
Ich hab besseres zu tun.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Mahlzeit fastix®,
Ich selbst würde es so beschreiben: Ich habe der Threaderöffnerin einen Weg gezeigt die Fehlermeldung wahrzunehmen [1] und [2]. Das war auch zielführend.
Jein.
Sie hat den von Dir skizzierte groben Lösungsanriss einfach kopiert, festgestellt, dass es funktioniert und wird nun - das zeigt die hier im Forum in Jahren angesammelte Erfahrung - mit einer 99%igen Wahrscheinlichkeit nichts mehr an dem Code ändern.
Das ist - hoffentlich - nicht das, was Du bezwecken wolltest.
Deswegen sind (kopier-)fertige "Lösungen" in den seltensten Fällen tatsächlich welche.
MfG,
EKKi
Moin!
Sie hat den von Dir skizzierte groben Lösungsanriss einfach kopiert, festgestellt, dass es funktioniert und wird nun - das zeigt die hier im Forum in Jahren angesammelte Erfahrung - mit einer 99%igen Wahrscheinlichkeit nichts mehr an dem Code ändern.
Ja, klar. Sie hat insbesondere die Fehlermeldung gesehen. Das genau hat nämlich funktioniert. Demnach hat sie mit 100%er Sicherheit ihren Code geändert.
Das ist - hoffentlich - nicht das, was Du bezwecken wolltest.
Doch. Genau das war was ich wollte: Sie sollte 1.) die Fehlermeldung sehen, 2.) ihre Schlüsse ziehen und dann 3.) den Code ändern. Das sie mindesten bis Schritt 2 kam beweist die Antwort.
Ich erwarte ja nicht, dass einer von Euch "Sorry" sagt oder sich gar Asche auf Haupt streut - aber wenigstens ein Schweigen wäre angemessener als weiter zu versuchen hier vom hundertsten in tausendste zu kommen und mit irgendeinem, an der Sache weit vorbei gehenden Argument irgend wann mal "Recht" zu bekommen.
Die zugrunde liegende Kritik an meiner Antwort ist, mit allem angebrachten Verlaub, nahe am Schwachsinn.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix
Hallo,
Oftmals wird einfach nur vorhandener Code kopiert, ohne dass sich der Empfänger Gedanken um die Sinnhaftigkeit macht. … Begleittext wird auch nicht immer genau gelesen oder verstanden.
Beispielcode ist Beispielcode. Er soll ein Prinzip verdeutlichen, um den Fragesteller bei seiner konkreten Frage einen Schritt weiter zu bringen. Nicht mehr und nicht weniger. Er soll und kann nicht sämtlichen Qualitätsanforderungen genügen. Er soll nicht skalieren, besonders performant sein oder universell einsetzbar sein.
Wenn man argumentiert, dass der Begleittext eh nicht gelesen wird, auch nicht explizite Hinweise darauf, dass der Beispielcode nur ein Schema veranschaulicht, nicht produktionsreif ist, dann dürfte man konsequenterweise gar keinen lauffähigen Beispielcode mehr posten – oder nur noch auf High-End-Lösungen verweisen.
Wenn du zudem Code zeigst, der quick'n'dirty ist und erstmal (hoffentlich) funktioniert, jedoch nicht zeigt, wie man es in der Praxis "richtig" macht
Versuche einmal ein Gegenbeispiel, wie man es »richtig« macht. Es wird nicht hinhauen, ohne dass die Umstände und Ziele näher bekannt sind.
Beim den ersten Gehversuchen ist die(mysql_error()) – wie die nicht-objektorientierte, nicht-abstrahierte MySQL-API überhaupt – durchaus angemessen. Du empfiehlst display_errors=on, error_reporting(E_ALL) sowie var_dump. Das fällt in dieselbe Kategorie: schnelles Feedback beim Entwickeln. Im Rahmen einer größeren Webanwendung in der Produktivumgebung nicht angemessen.
In allen anderen Fällen wäre eine angemessene Fehlerbehandlung zu diskutieren. Auf weitergehende Möglichkeiten hatte Fastix hingewiesen. Um den Umfang eines Postings nicht zu sprengen, kann man eben nur andeuten, dass an dieser Stelle eine bessere Fehlerbehandlung angebracht ist und welche technischen Möglichkeiten zur Verfügung stehen. Wie sie konkret auszusehen hat, lässt sich ohnehin nicht in einem schnellen Beispiel zeigen.
Mathias
Hi!
Oftmals wird einfach nur vorhandener Code kopiert, ohne dass sich der Empfänger Gedanken um die Sinnhaftigkeit macht. … Begleittext wird auch nicht immer genau gelesen oder verstanden.
Beispielcode ist Beispielcode. Er soll ein Prinzip verdeutlichen, um den Fragesteller bei seiner konkreten Frage einen Schritt weiter zu bringen. Nicht mehr und nicht weniger. Er soll und kann nicht sämtlichen Qualitätsanforderungen genügen. Er soll nicht skalieren, besonders performant sein oder universell einsetzbar sein.
Ja, das wissen wir als Experten, dass das so ist. Doch der Anfänger weiß das nicht. Der denkt (zu oft), das muss so sein. "or die()" sollte vermutlich immer nur ein Beispiel sein. Und was ist draus geworden? Es wird ständig in Produktivumgebungen eingesetzt und ist dort üblicherweise eine schlechte Vorgehensweise.
Wenn man argumentiert, dass der Begleittext eh nicht gelesen wird, auch nicht explizite Hinweise darauf, dass der Beispielcode nur ein Schema veranschaulicht, nicht produktionsreif ist, dann dürfte man konsequenterweise gar keinen lauffähigen Beispielcode mehr posten – oder nur noch auf High-End-Lösungen verweisen.
Ja, genau das ist meine Argumentationslinie: vorwiegend das Prinzip erklären. Zur Verdeutlichung kann ruhig auch Code dabei sein, gemäß dem Prinzip "ein Bild sagt mehr als tausend Wörter". Aber es sollte kein Gemälde werden und auch keins, das man sich selbst nicht ins Wohnzimmer hängen würde.
Wenn du zudem Code zeigst, der quick'n'dirty ist und erstmal (hoffentlich) funktioniert, jedoch nicht zeigt, wie man es in der Praxis "richtig" macht
Versuche einmal ein Gegenbeispiel, wie man es »richtig« macht. Es wird nicht hinhauen, ohne dass die Umstände und Ziele näher bekannt sind.
Das haut auch bei eine gut gemeinten Code-Lösung nicht hin. Deswegen plädiere ich ja für die Erklärung des Lösungsprinzip, auch wenn diese aufwendiger als aus der Hüfte geschossener Code ist.
Beim den ersten Gehversuchen ist die(mysql_error()) – wie die nicht-objektorientierte, nicht-abstrahierte MySQL-API überhaupt – durchaus angemessen. Du empfiehlst display_errors=on, error_reporting(E_ALL) sowie var_dump. Das fällt in dieselbe Kategorie: schnelles Feedback beim Entwickeln. Im Rahmen einer größeren Webanwendung in der Produktivumgebung nicht angemessen.
or die() mag bei schnellen Test angemessen sein, und dabei verwende selbst ich es. Die Probleminhaber zeigen es jedoch in den meisten Fällen als Teil des für die Produktivumgebung vorgesehenen Codes. Sich alle Fehlermeldungen anzeigen zu lassen empfehle ich üblicherweise immer mit dem Zusatz "während der Entwicklung". Das ist vielleicht recht knapp, doch bin ich nicht immer in der Lage, einen Aufsatz zu dem Thema zu schreiben, zumal das viel zu häufig empfohlen werden muss. error_reporting(E_ALL) und var_dump() sind natürlich keine Fehlerbehandlung für Produktivumgebungen, aber es sind wichtige Hilfsmittel beim Entwickeln, um erst einmal auf Probleme aufmerksam gemacht zu werden.
Du vergleichst mit dem Argument zwei verschiedene Dinge. Letztere sind Debug-Werkzeuge wie alert() und die Fehlerkonsole eines Browsers beim Javascript-Entwickeln. Ihr Einsatzort ist das Labor, um Fehler beim Code-Erstellen auf die Spur zu kommen. Das andere ist Code, der auf Laufzeitbedingungen reagieren soll. Die Debugwerkzeuge verschwinden am Ende wieder, besonders bei var_dump()/alert() ist es ziemlich offensichtlich, dass das im fertigen Code nichts mehr zu suchen hat. Die Laufzeit-Fehlererkennung bleibt im Code und sollte deswegen gleich ordentlich eingebaut werden. Das später nochmal zu ändern, hat im Prinzip zur Folge, dass man alle Funktionstests noch einmal absolvieren muss. Und das muss ja nicht unbedingt sein.
In allen anderen Fällen wäre eine angemessene Fehlerbehandlung zu diskutieren. Auf weitergehende Möglichkeiten hatte Fastix hingewiesen. Um den Umfang eines Postings nicht zu sprengen, kann man eben nur andeuten, dass an dieser Stelle eine bessere Fehlerbehandlung angebracht ist und welche technischen Möglichkeiten zur Verfügung stehen. Wie sie konkret auszusehen hat, lässt sich ohnehin nicht in einem schnellen Beispiel zeigen.
Wenn wir bei dem konkreten Beispiel bleiben, ist es sehr wohl in kurz zu zeigen möglich. Statt
$result=mysql_query($sql) or die(mysql_error() . "<pre>$sql</pre>");
ist es besser es so zu zeigen
if ($result = mysql_query($sql)) {
// Abfrageergebnisverarbeitung
} else {
// Reaktion auf Fehler
}
Lo!
Ja, genau das ist meine Argumentationslinie: vorwiegend das Prinzip erklären.
SELFHTML ist kein Ort, an dem man bloß abstrakte Prinzipien erklären kann. Viele Fragende bringen die notwendigen Voraussetzungen nicht mit, sie sind keine Akademiker, Informatiker, Ingenieure, Techniker, Programmierer. – Das ist nicht als Lamento gemeint, sondern als neutrale Feststellung. – Sie verstehen es nicht, wenn jemand Codebeispiele in natürlicher Sprache gibt, um ohne bloß keinen konkreten Code zu zeigen.
Das ist einfach ein Erfahrungswert. Wenn ich ich hier zehn mal bloß das Prinzip erkläre, bekomme ich in fünf Fällen eine Nachfrage oder gar eine Mail mit der Bitte, doch mal konkreter zu werden. Von dem, was ich gepostet habe, wurde die Hälfte verstanden, aber am Zusammenbauen der Häppchen hapert es. Wenn ich dann nicht konkreter werde, was ich häufig nicht tue, weil ich nicht alles vorgeben will, lautet die nächste Reaktion »lass gut sein, ich bin woanders fündig geworden / ich habe es anders gelöst«. Ich will dann lieber nicht deren Lösung sehen.
DAHER kommt Quatsch wie mysql_connect() or die(), nicht von lauffähigem Beispielcode mit großen Hinweisen, dass das Beispiel nur das Prinzip veranschaulicht, nur fürs Debugging taugt, kein Produktivcode ist.
Wenn wir bei dem konkreten Beispiel bleiben, ist es sehr wohl in kurz zu zeigen möglich. Statt
$result=mysql_query($sql) or die(mysql_error() . "<pre>$sql</pre>");
ist es besser es so zu zeigen
if ($result = mysql_query($sql)) {
// Abfrageergebnisverarbeitung
} else {
// Reaktion auf Fehler
}
Der Fragestellerin war bereits bereits bekannt, das mysql_query existiert. Das Neue hier ist, dass und wie der Rückgabewert geprüft wird. Ein guter Hinweis. Was zunächst nicht bekannt war – der Anlass der Frage –, wie die Ergebnis-Verarbeitung aussieht und wie eventuelle Fehler angezeigt werden können. Daher wäre ein konkreter Verweis auf mysql_fetch_row, mysql_fetch_object usw. sowie mysql_error angebrachter, als ein nichtssagendes /* Hier musst du das Ergebnis fetchen! */ /* Hier musst du auf den Fehler reagieren, aber ich sage dir absichtlich nicht, wie! */.
Mathias
Hi!
Ja, genau das ist meine Argumentationslinie: vorwiegend das Prinzip erklären.
SELFHTML ist kein Ort, an dem man bloß abstrakte Prinzipien erklären kann. Viele Fragende bringen die notwendigen Voraussetzungen nicht mit, sie sind keine Akademiker, Informatiker, Ingenieure, Techniker, Programmierer. – Das ist nicht als Lamento gemeint, sondern als neutrale Feststellung. – Sie verstehen es nicht, wenn jemand Codebeispiele in natürlicher Sprache gibt, um ohne bloß keinen konkreten Code zu zeigen.
Wenn man das als Antwortender merkt, kann man immer noch konkret werden. Doch gleich von vorn herein die Lösung als Code zu geben, entspricht nicht dem SELF- sondern dem GET-Prinzip. Das Motto heißt immer noch die Energie des Verstehens und nicht des Lösunggebens, und das find ich gut so.
Das ist einfach ein Erfahrungswert. Wenn ich ich hier zehn mal bloß das Prinzip erkläre, bekomme ich in fünf Fällen eine Nachfrage oder gar eine Mail mit der Bitte, doch mal konkreter zu werden.
Das ist ungefähr wie mit target=_blank, viele wollen es oder kennen es nicht anders, andere hassen es. Man weiß es als Antwortender (außer bei bekannten Kandidaten) nicht vorher, welche Strategie zu Ziel führt. Von vornherein eine Fertig-Lösung zu präsentieren, gibt zwar oft einen schnellen Erfolg, und man selbst hatte Freude am Programmieren, nimmt aber auch irgendwie dem anderen die Möglichkeit vorweg, selbst tätig zu werden und dabei aus seine Fehlern Erfahrung zu ziehen. Manchmal sehe ich einen offensichtlichen Fehler. Wenn ich jedoch nur sage, das und das ist falsch, so ist es richtig, nehme ich dem Fragenden die Möglichkeit des Erfahrungsammelns beim Debugging oder beim Umgang mit Dokumentationen. Sage ich lieber: schau dir an, was real ist und bringe ihm den Umgang mit den Werkzeugen bei oder wie man in der Dkoumentation etwas findet, ist das unter Umständen eine längere Anwort, doch das befähigt bei ähnlichen Problemen, selbst nach der Ursache suchen zu können - so zumindest meine Hoffnung. Es gibt ja immer noch die Möglichkeit, mit einem Beispiel konkret werden. Und ja, dann gibt es immer noch Anwender, die es nicht verstehen. Dann ist das irgendwann auch mal Pech.
Von dem, was ich gepostet habe, wurde die Hälfte verstanden, aber am Zusammenbauen der Häppchen hapert es. Wenn ich dann nicht konkreter werde, was ich häufig nicht tue, weil ich nicht alles vorgeben will, lautet die nächste Reaktion »lass gut sein, ich bin woanders fündig geworden / ich habe es anders gelöst«. Ich will dann lieber nicht deren Lösung sehen.
Solche Kandidaten gibt es immer, aber entweder bin ich gut im Verdrängen oder mir begegnen sie sooo oft auch wieder nicht.
Wenn wir bei dem konkreten Beispiel bleiben, ist es sehr wohl in kurz zu zeigen möglich. Statt
$result=mysql_query($sql) or die(mysql_error() . "<pre>$sql</pre>");
ist es besser es so zu zeigen
if ($result = mysql_query($sql)) {
// Abfrageergebnisverarbeitung
} else {
// Reaktion auf Fehler
}Der Fragestellerin war bereits bereits bekannt, das mysql_query existiert. Das Neue hier ist, dass und wie der Rückgabewert geprüft wird. Ein guter Hinweis. Was zunächst nicht bekannt war – der Anlass der Frage –, wie die Ergebnis-Verarbeitung aussieht und wie eventuelle Fehler angezeigt werden können. Daher wäre ein konkreter Verweis auf mysql_fetch_row, mysql_fetch_object usw. sowie mysql_error angebrachter, als ein nichtssagendes /* Hier musst du das Ergebnis fetchen! */ /* Hier musst du auf den Fehler reagieren, aber ich sage dir absichtlich nicht, wie! */.
Entschuldigung, ich bezog mich bei "konkretes Beispiel" auf unseren Diskussionsgegenstand, eine allgemeine Alternative zum or-die()-Code zu geben, und nicht auf das Thread-Problem. Für einen konkreten Fall und je nach Wissensdefizit kann man selbstverständlich den einen oder anderen Zweig ausführlicher gestalten. Und ich finde nicht, dass es nichtssagend ist. Es zeigt zumindest die Stellen, an denen man noch tätig werden soll, ohne gleich eine vergleichbar schlechtere Lösung zu präsentieren. Vielleicht kann es der Anwender selbst vervollständigen, vielleicht will er es nicht, dann lässt er es eben weg und soll damit glücklich werden, vielleicht kommt es im weiteren Verlauf zu einer Konkretisierung der Abschnitte. Es gibt immer irgendwo einen optimalen Weg zur Lösung, der jedoch nicht immer gleich zu Anfang bekannt ist. Extreme, wie abstrakte wissenschaftliche Erklärungen oder Fertiglösungen auf dem Präsentierteller, sind zwar auch in einigen Fälle zielführend, doch ich denke, das Beste ist irgendwo dazwischen.
Lo!
Mahlzeit fastix®,
Genau deshalb ist es in keinster Weise sinnvoll, einem Fragesteller mit dem von Dir geposteten Code (oder äquivalenten Blödsinn) zu antworten ... der weiß evtl. nicht um die von Dir nachträglich angesprochene Problematik, übernimmt den Code einfach und denkt sich nichts dabei.
MfG,
EKKi
Hi!
$row = mysql_fetch_row($anzahl);
echo $row;
Gibt mir aber ein leeres array aus.
Nein, es gibt den String "Array" aus. Das passiert immer, wenn man versucht, ein Array mit echo auszugeben. Ich habe nicht umsonst var_dump() zur Kontrollausgabe empfohlen.
Lo!
Hi!
Wieso baust Du eine Schleife, wenn nur eine Zeile zu erwarten ist?
Wie wäre es denn noch einfacher?
Neben der Fehlerbehandlung der Query-Funktion brauchst du weiterhin eine Fetch-Funktion. In deinem speziellen Fall gibt es exakt eine Ergebniszeile, und eine leere Menge kann nicht vorkommen. Ein Fetch-Aufruf direkt nach der erfolgreichen Query liefert also immer ein nicht leeres Array. Und auf dessen Inhalt greifst du genauso zu, wie in einer Abfrageschleife bei mehrzeiligen Ergebnissen.
echo "$messeranzahl";
Hier schein ein fehler drin zu sein...
Ja, wo kommt denn $messeranzahl her? Variablen müssen auch nicht in Stringbegrenzer eingebaut werden.
Wenn du PHP entwickelst, ist es immer sinnvoll, das error_reporting auf E_ALL (und display_errors auf on) zu stellen, dann bekommst du noch eine Menge nützlihcer Hinweise von PHP erzählt. Zudem ist "scheint ein Fehler drin zu sein" keine Aussage, mit der ein Außenstehender viel anfangen kann. Beobachte und beschreibe genau, was passiert und was nicht passiert, du aber erwartet hast. Überprüfe außerdem, ob deine Erwartungen mit der Realität übereinstimmen, indem du dir die Werte von Variablen zur Kontrolle ausgeben lässt. var_dump() ist dafür am besten geeignet.
Lo!
hi Claudia,
echo "$messeranzahl";
Soso: Messer ;)
Wenn ich mich nicht irre, kennen wir uns, ich habe schonmal bei Dir gekauft und diese wunderschönen Frühstücksmesserchen mit Holzgriff sind täglich im Einsatz.
Viele Grüße von Oppenheim nach Bruchsal!
Hotti
PS: Habe mittlerweile das Handwerk der Ölpolitur gelernt. Ist ganz ähnlich wie eine Schelllack-Politur, der erste Unterschied ist jedoch der, dass eine Ölpolitur ein bischen (*G*) länger dauert. Der zweite Unterschied ist der: Holz mit Ölpolitur (Messergriffe) ist wasserabweisend und bei weitem nicht so griffempfindlich wie Schelllack.
Hi!
wie könnte man es besser schreiben?
[code lang=php]<?php
$anzahl = mysql_query("SELECT sum(anzahl) as summe FROM tabelle ");
Hier fehlt noch eine Fehlerbehandlung. Die Syntax der Abfrage ist zwar korrekt, aber Abfragen können noch an anderen Dingen scheitern.
while(($row = mysql_fetch_assoc($anzahl)) !== FALSE ) {
Das !== FALSE kann ersatzlos gestrichen werden. Der Rückgabewert der Fetch-Funktionen ist auch unter Berücksichtigung aller automatischen Typumwandlungen PHPs für den angestrebten boolschen Kontext eindeutig.
echo "" . $row['summe'] . ' ';
Leerstrings in verknüpften Strings sind immer überflüssig. Wenn du eine Typumwandlung haben möchtest (die du aber im vorliegenden Fall nicht benötigst), dann mach das mit einem echten Typecast. Also ist
echo $row['summe'] . ' ';
ausreichend.
Lo!