Archief - PHP: Formulier probleem

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

n0sTRa

Legacy Member
Hallo,

ik heb me voorgenomen om in 2006 php te leren dus heb ik men boeken opengeslaan en wou ik website maken aan de hand van php.
Bij men eerste formulier zit ik al vast doordat ik niet echt weet of het mogelijk is om via radio button aan een variabel twee mogelijkheden mee te geven.
Vb de mogelijkheid geven aan de gebruiker om te kiezen of je email mag getoont worden en dan als het mag in men db een 1 te plaatsen bij de variabel $show_email en als hij het liever zen email adres voor zen eigen wil houden in de db een 2 plaatsen ofzo.

hier men code alvast die ik heb:

formulier:
HTML:
<form method="post" action="register_verwerken.php">
  <table width="400" border="0" cellpadding="0" cellspacing="0">
    <tr>
      <td colspan="2">Register</td>
    </tr>
    <tr>
      <td colspan="2">Registration Information</td>
    </tr>
	<tr>
	  <td colspan="2">Items marked with a * are required unless stated otherwise.</td>
	 </tr>
    <tr>
      <td>Username: *</td>
      <td>
        <input type="text" name="username" />
      </td>
    </tr>
    <tr>
      <td>E-mail address: *</td>
      <td><input type="text" name="email" /></td>
    </tr>
    <tr>
      <td>Password: *</td>
      <td><input type="password" name="password" /></td>
    </tr>
    <tr>
      <td>Confirm password: * </td>
      <td><input type="password" name="confirm_password" /></td>
    </tr>
    <tr>
      <td colspan="2">Profile Information</td>
    </tr>
    <tr>
      <td colspan="2">This information will be publicly viewable</td>
    </tr>
    <tr>
      <td>ICQ Number:</td>
      <td><input type="text" name="icq" /></td>
    </tr>
    <tr>
      <td>AIM Address:</td>
      <td><input type="text" name="aim" /></td>
    </tr>
    <tr>
      <td>MSN Messenger:</td>
      <td><input type="text" name="msn" /></td>
    </tr>
    <tr>
      <td>Yahoo Messenger:</td>
      <td><input type="text" name="yahoo" /></td>
    </tr>
    <tr>
      <td>Website:</td>
      <td><input name="website" type="text" value="http://" /></td>
    </tr>
    <tr>
      <td>Location:</td>
      <td><input type="text" name="location" /></td>
    </tr>
    <tr>
      <td>Occupation:</td>
      <td><input type="text" name="occupation" /></td>
    </tr>
    <tr>
      <td>Interests:</td>
      <td><input type="text" name="interests" /></td>
    </tr>
    <tr>
      <td>Signature:      </td>
      <td><input type="text" name="signature" /></td>
    </tr>
    <tr>
      <td colspan="2">Edit profile</td>
    </tr>
    <tr>
      <td>Always show my e-mail address:</td>
      <td>
        <input name="show_email" type="radio" value="1" />
      Yes 
      <input name="show_email" type="radio" value="2" checked="checked" /> 
      No
	  </td>
    </tr>
    <tr>
      <td>Hide your online status:</td>
      <td><input name="hide_online_status" type="radio" value="1" />
Yes
  <input name="hide_online_status" type="radio" value="2" checked="checked" />
No </td>
    </tr>
    <tr>
      <td>Always notify me of replies:</td>
      <td><input name="notify_of_replies" type="radio" value="1" />
Yes
  <input name="notify_of_replies" type="radio" value="2" checked="checked" />
No </td>
    </tr>
    <tr>
      <td>Notify on new Private Message:</td>
      <td><input name="notify_of_pm" type="radio" value="1" checked="checked" />
Yes
  <input name="notify_of_pm" type="radio"  value="2" />
No </td>
    </tr>
    <tr>
      <td>Always attach my signature:</td>
      <td><input name="attach_signature" type="radio" value="1" checked="checked" />
Yes
  <input name="attach_signature" type="radio" value="2" />
No </td>
    </tr>
    <tr>
      <td>Always allow BBCode:</td>
      <td><input name="allow_bbcode" type="radio" value="1" checked="checked" />
Yes
  <input name="allow_bbcode" type="radio" value="2" />
No </td>
    </tr>
    <tr>
      <td>Always enable Smilies:</td>
      <td><input name="enable_smilies" type="radio" value="1" checked="checked" />
Yes
  <input name="enable_smilies" type="radio" value="2" />
No </td>
    </tr>
    <tr>
      <td colspan="2">
        <input type="submit" name="submit" value="Register" />
      </td>
    </tr>
  </table>
</form>

en dan men register_verwerken.php:
PHP:
<?php
// includes 
include ('config.php'); 

if (isset($_POST['Submit'])) {

$username=$_POST['username'];
$email=$_POST['email'];
$password=$_POST['password'];
$icq=$_POST['icq'];
$aim=$_POST['aim'];
$msn=$_POST['msn'];
$yahoo=$_POST['yahoo'];
$website=$_POST['website'];
$location=$_POST['location'];
$occupation=$_POST['occupation'];
$interests=$_POST['interests'];
$signature=$_POST['signature'];
// Daarna de volgende zoals 'show_email', 'hide_online_status' enz maar dan met de keuze van ja of nee via een radio button met als waarde 1 of 2

$query="INSERT INTO users (username, email, password, icq, aim, msn, yahoo, website, location, occupation, interests, signature, .....) 
		VALUES ('".$username."', '".$email."', '".$password."', '".$icq."', '".$aim."', '".$msn."', '".$yahoo."', '".$website."', 
		'".$location."', '".$occupation."', '".$interests."', '".$signature."', '".$."', '".$."')";
mysql_query($query) or die (mysql_error()); 

}
?>

