Smarty und Post/Get Problem

Darian

Erfahrenes Mitglied
Hallo Leute,

wiedereinmal muß ich mich mit einem seltsamen Problem an euch wenden.

Ich benutze Smarty, und habe daher ein Formular wie folgt erstellt:
HTML:
<form id="customer_request" name="customer_request" action="{$smarty.const.DOCUMENT_ROOT|cat:'index.php?action=customer_request'}" method="post">

Weiß jemand was das |cat: eigentlich macht?

Habe es wie folgt auch probiert:
HTML:
action="{$smarty.const.DOCUMENT_ROOT|cat:'index.php'}?action=customer_request"
So ist es bei anderen Templates gemacht, und das funktioniert.

Wenn ich es so mache, leitet er zwar wieder auf das Formular weiter, habe aber durch überprüfen der Klasse in die er die Daten speichern sollte, festgestellt dass er da gar nichts speichert.

Wenn ich die Methode jetzt auf get ändere, übernimmt er zwar die Variablen, aber das action=customer_request nicht mehr, und dann leitet er auf die Hauptseite weiter.

Die Url sieht dann wie folgt aus:
HTML:
http://domain/index.php?name=&direction=&email=&tel=&num_adult=1&num_kids=0&date=DD%2FMM%2FJJJJ+-+DD%2FMM%2FJJJJ&submit=Anfrage+absenden&hotel_id=%24_REQUEST%5B%22hotel_id%22%5D
Kein action=customer_request zu finden.

Im Quelltext seht es aber schon immer richtig:
action="http://kompass/index.php?action=customer_request"

Woran kann das liegen dass sich das mit post und get so ändert?

Benutze Smarty, AdoDB und noch eine Datenbank Klasse von einem Freund.
Könnte es vielleicht an dem _ liegen, werde ich noch gleich probieren.

Jedenfalls wäre es wirklich super wenn mir da jemand weiter helfen könnte, weil ich schon ein wenig unter Zeitdruck stehe.

lg und danke für eventuelle Antworten
Darian
 

Flex

(aka Felix Jacobi)
smarty.net - cat

PHP:
action="{$smarty.const.DOCUMENT_ROOT|cat:'index.php'}?action=customer_request"
{$smarty.const.DOCUMENT_ROOT|cat:'index.php?action=customer_request'}

Du hast da irgendwie die Klammern und einfachen Anführungszeichen durcheinandergeschmissen?
Aber warum änderst du es, wenn es doch funktioniert?
Und wie prüfst du auf den Inhalt des Formulars?
 

Darian

Erfahrenes Mitglied
Hallo, und danke für die Infos.

Die Überprüfung habe ich bis jetzt noch gar nicht gemacht, aber ich kann dir gerne die Funktion geben mit der ich es gemacht habe.

PHP Funktion:
PHP:
function test($smarty) {
	
	//Fehlerabfrage einbauen, und alles genau testen
	
	if($_REQUEST["submit"]) {
		
		//Fehlerabfrage, und wenn alles passt, dann wird in db eingetragen und mail versendet
		
		$request = new CustomerRequest();
		
		//print_r($request);
		
		//$request->set_values_from_form($_REQUEST);
		//$request->request_date = "now()";
		
		$request->name = "test";
		$request->direction = "test";
		$request->email = "test";
		$request->tel = "test";
		$request->num_adult = "test";
		$request->num_kids = "test";
		$request->date = "test";
		$request->request_date = "";
		$request->authentication_date = "";
		$request->pay_date = "";
		$request->hotel_id = "2";
		
		//hier entsteht der Fehler => Invalid argument supplied for foreach() in /var/www/kompass/dev/classes/databaseobject.class.php on line 270
		//$request->create();
		
	
		
		add_info("Es wurde erfolgreich in die Datenbank geschrieben");
		
		/*$sql = "INSERT INTO customer_request () VALUES()"; 
		
		$dbconnection->Execute($sql);*/
		
	}
	
	$smarty->assign("content", "customer_request.tpl");
}

Und das Template dazu:
HTML:
<h2 align="center">Hotelanfrage absenden</h2>

