• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Unerklärlich Probleme bei Textübergabe...

Alen van Dale

Neues Mitglied
Hi Leute!

Ich stehe da vor einem sehr rätselhaften Phänomen:

Übergebe eine Textarea-Variable per POST an die selbe Datei, die dann
im PHP-Teil den Inhalt in eine SQL-Datenbank schreibt.
Eigentlich Kinderkram und funktioniert seit Wochen fehlerfrei!

Gelegentlich hab ich aber Texte die Probleme machen. Scheinbar
scheitert die Übergabe beim Wiederaufruf der Datei. Im PHP-Teil sind dann
alle Variabeln leer.
Mein erster Verdacht viel auf Steuerzeichen im Text.
Hab also ALLE Sonderzeichen (inkl. "." und ",") durch "_" ersetzt - ohne Unterschied.

Ein anderes mal weigerte sich HTML einen Link in der Textvariable zu übergeben.
Als ich den Link durch die RETURN-Taste im Eingabefeld umbrach ging es plötzlich.

Inzwischen vermute ich die Wurzel des Übels bei meinem Hoster (funpic).

Kennt jemand das Problem? Ist es möglich, das Variablen vom Hoster "gegen meinen Willen zensiert" werden? Bin echt planlos, wo ich noch suchen soll.

LG und Danke!

Alen
 
unwahrscheinlich. wenn ein zensurprogramm drüberrennt, kann es nur ausgaben, die man auch tatsächlich sieht (browser-ausgabe) schleiern. ich wette eher, dass du irgendeinen tipfehler gemacht hast.
zeig' doch mal den code her, wenn er nicht gerade zehn seiten lang ist.

Nils aka XraYSoLo
 
Hallo XraYSoLo!

Glaube ja auch eher an einen Fehler im Code als an eine Überwachung.
...trotz 9/11 ;-)
Hier also der entscheidende Teil des Scripts...
Es handelt sich dabei um ein Modul (./edit.html), daß durch den
PHP-Befehl INCLUDE in ein anderes Script (./index.html) eingebunden wird.
Sich dann selber aufruft und nach dem abarbeiten des PHP-Teils wieder
zurück auf die Index-Datei springt.

PHP:
<?php
if ($_POST[save]=="Abspeichern") 
   {
   // **************** Login auf SQL-Server *****************
    $MYSQL_HOST = "xxxxx"; 
    $MYSQL_USER = "xxxxx";
    $MYSQL_PW   = "xxxxx";
    $MYSQL_DB   = "xxxxx";

    $conn = mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PW);
    mysql_select_db($MYSQL_DB, $conn);

    $sql =  "'".$_POST[freitext]."', '";
    $sql = $sql.$_POST[headline]."', '";
    $sql = $sql.$_COOKIE[usr]."', '";
    $sql = $sql.date("Y-m-d H:i:s",time())."'";

    mysql_query("INSERT INTO Texte (Inhalt, Headline, Urheber, Time) VALUES (".$sql.")");

    header("Location: ./index.html?action=home");
   }
?>

<form enctype="multipart/form-data" action="./edit.html" METHOD=POST> 
<BR>
<table border="0" cellspacing="0" cellpadding="0" width="865" align="center">
  <tr>
    <td  width="865" align="center">
    Überschrift
    </td>
  </tr>
  <tr>
  <td align="center">
  <BR>
  <INPUT name="headline" type="text" size="100" maxlength="80" style="text-align:center" 
   value="Titel">
  <BR>
  <BR>
  </td>
  </tr>
</table> 
<BR>
<table border="0" cellspacing="0" cellpadding="0" width="865" align="center">
  <tr>
    <td  width="865" align="center">
    Text
    </td>
  </tr>
  <tr>
  <td align="center">
  <BR>
  <TEXTAREA name="freitext" cols="105" rows="34" wrap="physical" border="0"
   style="text-align:center;color:ffffff;background:#000000;border-style:solid;
    border-width:0px;">...Text...</TEXTAREA>
  <BR>
  <BR>
  </td>
  </tr>
</table> 
<BR>
<table border="0" cellspacing="0" cellpadding="5" width="865" align="center">
<tr>
<td align="center" bgcolor="#660000">
<INPUT TYPE="submit" value="Abspeichern" name="save">
</td>
</tr>
</table>
</form>
 
Zuletzt bearbeitet:
ich glaube, dass die session wechselt. übergib im form-link mal die phpsessid.
 
@sysop:

Hab mal <?=SID?> in den Aufruf reingesetzt - meintest Du das so?

Code:
<form enctype="multipart/form-data" action="./edit.html?<?=SID?>" METHOD=POST>
Ergab aber leider keine Veränderung! :-(
 
werden denn bei dir html seiten auch durch den php parser geschickt oder wird da mit mod rewrite gearbeitet ?
die endung der datei sollte .php sein, damit php die variablen auch wiederfinden kann.

ps.
in jedem php-script sollte ganz oben auch ein session_start(); vorhanden sein, da der webserver sonst u.U. eine neue sitzung startet, die von deinen variablen nichts weiss.
 
Also: "session_start();" befindet sich in der 1. Zeile der Datei index.html.
In die Datei wird "edit.html" eingebunden und dann alles geparst.
( So weit ich da durchblicke wird bei denen alles durch den Parser geschickt
egal ob html, php oder includierte .xyz-Datei.
Mit "mod rewrite" hab ich nix am Hut! :mrgreen: )

Beim Wiederaufruf fehlt session_start() natürlich ... hmmm? Mir dämmert da
was ... Aber wie umgehe ich diesen Faupax am besten?
 
Du schreibst als ersten Befehl in diese Bedingung

PHP:
if ($_POST[save]=="Abspeichern") 
   {

wieder session_start();. Das ist zwar von der Logik sehr hässlich, wäre aber das Einfachste. -- Falls es überhaupt daran liegt.

Ich glaube, du versuchst in der Query vier Werte in fünf Felder zu schreiben. Lass dir im Zweifel mal die fertige Query ausgeben, bevor du sie an mysql_query übergibst.

Außerdem ist der Code anfällig für SQL-Injections (alle Werte vom Nutzer, die in die Query geschrieben werden, sollten per mysql_real_escape_string escapet werden), $_COOKIE[usr] kann vom Besucher auf einen beliebigen Wert gesetzt werden, ist also manipulierbar, und Feldnamen sollten in Anführungszeichen stehen: $_COOKIE['usr'].

Ich würde es so umschreiben, dass vom Formular index.html aufgerufen wird, nicht edit.html.
 
Also, das mit dem Session_Start() nach der IF-Abfrage funktioniert nicht,
weil die POST-Variable ja im Falle des Falles leer ist - Die Bedingung also niemals TRUE wird.

Der Flüchtigkeitsfehler in der Query ist erst beim Codezerlegen bei der Fehlersuchen entstanden - aber Danke für den Hinweis! Vor allem Danke für die Sicherheits-Tipps!

Vielleicht sollte ich das Skript komplett umschreiben. Schade das der Grund
für diese Phänomen nicht geklährt werden kann - Das würde mich schon tierisch intressieren!
 
Zuletzt bearbeitet:
Zurück
Oben