Seite 1 von 2

Userangaben in DB übernehmen

Verfasst: 06.08.2005 21:32
von nightwalker
Hi Leutz !
Ich habe mir den Shop-Mod ein wenig umgeschrieben. Wenn jetzt jemand etwas kauft, benötige ich die Adresse des Users, und habe mir nun eine shop_angaben.tpl und eine shopangaben.php programmiert, doch leider bekommt er die Variable nicht aus der tpl und ich weiss echt nicht, warum bitte helft mir ! (Der code versucht z.Z. nur die PLZ in die DB einzutragen. Die Felder sind natürlich in der DB enthalten)
Hier die TPL:

Code: Alles auswählen

<form action="{S_ANGABEN_ACTION}" method="post">
<table width="56%" border="0" align="center" cellpadding="10" cellspacing="0">
	<tr>
		<td><table width="83%" border="0" align="center" cellpadding="4" cellspacing="1" class="forumline">
			<tr>
			  <th height="25" colspan="2" class="thHead">Benutzerangaben</th> 
			</tr>
			<tr>
			  <td width="33%" valign="top" class="row1">Vorname / Nachname:</td>
			  <td width="58%" valign="top" class="row1"><input name="vorname" type="text" size="18,9">
                <input name="name" type="text" size="19"></td>
		  </tr>
			<tr>
			  <td valign="top" class="row1">Strasse / Nummer:</td>
			  <td valign="top" class="row1"><input name="street" type="text" size="30">
                <input name="nr" type="text" size="7"></td>
		  </tr>
			<tr>
			  <td valign="top" class="row1">PLZ / Wohnort:</td>
			  <td valign="top" class="row1"><input name="plz" type="text" size="7">
                <input name="ort" type="text" size="30"></td>
		  </tr>
			<tr>
			  <td colspan="2" valign="top" class="row1"><p align="center">
			    <input type="submit" name="Submit" value="Senden">
              </p>
			  </td> 
			</tr>
		</table></td>
	</tr>
</table>
</form>
und hier die php

Code: Alles auswählen

<?php 
define('IN_PHPBB', true);

$phpbb_root_path = './';

include($phpbb_root_path . 'extension.inc');

include($phpbb_root_path . 'common.'.$phpEx);

include($phpbb_root_path . 'includes/bbcode.'.$phpEx);

include($phpbb_root_path . 'includes/functions_search.'.$phpEx);


//

// Start session management

// 

$userdata = session_pagestart($user_ip, PAGE_ANGABEN); 

init_userprefs($userdata); 

//

// End session management

//





//

// Generate page

//

$page_title = 'Benutzerangaben';

include($phpbb_root_path . 'includes/page_header.'.$phpEx); 


$template->set_filenames(array( 

	'body' => 'shop_angaben.tpl') 

); 

	$template->assign_block_vars('topics', array( 

	    'CLASS' => $class,
		'S_ANGABEN_ACTION' => append_sid('shopangaben.'.$phpEx) 

	)); 



$sql = "UPDATE  phpbb_users 

		SET user_plz =  $plz

		WHERE user_id = " . $userdata['user_id'] . "";

		if( !$db->sql_query($sql) ) 

		{ 

		message_die(GENERAL_ERROR, 'ERROR ', '', __LINE__, __FILE__, $sql); 

		}

$template->pparse('body'); 



include($phpbb_root_path . 'includes/page_tail.'.$phpEx); 

?>
THX schonmal im vorraus !


www.aprilia-racing-forum.de

Verfasst: 07.08.2005 03:41
von Budman
Du setzt ja in Deinem SQL Update auch nur die PLZ oder sehe ich das um die Uhrzeit jetzt falsch? Du musst die anderen Felder schon auch eintragen in Deine DB ;)

Ausserdem bin ich mir ehrlich gesagt sicher, dass Du hier

Code: Alles auswählen