Hopelijk is het wat duidelijk naar waar ik naar toe wil

mvg

killgore

Legacy Member
radios:

name="naam" --> dezelfde naam voor alle radio-buttons van hetzelfde type, maar aparte values

en dan $_POST["naam"] bevat de value van de aangeduide radio-knop.

n0sTRa

Legacy Member
dus men html code is al ok en bij de php code dan vb dit:

PHP:
<?php
// includes 
include ('config.php'); 

if (isset($_POST['submit'])) {

$show_email=$_POST['show_email'];

$query="INSERT INTO users (show_email) VALUES ('".$show_email."')";
mysql_query($query) or die (mysql_error()); 

}
?>

killgore

Legacy Member
yup :).

alleen moet het $show_email en niet show_email zijn :p.

n0sTRa

Legacy Member
Over het hoofd gezien en aangepast :)
Ik ben bezig aan men formulier wat aan te passen, zal straks de code posten zodat jullie hem eens vlug kunnen doornemen en verbeteren als je wilt.

killgore

Legacy Member
als ik u gewoon algemene tip mag geven: zet tijdens het ontwikkelen in uw config-file (=file die ge in elke pagina invoegt) error_reporting(E_ALL);

Dan worde vaak op kleine stomme fouten gewezen.

WoDkA

Legacy Member
kzou wa meer security insteken :) zoals controle op input voor je het in de database steekt ..

bv. een ' moet je altijd escapen, want die kan in naam voorkomen (zoals O'neill ) en dan loopt het fout ..
ook scriptjes hou je best tegen, door filtering ( reguliere expressies, strip_tags, whatever .. )

geef ook die register_verwerken.php ne else voor als er geen submit is gedaan :) bv. ne link naar het formulier

n0sTRa

Legacy Member
dit heb ik voorlopig al:

PHP:
<?php
//  Users Register Formulier
//	Datum 23.01.06
//  Verwerking van register.php
	


// includes 
include ('config.php'); 

//  controle op username, pass & email 
if (strlen($_POST['username']) <= 25 &&
 strlen($_POST['password']) <= 25 && strlen($_POST['password'] == $_POST['confirm_password']) &&
 strlen($_POST['email'] <= 50 && validate_email($_POST['email'))	{
if (username_valid($_POST['username']) strlen($_POST['password'] >= 6 ))	{

$username = strtolower($_POST['username']);
$username = trim($username); 
$email = md5($_POST['email']);
$password = md5($_POST['password']);
$icq = $_POST['icq'];
$aim = $_POST['aim'];
$msn = $_POST['msn'];
$yahoo = $_POST['yahoo'];
$website = $_POST['website'];
$location = $_POST['location'];
$occupation = $_POST['occupation'];
$interests = $_POST['interests'];
$signature = $_POST['signature'];
$show_email = $_POST['show_email'];
$hide_online_status = $_POST['hide_online_status'];
$notify_of_replies = $_POST['notify_of_replies'];
$notify_of_pm = $_POST['notify_of_pm'];
$attach_signature = $_POST['attach_signature'];
$allow_bbcode = $_POST['allow_bbcode'];
$enable_smilies = $_POST['enable_smilies'];
$registerdate = date("t m y");


$query = "INSERT INTO users (ID, username, email, password, icq, aim, msn, yahoo, website, location, occupation, interests, signature, hide_online_status, notify_of_replies, attach_signature, allow_bbcode, enable_smilies, registerdate) 
		VALUES ('".$ID."', '".$username."', '".$email."', '".$password."', '".$icq."', '".$aim."', '".$msn."', '".$yahoo."', '".$website."', 
		'".$location."', '".$occupation."', '".$interests."', '".$signature."', '".$show_email."', '".$hide_online_status."', '".$notify_of_replies."', '".$notify_of_pm."', '".$attach_signature."', '".$allow_bbcode."', '".$enable_smilies."' '".$registerdate."',)";
		
mysql_query($query) or die (mysql_error()); 

// function's

function username_valid()	{
//  parameter voor gebruik met strspan
$span_str = "abcdefghijklmnopqrstuvwxyz" . "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";

// moet tenminste één teken bevatten
if (strspn($_POST['username'], $span_str) == 0) {
return false;
}

// moet alle toegestane tekens bevatten
if (strspn($_POST['username'], $span_str) == 0) {
return false;
}

// min en max lengte
if (strlen($_POST['username']) < 5) {
return false;
}
if (strlen($_POST['username']) > 25) {
return false;
}

return true;
}

// email validation
function validate_email()	{
return (ereg('[a-z\.\_\-]+)\@([a-z\_\-]+)\.([a-z\.]{1,6}', $_POST['email']));
?>

heb ik gemaekt met behulp van php5 het complete hanbboek maar er zal nog een heel stuk code ontbreken prolly.

moet ik nu nog bovenaan die
PHP:
if (isset($_POST['submit'])) {

plaatsen of moet het anders geformuleerd worden?

Rvl

Legacy Member
als ge u knop de naam "submit" hebt gegeven wel ja, let wel dat dit geen veilige manier is voor validatie als je met meerdere formulieren op 1 pagina zit, als je ze dan beide controleert op isset submit gaan ze telkens allebei werken als je op één van de twee knoppen drukt en dat is niet de bedoeling. Beter is dus u name definiere

killgore

Legacy Member
beste is een hidden field per form maken voor dergelijke zaken.

bv. <input type="hidden" name="action" value="new">
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan