Wer findet den Fehler im PHP Script?

Mitglied: beta-way-of-life

beta-way-of-life (Level 1) - Jetzt verbinden

16.08.2011 um 14:52 Uhr, 5165 Aufrufe, 30 Kommentare

Hallo Leute,

ich hoffe jemand kann mir weiterhelfen.
Ich stehe wirklich auf der Leitung! :/

Mein Script soll die Daten auslesen und bearbeiten können.

Momentan habe ich folgender Fehler:

Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\itdb\test2.php on line 8

Ka, warum!
Ich habe seit dem letzen mal nichts nennenswertes verändert, und seit heute kommt dieser Fehler.

Letzes mal habe ich beim Drücken auf den Submit Button noch eine neue Seite mit der Meldung "Zugriff verweigert" bekommen.

Ich hoffe jemand kann mir helfen beide Fehler auszumerzen. :) face-smile

Danke schon mal. :) face-smile

lg Joe

config.php ---------------------------------

test.php -----------------------------------

30 Antworten
Mitglied: thaenhusen
16.08.2011 um 14:58 Uhr
Moin.

$_sql = "UPDATE geraete';

in

$_sql = "UPDATE geraete";

ändern.

HTH
MK
Bitte warten ..
Mitglied: beta-way-of-life
16.08.2011 um 15:02 Uhr
Zitat von @thaenhusen:
Moin.

$_sql = "UPDATE geraete';

in

$_sql = "UPDATE geraete";

ändern.

HTH
MK


Lol, ich habs anscheinend geschafft den Wald vor lauter Bäumen nicht mehr zu sehen. lol
Ich hab die ganze Zeit eine Zeile tiefer gesucht. lol.

Und nebenbei alles seit ca. 30 Minuten durchsucht. :D

Gut, danke erstmal thaenhusen.

Jetzt bin ich wieder beim alten Problem:

Zugriff verweigert!

Der Zugriff auf das angeforderte Objekt ist nicht möglich. Entweder kann es vom Server nicht gelesen werden oder es ist zugriffsgeschützt.

Sofern Sie dies für eine Fehlfunktion des Servers halten, informieren Sie bitte den Webmaster hierüber.

Error 403

localhost
16.08.2011 15:00:24
Apache/2.2.17 (Win32) mod_ssl/2.2.17 OpenSSL/0.9.8o PHP/5.3.4 mod_perl/2.0.4 Perl/v5.10.1

Hat da auch jemand eine Idee??
Bitte warten ..
Mitglied: kaiand1
16.08.2011 um 15:11 Uhr
Moin
Erstmal sagt der Parse Fehler in Datei test2.php, du zeigst aber nur test.php.
Dann gibt es meist in der php error log noch Hinweise was Falsch ist.
Zumal
error_reporting(E_ALL);
echo mysql_error();
auch weitere Infos geben.
Bitte warten ..
Mitglied: beta-way-of-life
16.08.2011 um 15:23 Uhr
Zitat von @kaiand1:
Moin
Erstmal sagt der Parse Fehler in Datei test2.php, du zeigst aber nur test.php.
Dann gibt es meist in der php error log noch Hinweise was Falsch ist.
Zumal
error_reporting(E_ALL);
echo mysql_error();
auch weitere Infos geben.

Sry, hab mich nur verschrieben.
Die Datei heißt natürlich test2.php

Wobei ich eh schon am neuen Problem hänge....
Mit dem Zugriff verweigert.... wie oben beschrieben.

APACHE Error ------------------------------------

[Tue Aug 16 15:17:21 2011] [error] [client 127.0.0.1] (20024)The given path is misformatted or contained invalid characters: Cannot map POST /itdb/%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20erfolgreich%20in%20%3Cb%3EC:/xampp/htdocs/itdb/test2.php%3C/b%3E%20on%20line%20%3Cb%3E1%3C/b%3E%3Cbr%20/%3E HTTP/1.1 to file, referer: http://localhost/itdb/test2.php

