Textarea wird nicht per post übergeben
Bernstar
- html
Hallo,
Ich bin auf einen neuen Webspace übersiedelt (gekauften) und habe plötzlich das Problem, dass mein Gästebuch (Joomla CMS, phocaguestbook) den Content nicht mehr übergibt. Content ist ein textarea-Feld. Übergabe wird per post gemacht. Auf allen anderen Webspaces hat es funktioniert (free), aber nur auf dem gekauften geht es plötzlich nicht mehr. Leider wude bereits für 6 Monate im voraus bezahlt, weshalb das ein großes Problem ist.
Weiß jemand rat?
Hier die Seite zum testen: http://www.hera-salinas.com/Testsystem/
Und hier die phpinfo vom Server: http://ngcobalt01.manitu.net/phpinfo.php
Ich nehme an, dass irgendeine Funktion deaktiviert ist und es daher nicht funzt. Leider komme ich nicht dahinter, welche. Möglicherweise ein übertriebenes Sicherheitsfeature.
Wenn mir irgendjemand einen Tipp geben könnte, wäre ich sehr dankbar. Häng da jetzt schon seit einer Woche dran und bin gleich weit wie am Anfang. Ich weiß nur, dass das Textarea nicht per post übergeben wird (JavaScript-Ausgabe beim absenden funktioniert, also ist der Content definitiv vorhanden).
Vielen Dank im voraus!
Hello,
Ich würde das so aus dem bauch heraus erst einmal auf diese beiden Einstellungen zurückführen
register_globals Off Off
register_long_arrays Off Off
Schau doch bitte mal in den Quellcode des verabeitenden Scriptes, ob dort noch
$HTTP_POST_VARS['textfeldname']
benutzt wird.
Ein harzliches Glückauf
Tom vom Berg
Sup!
Joomla benutzt sowas? Ist das nicht total gefährlich und so?
Gruesse,
Bio
Hello,
Joomla benutzt sowas? Ist das nicht total gefährlich und so?
Ja, ungefähr genauso gefährlich, wie ovale Festplatten mit Sekt;-)
Ein harzliches Glückauf
Tom vom Berg
Hello,
Schau doch bitte mal in den Quellcode des verabeitenden Scriptes, ob dort noch
$HTTP_POST_VARS['textfeldname']
libraries\phpmailer\phpmailer.php(1424): global $HTTP_SERVER_VARS;
libraries\phpmailer\phpmailer.php(1425): global $HTTP_ENV_VARS;
libraries\phpmailer\phpmailer.php(1429): $_SERVER = $HTTP_SERVER_VARS;
libraries\phpmailer\phpmailer.php(1431): $_SERVER = $HTTP_ENV_VARS; // must be Apache
libraries\domit\php_http_server_generic.php(151): global $HTTP_SERVER_VARS;
libraries\domit\php_http_server_generic.php(152): $requestMethod = strToUpper($HTTP_SERVER_VARS['REQUEST_METHOD']);
Ich habe Dir schon mal die Stellen herausgesucht, an denen noch damit gearbeitet wird.
Das hat aber so von außen betrachtet noch nichts zu sagen.
Da muss man nachgucken.
Das ist aber als Administrator eines CMS Deine Sache ;-)
Ein harzliches Glückauf
Tom vom Berg
Hm... leider scheint es nicht an den 2 Funktionen zu liegen. Bei meinem lokalen PC konnte ich die Daten trotz deaktivierung absenden.
Noch ein anderer Vorschlag? Es muss ziemlich sicher an einer deaktivierten Funktion liegen. Per GET bekomme ich den Content schon in der URL, aber per POST nicht.
Hello,
Hm... leider scheint es nicht an den 2 Funktionen zu liegen. Bei meinem lokalen PC konnte ich die Daten trotz deaktivierung absenden.
Noch ein anderer Vorschlag?
Ja, die Unterschiede zwischen PHP5 und PHP4 in der OOP und einigen wenigen imperativen Funktionen.
Bitte lasse uns daher _endlich_ Informationen über Provider, OS, verwendete PHP-Version, Methodik des Aufrufes (CGI, Fast-CGI, Modul), usw. zukommen.
Außerdem wäre sowieso ein Auszug aus dem zuständigen Script hilfreich.
Also, packen wir's an...
Ein harzliches Glückauf
Tom vom Berg
Ok, hier die ganzen Infos vom Provider: http://ngcobalt01.manitu.net/phpinfo.php
Kurzfassung:
PHP Version 5.2.6
OS: Linux
Methode: Form-Post von Textarea (andere forms werden auch problemlos übergeben)
Weitere Infos: MySQL 3, CGI aktiviert
Scriptauszug der FORM:
------------------------------------------------------------------
<form action="<?php echo $this->action; ?>" method="post" name="saveForm" id="saveForm" onsubmit="return submitbutton();">
<table border="0" width="500">
<tr>
<td> </td>
<td colspan="4">
<?php
// Server side checking
if ($this->title_msg_1 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook No Title' ).'</small><br />';
}
if ($this->title_msg_2 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook Bad Title' ).'</small><br />';
}
if ($this->username_msg_1 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook No Username' ).'</small><br />';
}
if ($this->username_msg_2 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook Bad Username' ).'</small><br />';
}
if ($this->username_msg_3 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook Username Exists' ).'</small><br />';
}
if ($this->email_msg_1 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook No Email' ).'</small><br />';
}
if ($this->email_msg_2 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook Bad Email' ).'</small><br />';
}
if ($this->email_msg_3 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook Email Exists' ).'</small><br />';
}
if ($this->content_msg_1 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook No Content' ).'</small><br />';
}
if ($this->content_msg_2 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook Bad Content' ).'</small><br />';
}
if ($this->ip_msg_1 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook IP Ban' ).'</small><br />';
}
if ($this->reguser_msg_1 == 1)
{
echo '<small style="color:#fc0000;">'.JText::_( 'Phoca Guestbook Reg User Only' ).'</small><br />';
}
//-- Server side checking
?>
</td>
</tr>
...
<tr>
<td valign="top"><b><?php echo JText::_('Content'); ?>: </b></td>
<td colspan="4"><?php echo $this->editor; ?>
<?php
// !!! Info ausgeben, dass der Text erst freigegeben werden muss (in Kursiv)
echo JText::_('Infotext'); ?>
</td>
</tr>
...
------------------------------------------------------------------
Scriptauszug textarea (editor):
------------------------------------------------------------------
$editor = "<textarea id="$name" name="$name" cols="$col" rows="$row" style="width:{$width}; height:{$height};" class="mceEditor">$content</textarea>\n" . $buttons;
return $editor;
------------------------------------------------------------------
Download des gesamten Scripts:
http://www.phoca.cz/phocaguestbook/index.php?site=download
Die Ausgabe der JavaScipt-Kontrolle gibt den richtigen Content aus. Aber in PHP wird nichts wiedergegeben. Auf allen anderen Servern funktioniert es (Freehoster und Local). Problem ist dem Entwickler noch nicht bekannt, aber er versucht mich zu unterstützen.
Es muss etwas mit dem Provider sein, nur was? :-(
Hello,
Weitere Infos: MySQL 3
Wirklich noch MySQL 3 ?
Aber das dürfte ja mit dem momentanen Problem nichts zu tun haben und ist daher nur ein untergeordneter Erstaunensaufschrei.
[...]
Naja.
Beim ganzen Scriptauszug fehlen mir eigentlich aussagefähige Kommentare, insbesondere, was die Verwendung der Klasse 'JText::' betrifft.
Bisher kann ich nicht nachvollziehen, was darin vorgeht.
Du solltest bitte beid er Fehlersuche auch den Thread verfolgen, der maßgeblich ist und nicht alles im Umfeld als wichtig eachten ;-)
"Isolierung des Problems" nennt man sowas auch und dazu ist leider auch manchmal ein heftiger chrirurgischer Eingriff in die vorhandene, vermeintlich funktionstüchtige Struktur notwendig.
Am meisten helfen Kontrollausgaben an einen ungestörten Ausgabekanal, d.h. wenn die Standardausgabe des Clients wegen mitgelieferter JavaScripts (oder ähnlicher Störgrößen) nicht wirklich aussagefähig sein kann, auch schon mal eine separate Logdatei!!! (drei Ausrufezeichen sind hier, trotz besseren Wissens, angebracht).
Ein harzliches Glückauf
Tom vom Berg
Hi,
Ja, war auch wegen MySQL3 überrascht. Aber das geht ja recht einfach, indem ich die DB einfach mit MYSQL3-Kompatibilität exportiere. Hier gibt es auch keine Probleme. Hatte meine Page schon auf mehreren Webspaces und darunter auch ein anderer Server mit MySQL3. Hier hat das Gästebuch und alles andere auch funktioniert. Also liegt es garantiert nicht an MySQL.
Ich habe bisher 2 Ausgaben gemacht.
Eine bei der JS-Kontrolle --> nach dem versenden wird der Content-Text in einem alert() richtig dargestellt. Also Clientseitig alles ok.
Eine bei der php-Kontrolle --> hier gibt es nur die Info, dass der Content-Text leer ist. Also Serverseitig wurde der Content nicht übernommen.
Ich versteh einfach nicht, warum hier nichts übernommen wird. Es würde ja sonst alles funktionieren, aber dieses textarea-feld wird einfach nicht per php-post geschickt. Werd mal probieren, ein textarea-feld mit fertigem Text abzusenden. Sollte das auch nicht gehen, gibt es ein generelles Problem mit textareas und post, was nur auf eine deaktivierte Funktion zurück zu führen ist. (nur leider hab ich keine Ahnung, welche Funktion das macht)
Wenn mein Test mit dem voreingestellten Textarea-Feld ein Ergebnis liefert, dann gebe ich es gleich bekannt. Jetzt spring ich mal ins Bett, mir fallen gleich die Augen zu. :-)
Hallo.
"Isolierung des Problems" nennt man sowas auch und dazu ist leider auch manchmal ein heftiger chrirurgischer Eingriff in die vorhandene, vermeintlich funktionstüchtige Struktur notwendig.
Und wehe dem, der das unaufgefordert tut. Dann wird über die lückenhaften Informationen gemeckert.
MfG, at
Sup!
Vielleicht hilft ja "always_populate_raw_post_data" einzuschalten. Wäre so mein erster Rateversuch. Obwohl ich ja keine Ahnung habe. Ich benutze Drupal ;-)
Gruesse,
Bio
Hi,
Vielleicht hilft ja "always_populate_raw_post_data" einzuschalten.
Wenn tatsaechlich noch die $HTTP_*_VARS verwendet werden, dann waere die erforderliche Option register_long_arrays. (always_populate_raw_post_data liefert die POST-Daten so, wie sie wirklich empfangen wurden - "roh", ohne jede Aufbereitung, d.h. Parameternamen und Values muesste man selbst herausfischen, Dekodierung selber uebernehmen.)
Wäre so mein erster Rateversuch.
Knapp daneben ist auch vorbei ;-)
Obwohl ich ja keine Ahnung habe.
Na ja, dafuer gar nicht so schlecht.
MfG ChrisB
Hi,
Danke für den Tipp. Habe es lokal getestet, aber lokal funktioniert das Gästebuch trotz deaktiviertem register_long_arrays. Scheint also, dass der Fehler wo anders liegt. :-(
Hi!
Tolle Raterunde hier. :)
Ich kann nicht glauben, dass heutzutage ein Provider soetwas abstellt. Was sagt denn der Support dazu?
Hast Du das ganze denn schonmal im kleinen Rahmen getestet? Formular an Php-skript senden?
Hi,
Ja, finde ich auch total schlimm. Hab mich auch schon die ganze Woche darüber geärgert. Hätte ich im vornherein gewusst, dass es nicht gehen wird, dann hätte ich nen anderen Webspace gekauft. Tja... Pech gehabt. :-(
Der Support ist selbst ratlos und meinte nur, sie hätten so ein Problem bisher noch nie gehabt. Tests habe ich schon einige durchgeführt. Lokal und bei Freehostern geht es, am gekauften Webspace geht die Textarea-übergabe nicht. (exakt die selben Dateien!!!) Ich bin total ratlos... (und natürlich auch über den Provider verärgert)
Hello,
Ja, finde ich auch total schlimm. Hab mich auch schon die ganze Woche darüber geärgert. Hätte ich im vornherein gewusst, dass es nicht gehen wird, dann hätte ich nen anderen Webspace gekauft.
Bevor man schießt, sollte man sich davon überzeugt haben, dass man auch treffen kann.
Lass uns erst einmal danach suchen, woran es liegen könnte, bevor Du Verurteilungen aussprichst.
Das ist jetzt nur ein Wert aus der eigenen Erfahrung, aber der könnte auch bei Dir zutreffen.
Es ist natürlich eine Menge JavaScript bei Dir im Einsatz.
Funktioniert Dein Formular auch noch ohne JavaScript in einer erprobten Server-Client-Verbindung?
Ein harzliches Glückauf
Tom vom Berg
Hi,
Ja sorry, hast vollkommen recht. Ich sollte nicht zu voreilig schießen. Tut mir echt Leid. Bin aber verärgert, dass exakt die selben Dateien, die ich per FTP hochgeladen habe, auf meinem lokalen und auf einem anderen Freehoster funktionieren und beim gekauften Webspace nicht. Hab auch extra noch einmal die gesamten Dateien vom Webspace wieder runter geladen (ja, hoch laden und wieder runter laden klingt dämlich, aber ich war verzweifelt), um die selben Dateien vom Server noch einmal zu testen. Geht einfach nicht beim Provider, bei mir schon. 2. Installation geht auch nicht.
Hab jetzt auch JavaScript mal deaktiviert (Client-Seitig) und es geht auch ohne JS. Kann man das am Server auch deaktivieren? Dachte, das ist nur eine clientseitige Sprache und hat mit dem Server nichts zu tun. Wenn ich da jetzt falsch liege, wie kann ich es Serverseitig unterbinden, dann teste ich es mal auf meinem lokalen System.
Hello,
Hab jetzt auch JavaScript mal deaktiviert (Client-Seitig) und es geht auch ohne JS. Kann man das am Server auch deaktivieren? Dachte, das ist nur eine clientseitige Sprache und hat mit dem Server nichts zu tun. Wenn ich da jetzt falsch liege, wie kann ich es Serverseitig unterbinden, dann teste ich es mal auf meinem lokalen System.
Das ist selbstverständlich nur clientseitig gemeint gewesen. Es gibt zwar auch JavaScript für Server, aber das habe ich persönlich noch nie irgendwo installiert gesehen.
Die JavaScripts könnten aber dafür sorgen, dass Deine Textarea aus den Postparametern gelöscht worden wäre. Welche Parameter werden denn anstandslos übertagen beim Post? Hast Du da mal Kontrollausgaben eingebaut?
Wenn Du die Verzeichisse und Dateien per FTP auf den Server übertragen hast, dann gehören die anschließend i.d.R. dem FTP-User. Dieser ist, je nach Installation, aber nicht identisch mit dem PHP-User. Da Du PHP in der Modulversion benutzt, wird das bei Dir auch so sein. Da ist der PHP-User derjenige, mit dem der Apache die Child-Prozesse startet und der Gruppenname ebenfalls derjenige, der in der httpd.conf eingetragen ist.
Stelle also die Owner-Eigenschaften der Files z.B. in der SSH-Konsole auf den User des Apachen um
Dokument Root des Webprojketes aufsuchen und:
chown httpd * -R
eingeben, und es sollte funktionieren
Der Eintrag:
User/Group httpd(15)/11
in der php-Informnationsseite deutet darauf hin, dass Dein Host noch gar nicht fertig eingerichet ist. Die Gruppe 11 hat überhaupt keinen Namen, also existiert sie vermutlich bei Dir überhautpt noch nicht, der User 15 heißt bei Dir httpd, was darauf schließen lässt, dass die Apache-Childs unter dem User des Daemon-Hauptprozesses laufen könnten, was dann viel zu viele Rechte bedeuten würde.
Stell das also erstmal richtig:
1. Schritt vi /etc/passwd und nach den eingerichteten Usern gucken
2. Schritt groupadd -g 11 webuser
usw.
In der /etc/httpd.conf nach "User" und "Group" suchen und sinnvolle Werte einstellen.
usw.
Ein harzliches Glückauf
Tom vom Berg
Hi,
Erstmal danke für deine ausführliche Antwort. Zweitens muss ich aber leider gestehen, dass ich da kaum ein Wort verstanden habe.
Also ich persönlich habe keinen Putty-Zugang zum Server selbst, aber ich kann es dem Support weiterleiten. Komisch nur, dass alles andere problemlos funktioniert, daher bin ich mir nicht sicher, ob der Provider da wirklich in den Apache eingreifen wird (er hat ja auch noch andere User).
Kannst du mir das noch einmal für einen Dummy erklären, woran es jetzt liegt? Sind falsche Rechte für meinen Webspace vom Provider eingestellt?
Habe jetzt beim Provider angefragt und der meinte, dass
chown httpd * -R
und das setzen der Files per FTP auf 777 das gleiche ist.
Das habe ich bereits gemacht. Zur Sicherheit heute noch einmal, aber es hat sich nichts geändert. Also liegt das Problem nicht an den Rechten (außer die 2 oben genannten Rechtevergaben sind verschieden).
Schade, hatte schon Hoffnung, dass der Fehler endlich gefunden ist. :-(
Schade, hatte schon Hoffnung, dass der Fehler endlich gefunden ist. :-(
Der Fehler liegt mit Sicherheit an dem tinymce Feld, bau doch einfach mal eine normale Textarea ein
Struppi.
Jep, hast recht. Hab soeben folgendes Testscript laufen lassen:
------------------------------------------------------------
<?php
// Abfrage
if($_GET['text_input'])
{
echo $_GET['text_input'];
}
if($_GET['textarea'])
{
echo $_GET['textarea'];
}
?>
<form action="Textarea_get.php" method="get" name="saveForm" id="saveForm"">
<input type="text" name="text_input" value="textinput" />
<textarea name="textarea">textarea</textarea>
<input type="submit" name="save" value="Send" />
</form>
------------------------------------------------------------
Habs mit get, post und request ausprobiert. Geht alles. Also muss es am tinymce liegen. Komisch nur, dass der TinyMCE-Editor richtig angezeigt wird und im Backend bei normalen Beiträgen funktioniert.
Hast du irgendeine Idee, was am TinyMCE fehlerhaft sein könnte?
In den Quellcode vom TinyMCE-Editor greife ich nur ungern ein, aber wenn es notwendig sein sollte...
Habs mit get, post und request ausprobiert. Geht alles. Also muss es am tinymce liegen. Komisch nur, dass der TinyMCE-Editor richtig angezeigt wird und im Backend bei normalen Beiträgen funktioniert.
Hast du irgendeine Idee, was am TinyMCE fehlerhaft sein könnte?
In den Quellcode vom TinyMCE-Editor greife ich nur ungern ein, aber wenn es notwendig sein sollte...
Leider nein, ich benutzte einen anderen Editor.
Struppi.
Habs mit get, post und request ausprobiert. Geht alles. Also muss es am tinymce liegen. Komisch nur, dass der TinyMCE-Editor richtig angezeigt wird und im Backend bei normalen Beiträgen funktioniert.
Hast du irgendeine Idee, was am TinyMCE fehlerhaft sein könnte?
In den Quellcode vom TinyMCE-Editor greife ich nur ungern ein, aber wenn es notwendig sein sollte...Leider nein, ich benutzte einen anderen Editor.
Struppi.
So, hab jetzt probiert statt der Editor-Klasse nur ein normales Textarea zu übergeben. Resultat: Eigenartigerweise geht hier die Übergabe nicht. Also scheint es wohl auch nicht am tinymce zu liegen, sondern in der internen Übergabe. Hm...
Resultat bis jetzt:
Textareas alleine getestet und funktionieren --> Textarea ok
Tinymce funktioniert im Backend und auch das umwandeln des felds in ein einfaches Textarea übergibt nichts --> Tinymce ok
$editor = "<textarea id="$name" name="$name" cols="$col" rows="$row" style="width:{$width}; height:{$height};" class="mceEditor">$content</textarea>\n" . $buttons;
--> $content wird nicht übergeben, vielleicht sollte ich dieser Variable mal nachgehen. Hm...
Hi,
- $editor = "<textarea id="$name" name="$name" cols="$col" rows="$row" style="width:{$width}; height:{$height};" class="mceEditor">$content</textarea>\n" . $buttons;
Ist das das Formularfeld, das abgeschickt wird?
--> $content wird nicht übergeben, vielleicht sollte ich dieser Variable mal nachgehen. Hm...
Und $name enthaelt was?
MfG ChrisB
Hi,
- $editor = "<textarea id="$name" name="$name" cols="$col" rows="$row" style="width:{$width}; height:{$height};" class="mceEditor">$content</textarea>\n" . $buttons;
Ist das das Formularfeld, das abgeschickt wird?
Jep. Das ist das Content-Formular-Feld. Hab hier auch mal den HTML-Code von der fertigen Page:
<textarea id="content" name="content" cols="100" rows="100" style="width:400px; height:200px;" class="mceEditor"></textarea>
--> $content wird nicht übergeben, vielleicht sollte ich dieser Variable mal nachgehen. Hm...
Und $name enthaelt was?
$name hat die ID des Feldes "content" mit dem es angesprochen wird.
$content sollte den zu übergebenden Text enthalten.
Hello,
Habe jetzt beim Provider angefragt und der meinte, dass
chown httpd * -R
und das setzen der Files per FTP auf 777 das gleiche ist.
Den würde ich ganz schnell wieder wechseln.
Das sind zwei ganz unterschiedliche Dinge.
Mit "chown httpd <filename>" wird der Owner des Files auf den User "httpd" festgelegt, was Du aber dann vermutlich gar nicht selber tun darfst und mit "chmod 777 <filename>" werden die Rechte für Owner, Group und Jedermann auf "Vollzugriff" getellt. Es kann also jederman, der auf den Host kommt, mit den Files (fast) alles machen.
760 wäre eine akzeptable Einstellung für alle Files, mit denen PHP (als User httpd) machen darf, was es will/soll.
Es ist doch nicht das Gleiche, ob ich ganz bestimmten Leuten für meine Haustür Schlüssel gebe, oder ob ich draußen dranschreibe, wo der Reserveschlüssel für jeden erreichbar versteckt ist
Ein harzliches Glückauf
Tom vom Berg
Ich bin auf einen neuen Webspace übersiedelt (gekauften) und habe plötzlich das Problem, dass mein Gästebuch (Joomla CMS, phocaguestbook) den Content nicht mehr übergibt. Content ist ein textarea-Feld.
Nein, es ist ein tinymce Feld, werden denn die anderen Felder übergeben?
Dann ist dein tinymce falsch konfiguriert.
Struppi.
Hi,
Ja, alle anderen Felder werden richtig übergeben.
Das mit dem tinymce-Feld stimmt, aber ich dachte, da würde trotzdem nur ein Text in einem Textarea übergeben. Wie könnte ich den falsch konfiguriert haben? Auf anderen Webspaces funktioniert es ja und im Backend funktioniert der tinymce-Editor auch um Beiträge zu editieren.
Vielleict einen Tipp, wie ich tinymce kontrollieren könnte?