MyBB.de Forum

Normale Version: Formular in Beitrag - Fehler
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi

ich habe ein PHP-Script geschrieben, welches die Inhalte eines Formulars direkt in ein internes Forum postet. Funktioniert auch fast ohne Probleme. Aber eben nur fast.


Fehler 1:
Wenn ich das Formular über die HTML-Datei aufruf, wird ein Thread erstellt. Trage ich meine Daten aber über die .php-Datei ein, werden zwei Thread erstellt. Einer wird richtig dargestellt, im anderen sind die Variablen einfach weggelassen und es wird nur das Grundgerüst des Beitrags aus der PHP-Datei gepostet.

Fehler 2:
Wenn im Gerüst, wie in der unten gezeigten PHP-Datei, ein Umlaut (ä, ö, ü) vorkommt, wird das dahinter einfach weggelassen und nicht gepostet. Ich weiß nicht, woran das liegt. Ich habe im HTML-Formular die Codierung auch schon auf UTF-8 gestellt, klappt aber immer noch nicht.

Fehler 3:
Unter dem Formular wird eine "1" angezeigt, von der ich nicht weiß, woher sie kommt Smile
Dies tritt auch nur auf, wenn ich das Formular über die PHP Datei aufruf. Auf der .html ist keine 1 zu sehen.



Hier meine bewerbung.php-Datei
PHP-Code:
<?php
// Formular anzeigen
echo include_once('formular.html');

define("KILL_GLOBALS"1);
define("IN_MYBB"1);
define("NO_ONLINE"1); // Seite erscheint nicht auf Wer ist online

require("../global.php");
require_once 
MYBB_ROOT."inc/datahandlers/post.php";

$posthandler = new PostDataHandler("insert");
$posthandler->action "thread";
$posthandler->admin_override true;


$uid 2;
$username 'James';
$fid 9// Forum in das der Thread gepostet werden soll
$message 'Folgende Bewerbung ging am '.date("d.m.Y").' um '.date("H:i").' Uhr bei uns ein:

[b]Nick:[/b]
'
.$_POST[nick].'
[b]Name:[/b]
'
.$_POST[name].'
[b]Teams:[/b]
'
.$_POST[teams].'
[b]Warum möchte der User ins Team?[/b]
'
.$_POST[bewerbungsgrund].'
[b]Was erwartet der User von uns?[/b]
'
.$_POST[erwartungen].'
[b]Hat der User schon Eventerfahrung sammeln können?[/b]
'
.$_POST[erfahrungen].'
[b]Ausarbeitung fuer das Dauerevent des Users:[/b]
'
.$_POST[ausarbeitung].'