<table>
<form id="customer_request" name="customer_request" action="{$smarty.const.DOCUMENT_ROOT|cat:'index.php'}?action=test" method="post">
	<tr>
		<td>Name:</td> 
		<td><input type="text" name="name"></td>
	</tr>
	<tr>
		<td>Adresse:</td>
		<td><input type="text" name="direction"></td>
	</tr>
	<tr>
		<td>E-Mail:</td> 
		<td><input type="text" name="email"></td>
	</tr>
	<tr>
		<td>Telefon:</td>
		<td><input type="text" name="tel"></td>
	</tr>
	<tr>
		<td>Anzahl Erwachsene:</td>
		<td><input type="text" name="num_adult" value="1"></td>
	</tr>
	<tr>
		<td>Anzahl Kinder:</td>
		<td><input type="text" name="num_kids" value="0" ></tr>
	</tr>
	<tr>
		<td>Datum:</td>
		<td><input type="text" name="date" value="DD/MM/JJJJ - DD/MM/JJJJ"></td>
	</tr>
</table>
<br><input type="submit" name="submit" value="Anfrage absenden">
<input type="hidden" name="hotel_id" value=$_REQUEST["hotel_id"]>
</form>

Was ist da genau mit den Klammern und Anführungszeichen?
Bei den anderen funktioniert es ja, und bei diesem eben nicht.

Ich glaube das ist irgend ein HTML Problem, oder wird da irgendwas anderes mitgesendet was da was ändert? (ändere immer nur post und get, und er leitet auf zwei verschiedene Sachen weiter?)

Wäre super wenn du mir mehr Infos geben könntest.

lg Darian
 

Flex

(aka Felix Jacobi)
PHP:
<input type="hidden" name="hotel_id" value=$_REQUEST["hotel_id"]>

Das wird schonmal nicht klappen.

Und da du selber keine foreach() Schleife aufrufst, wird es wohl durch $request->create() gemacht und dort scheint der Fehler zu sein.

Wie sieht deine CustomerRequest Klasse denn aus?
 

Darian

Erfahrenes Mitglied
Hallo, also wie kann der Fehler davon kommen obwohl das Create auskommentiert ist?

Aber das mit dem foreeach ist ja schon wieder der nächste Fehler. (eigentlich das Hauptproblem, wegen dem ich erst darauf gekommen bin mit dem get/post.

Also die CustomerRequest Klasse:
PHP:
class CustomerRequest extends databaseobject {
	
	var $id;
	var $name;
	var $direction;
	var $email;
	...usw
}

Und das create in der databaseobject sieht wie folgt aus:
PHP:
Habe ich wegen Änderungen/Fehlern raus genommen...
	}

Und hier kommt die RecordCreate:
PHP:
Habe ich wegen Änderungen/Fehlern raus genommen...

Die Zeile wo das foreach aufgerufen wird, ist die Zeile des Fehlers..

Ich hoffe hier kann mir jemand von euch weiterhelfen...ich selber Blicke nicht so durch...

lg und danke für die Infos
Darian
 
Zuletzt bearbeitet:

Darian

Erfahrenes Mitglied
Ich denke ich habe jetzt zuviel Infos gegeben, und jetzt will keiner mehr Antworten.

Wenn irgendwas ungenau erklärt habe, dann sagt es mir bitte, werde mich dann bemühen es noch einmal genauer zu machen.

lg Darian
 

Flex

(aka Felix Jacobi)
Spontan was mir aufgefallen ist:

PHP:
$records = $this->RecordCreate();

PHP:
foreach ($record as $fieldname=>$fieldvalue){
            $s_1.=$tablename.".`".$fieldname."`,";
            $s_2.=DB::qstr($fieldvalue).",";
        }

$records und $record ohne 's'?

Das Gleiche übrigens in der Methode RecordCreate().

Wenn du das korrigierst könnte man ja mal weiter sehen.
 

Darian

Erfahrenes Mitglied
Hallo, danke für die Info...was da mit dem records schief gegangen ist, weiß ich ncht, auf jedenfall war das bei mir nicht so, habe da einen Blödsinn hochgeladen, jetzt passt es aber, und der Fehler ist immer noch da.

Warning: Invalid argument supplied for foreach() in /var/www/kompass/dev/classes/databaseobject.class.php

lg und Danke für die Info
Darian

P.S.: Problem gelöst, es war gar nicht der Code, habe in der DB eine Tabelle mit _ bennant, das wollte er nicht. Jetzt gehts
Danke an alle!
 
Zuletzt bearbeitet:

Neue Beiträge