Ich vermute mal der Fehler liegt in der ersten Zeile. Die verstehe ich nicht wirklich. :/

<form action="<?php echo $erfolgreich; ?>" method="post">

lg
Bitte warten ..
Mitglied: Arano
16.08.2011 um 15:57 Uhr
Hi,

wann wird denn die Variable $erfolgreich erstellt ?
Oder mal etwas anders gefragt, was wenn es nicht "erfolgreich" war ? Existiert die Variable dann auch !?
Z.B.
Wenn das speichern gut verläuft, ist alles in Ordnung, die Variabel $erfolgreich wird erstellt und kann später verwendet werden.
Wenn es einen Speicherfehler gibt, wird die Fehlermeldung ausgegeben.... ABER das Script läuft weiter und obwohl die Variabel $erfolgreich in diesem Fall nicht erstellt wurde, wird trotzdem versucht sie Auszugeben.

Könnte ähnlich bei die sein !

MySQL - Reference - UPDATE

~Arano
Bitte warten ..
Mitglied: ganymed
16.08.2011 um 16:33 Uhr
Prüfe mal genau was in deiner Variable $erfolgreich drin steht.
Oft kommt es vor, dass dort nicht das drin steht was man erwartet bzw. diese einen falschen Inhalt hat.

gruß ganymed
Bitte warten ..
Mitglied: beta-way-of-life
16.08.2011 um 16:58 Uhr
Zitat von @Arano:
Hi,

wann wird denn die Variable $erfolgreich erstellt ?
Oder mal etwas anders gefragt, was wenn es nicht "erfolgreich" war ? Existiert die Variable dann auch !?
Z.B.
Wenn das speichern gut verläuft, ist alles in Ordnung, die Variabel $erfolgreich wird erstellt und kann
später verwendet werden.
Wenn es einen Speicherfehler gibt, wird die Fehlermeldung ausgegeben.... ABER das Script läuft weiter und obwohl die Variabel
$erfolgreich in diesem Fall nicht erstellt wurde, wird trotzdem versucht sie Auszugeben.

Könnte ähnlich bei die sein !

MySQL - Reference - UPDATE

~Arano

Hi,

die Variable gibt es noch nicht.
Sollte aber soweit keinen Einfluss auf das Script haben oder?

Hab die Variable inzwischen so definiert:

<?
$erfolgreich = "Erfolgreich gespeichert!";
?>

Hat aber wie gesagt keinen Einfluss auf das Script.

Ja, die UPDATE und SET Felder passen doch so oder?

Danke.
Bitte warten ..
Mitglied: Arano
16.08.2011 um 17:28 Uhr
Hi

Sollte aber soweit keinen Einfluss auf das Script haben oder?
...
Hat aber wie gesagt keinen Einfluss auf das Script.
Oh doch !
Das IST eine Fehleinschätzung !

Schau dir die Fehlermeldung aus dem Apache-Log einmal genauer an !
/itdb/%3Cbr%20/%3E%3Cb%3ENotice%3C/b%3E:%20%20Undefined%20variable:%20erfolgreich%20in%20%3Cb%3EC:/xampp/htdocs/itdb/test2.php%3C/b%3E%20on%20line%20%3Cb%3E1%3C/b%3E%3Cbr%20/%3E
Mit ein bisschen Augenkneifen wird das zu:
/itdb/<br /><br />Notice: Undefined variable: erfolgreich in C:/xampp/htdocs/itdb/test2.php on line 1<br />

Das ist die Warnmeldung von PHP die in einer Pfadangabe steht , somit kann der Apache mit dem "Pfad" nichts mehr anfangen weil es diesen nicht gibt !
Wie du selber schon richtig vermutet hast, kommt das aus dieser Zeile
Das müsstest du auch sehen können wenn due die Seite aufrufst und dir dann von dieser den Quelltext anzeigen lässt.

Wie du siehst, hat diese undefinierte Variable enorme Auswirkungen auf die Abarbeitung ;-) face-wink

