Ich versuche gerade, mich mit PHP auseinander zu setzen, da ich am 10. August ne Hausarbeit abgeben muss. Im Februar hatte mir dead_orc (ich hoffe mal, der nick ist jetzt richtig, kann mich nur noch an den deutschen erinnern ) bei nem Gästebuch geholfen, da ichs zeitlich aber nicht mehr geschafft hab, den Rest zu machen, hab ich es erst gar nicht abgegeben.
Jetzt sitz ich hier und versuchs nochmal, hab mir das Ding angeguckt, hab mir auch diverse kleine Programme aus nem Online-Handbuch, welches unser Dozent ins Netz gestellt hat, angeguckt. Also in nen Editor kopiert, gespeichert und unter localhost gestartet. Hab dafür XAMPP installiert.
Jetzt ist mein Problem, dass ich eben ein komisches Gästebuch erstellen soll, bei dem die Datenbank erst im Skript angelegt wird, sofern sie nicht schon vorhanden ist, weil ein Eintrag drin steht.
Vielleicht hab ich grad nen Brett vorm Kopf oder ich weiß es nicht. Aber kann ich irgendwo nachgucken, ob wirklich ne Datenbank angelegt wurde? Weil wenn ich das schreibe, was ich denke, was man schreiben sollte, dann passiert irgendwie nix wirklich. Also legt er irgendwo ne kleine Datei an, die dann den Namen der DB trägt, den ich gewählt habe?
Und kann mir vielleicht mal jemand den Code-Schnipsel aufschreiben, wo eben gesagt wird, dass eine Datenbank 'created' wird, und wie es dann aussehen muss, dass sie beim nächsten Aufruf nicht nochmal erstellt wird, sondern dass sie eben nur dann erstellt wird, wenn sie noch nicht existiert und sonst einfach ganz normal aufgerufen wird?!
Ich hatte mir das jetzt irgendwie so gedacht (ist bestimmt falsch >_> aber wär nett, wenn mir jemand sagt, warum wieso und weshalb *G*) am Anfang:
Ähm ja, Threadtitel ist vielleicht nicht gerade aussagekräftig, aber ich werd mit sicherheit noch zig weitere Fragen haben *G*
Das hilft mir aber trotzdem nicht, ich weiß jetzt trotzdem nicht, ob irgendwo steht, dass ne Datenbank plus Tabelle angelegt wurde oder nicht.
Und wenn ich jetzt diesen code hier nehme (der ist aus nem Buch):
Und dann das von mir da einfüge, dann müsste doch eigentlich sowas hier rauskommen, oder nicht?
Und theoretisch müsste er mir doch dann zumindest, nachdem ich alles eingegeben habe, sagen, dass ein Datensatz angelegt wurde. Wieso tut er das dann nicht?
Ich glaub, ich sollte ins Bett gehen :-/ vielleicht hab ich morgen nen klaren Kopf und kann wieder denken, aber mir lässt das sonst wieder keine Ruhe >_>
Es ist INSERT INTO personen, nicht INSERT personen. Ach ja, gewöhn dir bitte der Übersicht halber an, SQL Befehle groß zu schreiben. Dann kann man die Befehle leichter von den Werten und Tabellennamen unterscheiden.
Überhaupt würde ich das Buch sofort in die Tonne hauen.
1. Offensichtlich fehlerhafter Code
2. Der Output ist alles andere als standardkonform. Ich bin ja auch nich der Typ, der wirklich alles streng nach HTML 4 oder gar XHTML Standard macht, aber Zeilenumbrüche mit einem nicht geschlossenen <p>, das tut schon sehr weh.
Außerdem rate ich davon ab, die Befehle über mehrere Zeilen mit .= aneinander zu hängen. Da kommt man leicht mit Leerzeichen durcheinander und es wird auch nicht unbedingt leichter, den Code später wieder zu verstehen. Aber das ist wohl Geschmackssache.
Hm, na gut, ich dachte, für die Grundlagen würde es einigermaßen gehen, aber wenn selbst der Code im Buch schon nicht funktioniert >_>
Jedenfalls bleibt mein Problem immer noch bestehen, auch wenn ich da noch das Into reinpacke. Er gibt mir immer noch die Meldung aus, dass kein Datensatz hinzugefügt wurde. Wieso nur
Also, ich schaffst jetzt soweit, dass meine Datenbank angelegt wird sowie meine Tabelle. Weiß auch, wo ich das dann nachgucken kann, obs wirklich geklappt hat.
Jetzt hab ich aber ein oder zwei neue fragen.
1. Ich sage ja zu beginn, dass er eine Datenbank erstellen soll, sofern diese noch nciht existiert. Kein Problem, kann ja einfach "CREATE DATABASE IF NOT EXISTS" schreiben.
Danach muss ich aber auch noch eine Tabelle anlegen, damit er die Einträge irgendwo reinspeichert. Wie mach ich das in dem Fall, dass er da nicht beim nächsten Mal sagt: "Die tabelle gibts aber schon."?! Probiert hab ichs mit CREATE TABLE IF NOT EXISTS, aber das geht scheinbar nicht, da meint er zu mir:
Zitat
MyISAM table 'personen' is in use (most likely by a MERGE table). Try FLUSH TABLES.
...
Ich kann damit nur leider nicht viel anfangen, was genau bedeutet Flush? Hilft mir das bei meinem Problem? Wenn ja, wie muss ich das dann formulieren, wenn nein, wie kann ich das sonst machen?
2. Wenn ich was eingeben will, um halt mal zu testen, ob er auch in meine Tabelle was abspeichert, kommt immer folgende Meldung:
Unknown column 'july' in 'field list'
Was heißt das, wieso tut er das, wieso speichert ers nicht einfach in die Datenbank? Ich meine, der Datentyp VARCHAR mit 30 Zeichen müsste doch ausreichen? Oder woran liegt das?
Ich hab das eben so gemacht, dass ich den Ordner, der für die DB angelegt wird, mit den DAteien, die für die Tabellen da sind, gelöscht habe. Damit also noch gar nix da ist und alles erzeugt wird.
Dann hab ich den Code ausgeführt, wo nur CREATE TABLE personen drin steht, hab dann in mein Formular was eingegeben (was dann wieder zu meinem 2. Problem geführt hat, aber das is jetzt mal eben nicht so wichtig). Dann hab ich nochmal was eingegeben und die Meldung kam, dass die Tabelle schon existiert, ist ja auch klar, hab ja nicht gesagt, dass er die Tabelle nur dann anlegen soll, wenn sie NICHT existiert.
So, dann hab ich meinen Code verändert und das mit dem IF NOT EXISTS bei der Tabelle eingefügt. Dann hab ich wieder meinen Code ausgeführt und diesmal hat er nicht gemeckert, dass die Tabelle ja schon vorhanden wäre. Insofern müsste es eigentlich doch gehen.
Neues Problem ist jetzt, wenn ich das IF NOT EXISTS stehen lasse und dann den Ordner mit dem Kram lösche, kommt beim ersten Aufrufen des Codes (wo ja dann nix mehr da ist und eigentlich alles neu angelegt werden soll) diese komische Meldung:
MyISAM table 'personen' is in use (most likely by a MERGE table). Try FLUSH TABLES.
Was heißt das, was muss ich machen, dass es auch mit IF NOT EXISTS funktioniert?
Wie ich das hasse, dass es nie so geht, wie ich mir das vorstelle *g*
Und wär auch schön, wenn mir jemand sagen kann, warum ich nix eintragen kann *G*
...Neues Problem ist jetzt, wenn ich das IF NOT EXISTS stehen lasse und dann den Ordner mit dem Kram lösche, kommt beim ersten Aufrufen des Codes (wo ja dann nix mehr da ist und eigentlich alles neu angelegt werden soll) diese komische Meldung:
MyISAM table 'personen' is in use (most likely by a MERGE table). Try FLUSH TABLES.
Was heißt das, was muss ich machen, dass es auch mit IF NOT EXISTS funktioniert?
Wie ich das hasse, dass es nie so geht, wie ich mir das vorstelle *g*
Und wär auch schön, wenn mir jemand sagen kann, warum ich nix eintragen kann *G*
...
Nunja... man sollte nicht einfach so die Datenordner MySQL's löschen.
Soweit ich weiß lagert MySQl einiges in einem Cache aus wenn es Queries bearbeitet.
Wenn du einen Datenordner nun löschst, kann es sein das MySQL Cachekonflikte erzeugt.
Ich empfehl dir PHPMyAdmin auf deinen Server zu laden und MySQL und die angelegten Datenbanken damit zu verwalten.
Oder benutz ein anderes MySQL-Administrationstool.
Ich gehe davon aus das XAMPP eins mitliefert.
Soweit ich weiß liefert XAMPP sogar PHPMyAdmin direkt mit.
Schau mal unter: http://localhost/phpmyadmin/
Weshalb du nichts eintragen kannst weiß ich so auf Anhieb auchnicht. Ich bin zu faul deinen Code nun genau zu analysieren, sorry.
Überprüf mal mit PHPMySQL selbst die Strukturen der angelegten Tabelle(n). Wenn dort ein Fehler vorliegt, findest du ihn so vielleicht besser.
Ah, gut zu wissen :-) Damit wär ja schonmal ein Problem weniger auf der Welt. Also löschen immer über phpmyadmin.
Nur, was mach ich jetzt mit dem anderen Problem, wie krieg ich meine Daten da jetzt rein?
edit: Hm, hab die Tabellen eigentlich schon vorher mit PHPmyadmin angelegt und dann die Syntax übernommen. naja, ich werds nochmal testen und dann mal editieren, falls ich was neues rausbekommen sollte >_>
Ah, gut zu wissen :-) Damit wär ja schonmal ein Problem weniger auf der Welt. Also löschen immer über phpmyadmin.
Nur, was mach ich jetzt mit dem anderen Problem, wie krieg ich meine Daten da jetzt rein?
edit: Hm, hab die Tabellen eigentlich schon vorher mit PHPmyadmin angelegt und dann die Syntax übernommen. naja, ich werds nochmal testen und dann mal editieren, falls ich was neues rausbekommen sollte >_>
...
Hier mal die Syntax wie ich sie für's Einfügen deines Datensatzes verwenden würde:
Überprüf ob wirklich alle Felder so existieren wie sie im INSERT-Query angesprochen werden. Check auch nochmal auf Tippfehler.
Lässt man sich keinen MySQL-Error ausgeben, verschweigt MySQL gerne das dort der Fehler liegt und meldet einfach gar nichts auch wenn nichts angelegt wurde durch einen Fehler.
Durch deinen Code steig ich nicht so recht durch. Ist zu unterschiedlich von der Syntax die ich gewohnt bin zu benutzen.
Danke, du bist mein Held
Werd ich mich wohl daran gewöhnen müssen, es so zu machen wie du.
Wahrscheinlich liegts wieder an irgendwelchen kleinen Zeichen, eigentlich müsste es gleich sein, komisch.
Aber danke nochmal Ich hoffe, ich komm jetzt erstmal allein weiter *toitoitoi*
Danke, du bist mein Held
Werd ich mich wohl daran gewöhnen müssen, es so zu machen wie du.
Wahrscheinlich liegts wieder an irgendwelchen kleinen Zeichen, eigentlich müsste es gleich sein, komisch.
Aber danke nochmal Ich hoffe, ich komm jetzt erstmal allein weiter *toitoitoi*
Hab mal wieder ne neue Frage (naja, wahrscheinlich nicht nur eine ). Chocwise ist grad nicht da, also poste ichs einfach mal hier.
Ich hab jetzt soweit meinen Code, in dem ich die Datenbank plus tabelle erstelle, wenns sie noch nicht gibt, wo ich was eintragen kann und wos mir auch was ausgibt. Ist bisher erstmal nur so testmäßig, ob es überhaupt funktioniert, deshalb auch nicht auf irgendwelche Einrückungen achten bitte *g+ Die sind eh alle noch nicht richtig, hab öfter mal was rauskopiert und woanders eingefügt, deswegen stimmt das noch nicht so ganz.
Jetzt kann ich aber leider auch Einträge machen, wo einfach ein leerzeichen oder gar nix drinsteht. Das soll so aber nicht sein. Habs mit probiert, aber das bringt auch nix, kann trotzdem einfach auf absenden klicken und angezeigt wird mir dann einfach nur ein Komma, was sozusagen die beiden Einträge voneinander abgrenzt *G*
Ich hab dann folgendes eingefügt, vor das $arguments = "'$na','$vn'";
Er gibt mir dann auch den Satz aus, der erscheinen soll, wenn irgendwo was nicht eingegeben wurde, aber einen Datzensatz legt er trotzdem an. Woran liegt das? Also kann ich ihm irgendwie verbieten, dass er auf jeden fall was eingeben MUSS? Ist jetzt egal, ob sich das nur auf eins von beiden bezieht oder so, übertragen kann ichs ja selbst.
Müsste es mit NOT NULL gehen und ich hab was falsch gemacht? Aber dann müsste ich ja auch ne Fehlermeldung durch dieses echo mysql_error() bekommen?!
So, und wo ich grad dabei bin einen Post zu verfassen, kann ich gleich mal weiterfragen.
Soll ja wie gesagt eine Hausarbeit abgeben. Und der Lehrer will es so haben, dass er die Dateien einfach in seinen htdocs-Ordner kopieren kann und losgehts. Bei dem GB ist das ja nicht weiter schwer, das legt ja von selbst eine Datenbank an und alles.
Jetzt muss ich aber noch ein Skript basteln, wo Bilder, die in einer Datenbank gespeichert werden, per Random aufgerufen werden, wenn man die Seite aktualisiert. Kennt ja sicher jeder. Nur wenn ich die Datenbank anlege über phpmyadmin zum Beispiel, dann ist die ja in einem (oder mehreren?) anderen Ordner (weiß jetzt nur, dass er eben in dem mysql-Ordner ist). Wie kann ich es in dem Fall hinbekommen, ihm die Dateien zukommen zu lassen, ohne ihm eine 3-Seitenanweisung zu geben, welche Datei er wohin packen muss? Gibt es eine Möglichkeit?
Ich hab deinen Post zwar nicht komplett durchgelesen, jedoch ist mir ein kleine Fehler in deinem letzen PHP-Block aufgefallen.
trim() liefert einen String zurück, dh. bei $na = trim(" "); wäre $na = ""; und nicht false, so wie du es überprüfst.
Das Skript sollte also eher so aussehen, damit deine Fehlerausgabe funktioniert. edit:
Zu deinem letzen Absatz, du könntest die Tabellen der Bilder samt Inhalt (=Bildern) per phpmyadmin exportieren und dann per Skript wieder anlegen. Dann müsste er nämlich nur achten, dass die *.sql Datei im richtigen Verzeichniss liegt.
edit2:
Stimmt, das ! muss weg, dumme angewohnheit von meinen Scripten dort verwende ich fast ausschlieslich !empty() ^^°
Ah vielen Dank Werd das gleich mal ändern. hab eben auch noch weiter probiert und ne Lösung gefunden, wo er weder leere Einträge noch Einträge nimmt, die keine Leerzeichen haben. Also scheints ja irgendwie doch mit trim gehen zu müssen?! Naja egal ^^
Hat sich im Prinzip also erledigt, aber wär schön, wenn mir vielleicht noch jemand mit XAMPP und HTDOCS weiterhelfen könnte
edit: Exportieren? hm, muss ich mal ausprobieren, wie das geht ^^ Danke jedenfalls
ach ja, mit dem empty: das geht nur, wenn ich das ! weglasse, ansonsten gibt er mir nämlich die Fehlermeldung verdreht aus *g*
Ich glaub ich spring gleich aus dem Fenster -.- Jetzt hab ich ein Problem, was ich überhaupt nicht verstehe.
Hab an meinem GB rumgewerkelt, und mir fehlte ja bisher immer noch ein Feld, wo man dann den Eintrag machen kann. Gut, dachte ich, füg ich halt beim Anlegen der Tabelle und bei den ganzen Variablen überall noch was mit ein. Hab ich gemacht, hab die Seite neu aufgerufen, aber was ist? Es wird nix angezeigt, überhaupt nix, null, nicht mal ne Fehlermeldung, nur ein weißer leerer Browser.
Ok, vielleicht ist irgendwo ein fehler, alles wieder weggemacht, was ich eingegeben habe, gespeichert, seite neu aufgerufen, immer noch alles leer. Dabei hat der Code davor ja funktioniert -.- Ich meine, wieso zeigt er mir einfach NICHTS an? Das kann doch nicht sein?
Und bevor jetzt jemand sagt, ich hätte irgendwie was zu viel gelöscht: Ich hab das ganze 4 oder 5 mal durchgespielt und es ist jedes mal so. War heute schon auf Arbeit so, und hier jetzt auch ein paar mal. Und so blöd, dass ich jedes mal was zu viel lösche, bin ich nicht. Außerdem müsste er mir doch dann zumindest nen parse-error oder sowas anzeigen?!?
Vielleicht irgend wo nen Leerzeichen zu viel(zu wenig) ?
mysql_error hast ja aber änder das jeweils in das ist wesentlich besser (auch wenn meistens nichts anderes erreicht wird)
Wirklich alles richtig? gerade bei den MySQL Befehlen können kleinere Fehler dazu führen das gar nichts ausgeführt wird!
Hm, komische Sache. Es liegt an einem einzigen Teil, wie ich jetzt rausgefunden habe. Und zwar hatte ich meinen Code ja aufgesplittet in zwei Teile, oben stand der, wo ich mit der Datenbank verbinde und unten der, wo ich die Daten ausgebe, weil ich wollte, dass die Daten unter dem Formular ausgegeben werden und nicht dadrüber (sieht ja auch dumm aus )
heute mittag gings, jetzt meckert er rum, wenn ich das trennen will und nimmt das nur noch als ganzes. Naja, jetzt hab ich den kompletten php-code unter das Formular geschoben, dann gehts auch >_> Merkwürdig >_<