$template->assign_block_vars('topics', array(
eigentlich keinen Loop verwenden darfst, zumal Du ihn im Template nicht aufrufst...

Code: Alles auswählen

$template->assign_vars(array(
Aber es ist schon spät, vielleciht hab ich da jetzt auch was falsch gelesen ;)

Nimm mal dieses Tutorial, da ist das schön erklärt ;)

Verfasst: 07.08.2005 05:09
von AceVentura
Probier mal folgendes:

FIND

Code: Alles auswählen

$sql = "UPDATE  phpbb_users
BEFORE, ADD

Code: Alles auswählen

$plz = ( isset($HTTP_POST_VARS['plz']) ) ? $HTTP_POST_VARS['plz'] : '';
Es wäre auch interessant zu wissen, welchen Typs deine Datenbankerweiterungen sind. VARCHAR ?

Sollte es kein VARCHAR, sondern eine Form von INT sein, sollteste dieses einbauen

Code: Alles auswählen

$plz = ( isset($HTTP_POST_VARS['plz']) ) ? intval ($HTTP_POST_VARS['plz']) : 0;

Danke

Verfasst: 07.08.2005 17:21
von nightwalker
Danke, so funktioniert es ! Aber ein Problem hab ich noch, und zwar, wenn ich die anderen Felder auch noch übernehnem will, geht es nicht mehr. Die Felder inner DB sind VARCHAR
Hier der Code:

Code: Alles auswählen

<?php 
define('IN_PHPBB', true); 

$phpbb_root_path = './'; 

include($phpbb_root_path . 'extension.inc'); 

include($phpbb_root_path . 'common.'.$phpEx); 




// 

// Start session management 

// 

$userdata = session_pagestart($user_ip, PAGE_SHOPANGABEN); 

init_userprefs($userdata); 

// 

// End session management 

// 





// 

// Generate page 

// 
$page_title = 'Benutzerangaben'; 

$template->set_filenames(array( 

   'body' => 'shop_angaben.tpl') 

); 

	$template->assign_vars(array(
	   'S_ANGABEN_ACTION' => append_sid('shopangaben.php')
   )); 
    
$template->pparse('body'); 
$name = ( isset($HTTP_POST_VARS['name']) ) ? $HTTP_POST_VARS['name'] : '';
$street = ( isset($HTTP_POST_VARS['street']) ) ? $HTTP_POST_VARS['street'] : '';
$nr = ( isset($HTTP_POST_VARS['nr']) ) ? $HTTP_POST_VARS['nr'] : '';
$plz = ( isset($HTTP_POST_VARS['plz']) ) ? $HTTP_POST_VARS['plz'] : '';
$ort = ( isset($HTTP_POST_VARS['ort']) ) ? $HTTP_POST_VARS['ort'] : '';

$sql = "UPDATE  phpbb_users SET user_name = $name, 
								user_street = $street, 
								user_nr= $nr,
								user_plz= $plz, 
								user_ort = $ort
								WHERE user_id = '2'"; 
?>
Thx
Nightwalker

Verfasst: 07.08.2005 18:23
von AceVentura
Diese Größenangabe sieht nicht schön aus. Evtl. änderste die noch
size="18,9"


Dann pack auch mal den SQL Teil der php Datei vor das
// Generate the page

(Das hat keinen Effekt, sieht aber im Vergleich zu andern phpBB Dateien einheitlicher aus.)


Du hast in der neuen php Datei unten den Teil vergessen wo das in die Datenbank eingetragen wird:

Code: Alles auswählen

if( !$db->sql_query($sql) ) 

      { 

      message_die(GENERAL_ERROR, 'ERROR ', '', __LINE__, __FILE__, $sql); 

      }
Und dann mach auch mal die Hochkomma weg bei

Code: Alles auswählen

WHERE user_id = '2'
Am besten machste da wieder das hin, was in der alten php Datei stand
(auch ein wenig korrigiert)

Code: Alles auswählen

WHERE user_id = " . $userdata['user_id'];

Hoffe das klappt dann ;)

gruß Ace

THX

Verfasst: 07.08.2005 19:36
von nightwalker
Super ! DU BIST DER BESTE !
Es funzt. DANKE !!!

Kannst du mir vieleicht Erklähren, was das genau bedeutet:

Code: Alles auswählen

$HTTP_POST_VARS
THX

Verfasst: 07.08.2005 21:24
von AceVentura
Mit $HTTP_POST_VARS kannst Du die Variablen auslesen, wenn Du Formulare abschickst und method="post" im <form...>-Tag gesetzt hast.

Die Variablen aus einer URL (z.B. index.php?mode=3) bekommst Du mit
$HTTP_GET_VARS (z.B. $HTTP_GET_VARS['mode'])



Guck ausserdem mal hier rein: http://oxpus.de/kb.php?mode=article&k=4

Re

Verfasst: 09.08.2005 16:25
von nightwalker
Hi ! Danke !
Nun hab ich noch ein Problem, und zwar will ich, wenn er das Formular ausgefüllt und abgesendet hat, das er an einen bestimmten link weitergeleitet wird ? wie mache ich das mit php ? kann ich ich ihm sagen

Code: Alles auswählen

if (!$name='leer' & submit)
gehe zu seite blabla.php
???
Thx
Night

Verfasst: 09.08.2005 19:12
von AceVentura
Umleitungen machst Du mit:

Code: Alles auswählen

redirect(append_sid("blabla.$phpEx", true));
Aber ich glaube es ist nicht das was Du suchst. Du willst wahrscheinlich Deinem Anwender sagen, dass er gefälligst seinen Namen eingeben soll, richtig ? ;)

Das machst Du am besten mit:

Irgendwo in die lang_main.php

Code: Alles auswählen

$lang['missing_input_message'] = 'Du hast nicht alle erforderlichen Angaben gemacht. Klick %shier%s um es noch einmal zu versuchen';
Und in Deine Datei:

Code: Alles auswählen

$missing_input_message = sprintf($lang['missing_input_message'], '<a href="javascript:history.back()">', '</a>');
message_die(GENERAL_MESSAGE, $missing_input_message);

Der Code der nach "message_die(...);" geschrieben ist, wird garantiert nicht ausgeführt, wenn das message_die aufgerufen wurde. Sowas hier würde also nicht gehen:

Code: Alles auswählen

if (true) {
      $message_die(....); 
      $und_zusätzlich_noch_einen_Tadel_vergeben = 'ja';
}

Gruß Ace

re

Verfasst: 09.08.2005 20:02
von nightwalker
Hi, danke für deine Antwort, aber das meine ich nicht. Ich möchte, das wenn er auf den Senden button geht, das die daten dann abgesendet werden, und der user auf eine bestimmte seite weitergeleitet wird.

thx
night