Ja, die UPDATE und SET Felder passen doch so oder?
Schau dir die Reference an, dort stehts ...und in meinem Beispiel. ;-) face-wink


~Arano
Bitte warten ..
Mitglied: beta-way-of-life
17.08.2011 um 09:40 Uhr
Also,

ich hab jetzt deinen Vorschlag mit $speichern und $erfolgreich eingebaut.

Jetzt regt er sich da auf: :/

[Wed Aug 17 09:19:20 2011] [error] [client 127.0.0.1] File does not exist: C:/xampp/htdocs/itdb/Die Daten wurden gespeichert !, referer: http://localhost/itdb/test2.php

Muss diese form action zwingend auf ein eigenes File verweißen??

Das Problem mit dem SET und UPDATE versteh ich leider auch nicht. -.-
Kannst mir vlt zeigen wie es mit dem .$_POST richtig zu schreiben ist?

Danke.
Bitte warten ..
Mitglied: ganymed
17.08.2011 um 10:00 Uhr
Hallo,

wie bereits von Arano
Das müsstest du auch sehen können wenn due die Seite aufrufst und dir dann von dieser den Quelltext anzeigen lässt.
und von mir gesagt.
Prüfe mal genau was in deiner Variable $erfolgreich drin steht.

Ich glaube ich weiß jetzt wo der Denkfehler ist.
Wenn du die Variable $erfolgreich so einsetzt <form action="<?php echo $erfolgreich; ?>" method="post"> dann muss dort zwingend eine Pfadangabe stehen.
Also so was wie http://localhost/itdb/test2.php oder ./test2.php. Oft auch gemachter Fehler ist so was C:/....
Bei dir steht dies aber nicht da drin.
Bitte warten ..
Mitglied: thaenhusen
17.08.2011 um 10:03 Uhr
Moin.

Unter action gibt man das skript an, dass die Daten verarbeiten soll.

Also in Deinem Fall das aufrufende Skript.:

<form action="<?php echo $erfolgreich; ?>" method="post">

<form action="test2.php" method="post">

Bei Action kannst Du etwas anstossen bzw. das Skript angeben dem die Daten gegeben werden.

$_sql = "UPDATE geraete";
$_sql .= " SET kunde='".$_POST["kunde"]."',";
$_sql .= " benutzer='".$_POST["benutzer"]."',";
$_sql .= " typ='".$_POST["typ"]."',";
$_sql .= " hostname='".$_POST["hostname"]."',";

Dann fehlen bei den sets noch die trennenden Kommata.

HTH
MK
Bitte warten ..
Mitglied: beta-way-of-life
17.08.2011 um 12:42 Uhr
So, aus verzweiflung hab ich das ganze jetzt in 2 Files gesplitet.
Funktionieren tut es leider immer noch nicht. :/

Fehler im apache error log gibts keine.

edit_test.php

input_test.php

Bitte warten ..
Mitglied: thaenhusen
17.08.2011 um 13:42 Uhr
Moin.

Wie oebn beschrieben hast Du noch zu viele SET und zu wenige Kommas...

HTH
MK
Bitte warten ..
Mitglied: beta-way-of-life
17.08.2011 um 14:44 Uhr
Zitat von @thaenhusen:
Moin.

Wie oebn beschrieben hast Du noch zu viele SET und zu wenige Kommas...

HTH
MK

Hallo,

hab die komas eingefügt.
Hab leider den unterschied erst beim 1000 mal hinschauen gesehen.

Passiert aber leider immer noch nichts.....

lg
Bitte warten ..
Mitglied: ganymed
17.08.2011 um 15:00 Uhr
Vor dem WHERE darf kein Komma sein.
..., comments='...' WHERE nicht
..., comments='...', WHERE
Tip: Bei SQL Problemen mal ein echo $sql; machen, da kann man das Statement besser als ganzes sehen und findet Fehler schneller.
Bitte warten ..
Mitglied: beta-way-of-life
17.08.2011 um 15:10 Uhr
Zitat von @ganymed:
Vor dem WHERE darf kein Komma sein.
..., comments='...' WHERE nicht
..., comments='...', WHERE
Tip: Bei SQL Problemen mal ein echo $sql; machen, da kann man das Statement besser als ganzes sehen und findet Fehler schneller.

Also ich bin wirklich zu blöd dafür! ^^

Da ist doch kein Komma vor dem where?

Bitte warten ..
Mitglied: ganymed
17.08.2011 um 15:23 Uhr
Doch und zwar in Zeile 33 am Ende.
Mach mal ab Zeile 35 folgendes.
Dann siehst du das.
Bitte warten ..
Mitglied: beta-way-of-life
17.08.2011 um 15:31 Uhr
Zitat von @ganymed:
Doch und zwar in Zeile 33 am Ende.
Mach mal ab Zeile 35 folgendes.
Dann siehst du das.

So, danke nochmal.
Ich hab das Komma entfernt:

jetzt bekomm ich beim $_sql echo folgendes:

UPDATE geraete SET kunde='xxx', benutzer='xxx', typ='PC', hostname='tech01', SET benutzer='xxx', SET hersteller='Dell', SET prod_bez='Optiplex 745', SET prod_nr='test', SET sn='', SET spare_nr='', SET service_tag='23J', SET expr_tag='214747', SET kauf_dat='2009-08-11', SET liefer_dat='2009-08-14', SET garantie='2011-08-11', SET domain='testdomain', SET mac='00-1E-4F7-C6', SET ip='138.2.1.20', SET subnet='255.255.255.0', SET gateway='138.2.254.1', SET dns='138.2.1.120', SET dns2='138.2.1.123', SET team_id='', SET team_pass='', SET comments='Technik PC der' WHERE id='1', Erfolgreich gespeichert!

Das wäre soweit richtig oder?

Leider trägt er trotzdem nichts in die DB ein.

Code is jetzt wie folgt:

EDIT: Oben haben ein paar SET's gefehlt.... hab ich ausgebessert. Ist aber selbes Ergebniss.
Bitte warten ..
Mitglied: thaenhusen
17.08.2011 um 15:56 Uhr
Moin.

SETs haben da nicht gefehlt. Du brauchst nur SET kunde = 'Mayer', AP = 'Herr Hans Meyer'.

Wie ist den Deine DB schon gefüllt?
Gibt es ID 1 denn schon. Ansonsten musst Du ein Insert machen.

Irgendwie fehlen Dir da so ein paar Grundlagen, z.B. welche SQL-Befehle es gibt (select, insert, update und delete) etc.


HTH
MK
Bitte warten ..
Mitglied: beta-way-of-life
17.08.2011 um 16:06 Uhr
Zitat von @thaenhusen:
Moin.

SETs haben da nicht gefehlt. Du brauchst nur SET kunde = 'Mayer', AP = 'Herr Hans Meyer'.

Wie ist den Deine DB schon gefüllt?
Gibt es ID 1 denn schon. Ansonsten musst Du ein Insert machen.

Irgendwie fehlen Dir da so ein paar Grundlagen, z.B. welche SQL-Befehle es gibt (select, insert, update und delete) etc.


HTH
MK

Hi nochmal,

ja, bei fixen Werten versteh ich das mit dem Set schon. (wie du gerade beschrieben hast)
Bei Werten aus Formularen passts so wie ich es gemacht habe oder?

Ja, die ID 1 ist gefüllt.

Die Werte werden ja in der edit_test.php ausgelesen und in einem Formular ausgegeben.
Dann ändere ich irgendetwas, drücke auf übernehmen und mit der input_test.php solls geändert werden.

Nur leider passiert da eben nichts.....

Ich weiß, mir fehlen viele Grundlagen weil ich mich nicht effektiv damit befasst habe.
Es braucht nur dieses eine Formular funktionieren. Dann bin ich wunschlos glücklich. :D

Für alles weitere hab ich eh länger Zeit und kann mich einlesen. :) face-smile

lg
Bitte warten ..
Mitglied: ganymed
17.08.2011 um 16:08 Uhr
Da muss ich thaenhusen zustimmen.
Beschäftige dich noch mal gründlich mit dem SQL Syntax.
Am Ende ist auch noch ein Fehler.
Am Ende eines Statements kommt kein , sondern ein ;
Wobei man dass auch weck lassen kann da es ja nur ein einziger SQL Befehl ist und laut mysql_query Beschreibung sogar soll.

gruß ganymed
Bitte warten ..
Mitglied: thaenhusen
17.08.2011 um 16:27 Uhr
Moin.

Was passiert denn, wenn Du

in phpMyAdmin oder ähnlichen auf die Datenbank loslässt?

HTH
MK
Bitte warten ..
Mitglied: beta-way-of-life
17.08.2011 um 16:40 Uhr
Zitat von @thaenhusen:
Moin.

Was passiert denn, wenn Du

in phpMyAdmin oder ähnlichen auf die Datenbank loslässt?

HTH
MK

Darauf bin ich natürlich nicht gekommen.... ^^

http://www7.pic-upload.de/17.08.11/vzp8yezu1e22.jpg
Bitte warten ..
Mitglied: thaenhusen
17.08.2011 um 17:02 Uhr
Moin.

Darauf bin ich natürlich nicht gekommen.... ^^

Dann musst Du jetzt mal gucken, warum er da zickt. Sind Datenfelder zu klein für den Inhalt?
Passen die Datentypen nicht zu einander? Bei Dir ist alles String bzw. varchar...

Soll das so?

Ohne die Datenbankdefinition kann man jetzt nur orakeln...

HTH
MK
Bitte warten ..
Mitglied: beta-way-of-life
18.08.2011 um 07:58 Uhr
Hi,

ja, das soll so sein.
Sagenhafterweiße hab ichs jetzt durch abschauen in phpmyadmin geschafft das es bei einem Feld funktioniert....

Jetzt hab ich nur das Problem das das bei über 20 Feldern etwas unübersichtlich wird.
Wie kann ich die ganze Schneiße jetzt in einzelne Zeilen aufteilen?

Danke.

lg
Bitte warten ..
Mitglied: thaenhusen
18.08.2011 um 09:08 Uhr
Moin.

Wenn Du so nicht weiter kommst wirst Du wohl Feld für Feld durch testen müssen...

Ansonsten mach einen Dump der Tabelle mit dem Datensatz der ID 1 und poste das,
dann kann man Dir vielleicht helfen...

HTH
MK
Bitte warten ..
Mitglied: beta-way-of-life
18.08.2011 um 09:17 Uhr
Zitat von @thaenhusen:
Moin.

Wenn Du so nicht weiter kommst wirst Du wohl Feld für Feld durch testen müssen...

Ansonsten mach einen Dump der Tabelle mit dem Datensatz der ID 1 und poste das,
dann kann man Dir vielleicht helfen...

HTH
MK

Hier der Auszug:

http://www7.pic-upload.de/18.08.11/aobo6dci6gw.jpg

Wobei du hast mich glaube falsch verstanden.
Mit dem oben genannten Code würde es ja für alle Felder funktionieren.

SET `hersteller` = '".$_POST["hersteller"]."', <--- funktioniert

Nur hab ich das Problem das ich nicht weiß wie ich es jetzt in mehrere Zeilen aufteilen kann.
Wenn ich das wie oben beschrieben für alle Felder mache hab ich eine 10 Meter lange Zeile auf dem Bildschirm. ;)

Ich würds einfach nur gern auf mehrere Zeilen aufteilen. :) face-smile

lg
Bitte warten ..
Mitglied: thaenhusen
18.08.2011 um 09:56 Uhr
Moin.

Ich würds einfach nur gern auf mehrere Zeilen aufteilen. face-smile

