webentwicklung-frage-antwort-db.com.de

Codeigniter $ this-> input-> post () leer, während $ _POST korrekt arbeitet

Bei einer Codeigniter-Installation versuche ich, die eingebaute $this->input->post('some_data')-Funktion zu verwenden, $this->input->post() ist jedoch ein leeres Array.

Eine print_r($_POST) gibt alle Variablen vollständig und richtig aus?

Laut den Codeigniter-Dokumenten wird die Eingabeklasse "automatisch vom System initialisiert, so dass keine manuelle Bearbeitung erforderlich ist", und ich frage mich, was ich sonst noch tun soll.

Irgendwelche Gedanken, wie ich versuchen sollte, das funktionieren zu lassen?

Vielen Dank!

16
Matthew Higgins

Sie können überprüfen, ob Ihre Ansicht ungefähr so ​​aussieht (richtig):

<form method="post" action="/controller/submit/">

vs (funktioniert nicht):

<form method="post" action="/controller/submit">

Der zweite ist hier falsch, da er umgeleitet wird, ohne dass Nachvariablen übertragen werden.

Erklärung:

Wenn die URL am Ende keinen Schrägstrich hat, bedeutet dies, dass diese auf eine Datei verweist.

Wenn der Webserver nun die Datei nachschlägt, sieht er, dass es sich wirklich um ein Verzeichnis handelt, und sendet eine Umleitung an den Browser mit einem Schrägstrich am Ende.

Der Browser führt eine neue Abfrage mit einem Schrägstrich an die neue URL aus, stellt jedoch den Formularinhalt nicht bereit. Dort gehen die Inhalte der Formulare verloren.

26
Rauli Rajande

Um $this->input->post() zu verwenden, initialisieren Sie den Formularhelfer. Das kannst du standardmäßig in config machen.

Versuchen Sie das, ändern Sie

$config['base_url'] = 'http://mywebsite.cl/';

zu

$config['base_url'] = 'http://www.mywebsite.cl/';

Bei einigen Anbietern werden der URL meistens automatisch WWW, HTTPS usw. hinzugefügt. Dies führt zu diesem Problem

3

Es gibt ein paar Dinge, nach denen Sie suchen können, um dieses Problem zu lösen.

  1. Wurde in den Kerndateien von CodeIgniter etwas geändert oder erweitert? Überprüfen Sie, ob system/core/Input.php eine Originalkopie ist und ob der Inhalt von application/library und application/core weitere Dateien enthält

  2. Funktionieren die anderen Eingabemethoden? Was ist das Ergebnis davon, wenn Sie neben Ihrem print_r -Aufruf ausgeführt werden?

    echo $this->input->user_agent();

  3. Welche Daten werden von print_r ausgegeben? Suchen Sie in application/config/config.php nach der Zeile $config['global_xss_filtering']. Ist hier TRUE oder FALSE eingestellt? Wenn TRUE der Cross-Site-Scripting-Filter möglicherweise ein Problem mit den von Ihnen veröffentlichten Daten aufweist (dies ist meiner Meinung nach unwahrscheinlich)

1
ShaneH

Mein Problem war mit einem Ajax-Anruf. Ich habe das benutzt:

type: 'posts',

anstatt 

type: 'post',

Syntax, D'oh!

1
Webmaster G

Upgrade von 2.2.x auf 3.0.x - Die Post-Methode für den Grund schlägt fehl . Wenn Sie CI 3.x aktualisieren, müssen Sie die index_page in der Konfigurationsdatei behalten. Überprüfen Sie auch die .htaccess-Datei auf mod_rewrite. CI_3.x

$config['index_page'] = ''; // ci 2.x
$config['index_page'] = 'index.php'; // ci 3.x

Mein Zugang

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L]
</IfModule>

<IfModule !mod_rewrite.c>
 ErrorDocument 404 /index.php
</IfModule>
1
syyu

Ändern Sie Ihre Formularaktion.

Davon:

<form method="post" action="<?=base_url()?>yourprocess">

Das sehr gut finden:

<form method="post" action="<?=base_url()?>index.php/yourprocess">

Im Grunde müssen Sie nur "index.php" nach Ihrem base_url () hinzufügen:

action = "http://www.yourdomain.com/ index.php / Ihr Prozess"

1
Ajie Winugs

Haben Sie den csrf-Schutz in /applicaiton/config/config.php aktiviert?

In diesem Fall wird $this->input->post() leer angezeigt. Sie können $this->input->post('submit') versuchen, die nicht leer sein sollte. 

1
maan81

Benutzen

var_dump($this->input->post());

Bitte sehen Sie sich den Screenshot an . Hier drucke ich alle Post-Array-Werte

0
Jay Bharat

Endlich wurde das Problem heute gelöst. Das Problem betraf die Datei .htaccess.

Für mich selbst lernen: MUSS DIE CODEIGNITER-DOKUMENTATION gründlicher lesen.

0
user3262234