[color=#FF0000][b]Bitte nutzt diesen Thread dazu, um über die Bewerbung zu diskutieren, sodass wir moeglichst schnell zu einem Ergebnis kommen.[/b][/color]

James'
;
$subject "Bewerbung von ".$_POST[nick];


$new_thread = array(
"fid" => $fid,
"subject" => $subject,
"uid" => $uid,
"username" => $username,
"message" => $message,
"ipaddress" => get_ip(),
"options" => array()
);

$posthandler->set_data($new_thread);
$validate $posthandler->validate_thread();
if (
$validate) {
    
$tinfo $posthandler->insert_thread();
    
$tid $tinfo[tid];
} else {
    
error("Während der Verarbeitung der Daten ist ein unbekannter Fehler aufgetreten.");
}


?>




Und hier meine formular.html-Datei
PHP-Code:
<form action="bewerbung.php?action=do_add" accept-charset="utf-8" method="post">
<
table style="text-align: left; width: 548px; height: 681px;"
 
border="0" cellpadding="2" cellspacing="2">
  <
tbody>
    <
tr>
      <
td>Nick</td>
      <
td><input maxlength="26" name="nick"></td>
    </
tr>
    <
tr>
      <
td>Name</td>
      <
td><input name="name"></td>
    </
tr>
    <
tr>
      <
td>Teams (getrennt durch Komma):</td>
      <
td><input name="teams"></td>
    </
tr>
    <
tr>
      <
td>Warum m&ouml;chte ich ins Team?</td>
      <
td><textarea cols="25" rows="10"
 
name="bewerbungsgrund"></textarea></td>
    </
tr>
    <
tr>
      <
td>Was erwarte ich vom Team?</td>
      <
td><textarea cols="25" rows="10"
 
name="erwartungen"></textarea></td>
    </
tr>
    <
tr>
      <
td>Hast
du schonmal Erfahrungen im Bereich 
<br>
Events gesammeltWenn jawo?</td>
      <
td><textarea cols="25" rows="4"
 
name="erfahrungen"></textarea></td>
    </
tr>
    <
tr>
      <
td></td>
      <
td></td>
    </
tr>
    <
tr>
      <
td>Zusatzaufgabe (Ausarbeitung einer Aufgabe f&uuml;r
das Dauerevent
):</td>
      <
td><textarea cols="25" rows="10"
 
name="ausarbeitung"></textarea></td>
    </
tr>
    <
tr>
      <
td></td>
      <
td></td>
    </
tr>
    <
tr>
      <
td style="text-align: right;"><input
 value
="Absenden" name="submit" type="submit"></td>
      <
td><input name="reset" value="Zur&uuml;cksetzen"
 
type="reset"></td>
    </
tr>
  </
tbody>
</
table>

</
form


Ich hoffe, ihr könnt mir helfen.

King Louis

Zu Fehler 1:
Dies liegt daran dass nach der Ausgabe des Formulars bereits der erste Thread angelegt wird, nur eben ohne Variablen. Das ganze kannst du umgehen indem du überprüfst ob die Variablen gesetzt wurden (isset ())

Fehler 2:
Da bin ich gerade auch überfordert, bei mir ist der Fehler bisher nicht aufgetreten. Evtl kannst du das ganze aber vorher durch die escape string funktion schicken. Meine aber der Posthandler macht das selbst.

Zu 3:
Ich hätte jetzt geraten dass entweder irgendwo eine 1 zu viel steht oder der Posthandler die erzeugt, beides scheint hier aber nicht der Fall zu sein. Insofern muss ich da leider passen.
Leider glaube ich, dass ich zu blöd bin, ein isset einzubauen. Liegt wohl daran, das ich blutiger Anfänger in sachen PHP bin und nicht weiß, wo genau das hinmuss.

Das escapen konnte ich durch Google lösen, beim isset hab ich nichtsmehr verstanden Big Grin
Kann mir da jemand helfen?

Und wenn ich hier gleich poste, frag ich noch gleich, ob jemand bereits eine Lösung für Problem 3 hat Wink
Keiner ein Hinweis oder Tipp?
Ich habe diesen Teil bearbeitet:
PHP-Code:
$posthandler->set_data($new_thread);
$validate $posthandler->validate_thread();
if (
$validate) {
    
$tinfo $posthandler->insert_thread();
    
$tid $tinfo[tid];
} else {
    
error("Während der Verarbeitung der Daten ist ein unbekannter Fehler aufgetreten.");


Daraus habe ich diesen gemacht:
PHP-Code:
if (isset($_POST))
{
    
$posthandler->set_data($new_thread);
    
$validate $posthandler->validate_thread();
    if (
$validate) {
        
$tinfo $posthandler->insert_thread();
        
$tid $tinfo[tid];
    } else {
        
error("Während der Verarbeitung der Daten ist ein unbekannter Fehler aufgetreten.");
    }


Funktioniert aber immer noch nicht, es wird weiterhin ein leerer Thread gepostet -.-

Sorry übrigens wegen dem Dreifachpost...ging nicht anders, kann Beitrag ja nicht mehr editieren Big Grin
isset($_POST) liefert wahrscheinlich immer true zurück, da es eine globale PHP-Variable ist.
Habe das nun folgendermaßen gelöst:
Ich habe erst überprüft, ob die action = do_add ist. Wenn das der Fall ist, überprüfe ich, ob die Variable $_POST['name'] gesetzt ist (isset). Ist dass der Fall, postet er den Thread, wenn nicht, zeigt er das Formular an. So funktioniert es Smile

Das funktioniert jetzt. Danke trotzdem für eure Geduld mit mir Smile