Und das bringt dann genau was?

Du brauchst das doch nur einmal ordentlich fertig machen und gut ist.

Aber wenn Du unbedingt Deinen Code versauen möchtest vieleicht so?

Wie gesagt, das macht aber eigentlich null Sinn....

HTH
MK
Bitte warten ..
Mitglied: beta-way-of-life
18.08.2011 um 11:11 Uhr
Achso,

ich wusste nicht das dadurch der code "schlechter" wird.
Dann mach ich das ganze so fertig.

Ist somit gelöst.


Danke euch allen.

lg
Bitte warten ..
Mitglied: Arano
18.08.2011 um 17:59 Uhr
Nein, dem ist auch nicht so !

Allerdings ist er, wenn du alles in EINE Zeile klatscht, unlesbar !
Also gibt es ja auch mehrere Möglichkeiten das in mehrere Zeilen zu gliedern.

Oder eben so wie du es vom Anfang an gemacht hast, mit den einzelnen Zuweisungen bzw. der verketteten Zuweisung ( .= )


~Arano
Bitte warten ..
Heiß diskutierte Inhalte
Microsoft
Mitteilung an alle bei Störungen in der IT
gelöst David.B2D45Vor 1 TagFrageMicrosoft31 Kommentare

Hallo Forum, ich bin auf der Suche nach einem Programm / Tool mit dem ich Text (Laufschrift) auf allen (gewünschten) PC's / Benutzer im ...

Exchange Server
Exchange Zero Day Hack - Wie entfernen?
gelöst mtaiitVor 15 StundenFrageExchange Server27 Kommentare

Hallo, bei mir hat es einige Kundenserver getroffen Weiß einer wie ich diese WebShells wieder loswerde? Das löschen der betroffenen .aspx Dateien wird wohl ...

E-Mail
Kann man mit SPF Mails für eine Domäne vollständig verbieten?
gelöst StefanKittelVor 1 TagFrageE-Mail17 Kommentare

Hallo, viele Firmen haben ja zusätzliche Domänen. Als Web- und oder Mail-weiterleitung. Es werden also niemals Emails damit gesendet werden. kann man mit einem ...

Server-Hardware
Firmware-Updates auf Servern
redhorseVor 1 TagFrageServer-Hardware8 Kommentare

Guten Morgen, die Server-Hersteller stellen bekanntlich regelmäßig Firmware- und Treiberupdates für deren Serverhardware bereit, diese können z.B. bei Dell als Dell EMC Server Update ...

Linux
Windows auf Dualbootrechner entfernen und Linux die komplette Platte zur Verfügung stellen
N8chtfalterVor 1 TagFrageLinux6 Kommentare

Hallo Linux Profis, ich habe einen Laptop auf dem ursprünglichen Windows 10 installiert war, und ist, ich habe vor einem Jahr Ubuntu testhalber als ...

Windows Server
Domänenadmin kann kein Zertifikat anfordern
noodellsVor 1 TagFrageWindows Server6 Kommentare

Hallo Zusammen, ich habe ein Problem beim Finden einer Einstellung. Zuerst einmal der Stand: Es gibt eine Windows CA und Domaincontroller und alles funktionierte ...

Router & Routing
Routing öffentliche IP-Adresse-Traffic per BGP im internal-Network
gelöst jescheroVor 1 TagFrageRouter & Routing2 Kommentare

Guten Abend alle zusammen, ich habe ein kleines Problem beim Routing in pfSense. Mein aktuelles Aufbau ist folgenden: Ich habe eine pfSense-VM und zwei ...

Exchange Server
Windows Server 2019 + Exchange Server 2019 (Probleme mit Pop3)
gelöst aristonVor 1 TagFrageExchange Server4 Kommentare

Hallo zusammen, ich habe gerade angefangen, mit dem Exchange Server 2019 in der Demoversion zu arbeiten und folge Schritt für Schritt bei der notwendigen ...