Omschrijf je probleem in detail
Ik heb een website, waar mensen kunnen registreren en inloggen, ook hebben deze gebruikers toegang tot een profiel pagina waar hun gegevens staan weergegeven tijdens hun regestratie...

Wat ik nu dus er nog graag bij wil hebben is dat ze hun gegevens kunnen veranderen
'edit_profiel.php' 'profiel.php?edit' oid. Ik heb al een aantal tips gehad maar ik kom er maar niet uit!! :(:(


Wat heb je geprobeerd om je probleem op te lossen?
Op google gezocht naar formulier verwerking.
Zoeken naar een vergelijkbaar script. [niet gevonden]
Van zelf aantal dingen geprobeerd [zometeen te zien in de [.code.] [./code.] tags]


Wat is nou precies je vraag?
Is er iemand die miss een soort van tut hiervan heeft??
Zou iemand mij kunnen begeleiden door middel van Tips en commentaar.
Iemand een kleine opzet heeft zodat ik weet wat er gedaan moet worden.


Bij voorbaat dank en met vriendelijke groet,

Reduan Kurtaj



<?php
// Start de sessie.
session_start();


// Maakt verbinding met de database.
include('conn.php');

// Errors weergeven.
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

// SQL debug.
define('DEBUG_MODE',true); // true == aan, false == uit

// Functie voor SQL debug.
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}

// Controle of de gebruiker wel is ingelogd
if (isset($_SESSION['username'])) {
echo 'Welcome: '.$_SESSION['username'];
} else {
header ('refresh: 1; url=index.php');
echo 'Niet ingelogd!';
}

// Controle of het formulier gepost is.
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
} else {
echo 'Geen form geselecteerd, ga terug naar de vorige pagina.';

// Controle of de array wel bestaat.
if(isset($_GET['id'], $_POST['gebruiker'], $_POST['voornaam'], $_POST['achternaam'], $_POST['email'], $POST['woonplaats']))

//Controle of geen enkele variabelen leeg is.
if (empty($voornaam) || empty($achternaam) || empty($email) || empty($woonplaats)) {
echo 'U heeft succesvol alles ingevuld, en Uw profiel is geupdate!';
} else {
header ('refresh: 3; url=edit_profiel.php');
echo 'Een of meerdere velden zijn niet ingevuld.';
}

// Haal gegevens op uit de database, en plaatst ze in $rij
$query ="SELECT * FROM users WHERE id= ".$_session['id']."";
$sql = mysql_query($query);
echo (showSQLError($sql, mysql_error()));

// als het query resultaat hoger als 0 is bestaat de user, anders niet.
if(mysql_num_rows($sql) > 0){
$rij = mysql_fetch_array($sql);
} else {
echo 'Deze gebruiker bestaat helaas niet (meer)';
}

echo
'<form method="post" action="bezig.php">

<p>
Voornaam:<br>
<input type="text" name="voornaam" maxlength="50" value='.$rij['voornaam'].'>
</p>
<p>
Achternaam:<br>
<input type="text" name="achternaam" maxlength="50" value='.$rij['achternaam'].'>
</p>
<p>
Woonplaats:<br>
<input type="text" name="woonplaats" maxlength="50" value='.$rij['woonplaats'].'>
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="50" value='.$rij['email'].'>
</p>
<input type="submit" class="submit" name="action" value="Update Profiel">
</p>
</form>';
}
?>
Om een profiel van een bepaald personen te updaten gebruik je
<?php
$sql = "UPDATE users
SET voornaam=" . mysql_real_escape_string($_POST['voornaam']) . "
,achternaam=" . mysql_real_escape_string($_POST['achternaam']) . "
WHERE id=" . $_SESSION['id'] . "
LIMIT 1";
$res = mysql_query($sql);

if($res){ // als query goed gaat
if(mysql_affected_rows() > 0){ // als er velden zijn geupdate
echo 'Velden zijn geupdate';
} else {
echo 'Geen veranderingen. Niet geupdate';
}
} else {
echo 'Error ' . mysql_error();
}
?>
edit: set vergeten X_X
Dan krijg je dus als waren dit??
of moet ik mijn stukje SQL vervangen door dat stukje van jou??

<?php
// Start de sessie.
session_start();


// Maakt verbinding met de database.
include('conn.php');

// Errors weergeven.
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

// SQL debug.
define('DEBUG_MODE',true); // true == aan, false == uit

// Functie voor SQL debug.
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}

// Controle of de gebruiker wel is ingelogd
if (isset($_SESSION['username'])) {
echo 'Welcome: '.$_SESSION['username'];
} else {
header ('refresh: 1; url=index.php');
echo 'Niet ingelogd!';
}

$sql = "UPDATE users
SET voornaam=" . mysql_real_escape_string($_POST['voornaam']) . "
,achternaam=" . mysql_real_escape_string($_POST['achternaam']) . "
WHERE id=" . $_SESSION['id'] . "
LIMIT 1";
$res = mysql_query($sql);

if($res){ // als query goed gaat
if(mysql_affected_rows() > 0){ // als er velden zijn geupdate
echo 'Velden zijn geupdate';
} else {
echo 'Geen veranderingen. Niet geupdate';
}
} else {
echo 'Error ' . mysql_error();
}

// Haal gegevens op uit de database, en plaatst ze in $rij
$query ="SELECT * FROM users WHERE id= ".$_session['id']."";
$sql = mysql_query($query);
echo (showSQLError($sql, mysql_error()));

// als het query resultaat hoger als 0 is bestaat de user, anders niet.
if(mysql_num_rows($sql) > 0){
$rij = mysql_fetch_array($sql);
} else {
echo 'Deze gebruiker bestaat helaas niet (meer)';
}

echo
'<form method="post" action="bezig.php">

<p>
Voornaam:<br>
<input type="text" name="voornaam" maxlength="50" value='.$rij['voornaam'].'>
</p>
<p>
Achternaam:<br>
<input type="text" name="achternaam" maxlength="50" value='.$rij['achternaam'].'>
</p>
<p>
Woonplaats:<br>
<input type="text" name="woonplaats" maxlength="50" value='.$rij['woonplaats'].'>
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="50" value='.$rij['email'].'>
</p>
<input type="submit" class="submit" name="action" value="Update Profiel">
</p>
</form>';
}
?>
Dan lijkt me geen goed idee :) Uiteraard moet je wel kijken of het formulier wordt verzonden, voor je die update gaat doen. Nou zou die bij het openen van je pagina je profiel wissen (Updaten met lege velden omdat de POST variabelen leeg zijn)

Controleer met if($_SERVER['REQUEST_METHOD'] == 'POST') of je formulier wordt verzonden, en controleer daarna of de velden die wilt zijn ingevuld.
Welcome: Reduani <--- Deze hoort

Geen form geselecteerd, ga terug naar de vorige pagina. <--- Die niet... moet ik if($_SERVER['REQUEST_METHOD'] == 'POST'){

} pas sluiten na het form?? of maak dat niet uit?

En dit zijn gewoon fouten die die geeft :(:(

Notice: Undefined index: voornaam in /mnt/webc/e2/15/53954115/htdocs/bezig.php on line 44

Notice: Undefined index: achternaam in /mnt/webc/e2/15/53954115/htdocs/bezig.php on line 45

Error You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' achternaam= WHERE id=9 LIMIT 1' at line 3


<?php
// Start de sessie.
session_start();

// Maakt verbinding met de database.
include('conn.php');

// Errors weergeven.
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

// SQL debug.
define('DEBUG_MODE',true); // true == aan, false == uit

// Functie voor SQL debug.
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}

// Controle of de gebruiker wel is ingelogd
if (isset($_SESSION['username'])) {
echo 'Welcome: '.$_SESSION['username'];
} else {
header ('refresh: 1; url=index.php');
echo 'Niet ingelogd!';
}

// Controle of het formulier gepost is.
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
} else {
echo 'Geen form geselecteerd, ga terug naar de vorige pagina.';
}

$sql = "UPDATE users
SET
voornaam=" . mysql_real_escape_string($_POST['voornaam']) . ",
achternaam=" . mysql_real_escape_string($_POST['achternaam']) . "
WHERE id=" . $_SESSION['id'] . "
LIMIT 1";
$res = mysql_query($sql);


if($res){ // als query goed gaat
if(mysql_affected_rows() > 0){ // als er velden zijn geupdate
echo 'Velden zijn geupdate';
} else {
echo 'Geen veranderingen. Niet geupdate';
}
} else {
echo 'Error ' . mysql_error();
}
echo
'<form method="post" action="bezig.php">

<p>
Voornaam:<br>
<input type="text" name="voornaam" maxlength="50" value="voornaam">
</p>
<p>
Achternaam:<br>
<input type="text" name="achternaam" maxlength="50" value="achternaam">
</p>
<p>
Woonplaats:<br>
<input type="text" name="woonplaats" maxlength="50" value="woonplaats">
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="50" value="email">
</p>
<input type="submit" class="submit" name="action" value="Update Profiel">
</p>
</form>';
?>
Ik ben trouwens quotes vergeten :)
Maar de hele update moet natuurlijk in die controle, anders wordt het nog steeds geupdate zonder dat het formulier gepost is.
Die notices krijg je omdat die variabelen (voornaam, achternaam) leeg zijn. Daarom moet je ze ook eerst checken

<?php
// Controle of het formulier gepost is.
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

if(isset($_POST['voornaam'],$_POST['achternaam'])){ // controle of je velden bestaan (weten we nog niet of ze gevuld zijn)

$sql = "UPDATE users
SET
voornaam = '" . mysql_real_escape_string($_POST['voornaam']) . "',
achternaam = '" . mysql_real_escape_string($_POST['achternaam']) . "'
WHERE id = " . $_SESSION['id'] . "
LIMIT 1";
$res = mysql_query($sql);


if($res){ // als query goed gaat
if(mysql_affected_rows() > 0){ // als er velden zijn geupdate
echo 'Velden zijn geupdate';
} else {
echo 'Geen veranderingen. Niet geupdate';
}
} else {
echo 'Error ' . mysql_error();
}
}

} else {
echo 'Geen form geselecteerd, ga terug naar de vorige pagina.';
}
?>
Controle op je velden is aan jezelf.
Michael - op 15/01/2014 16:22:47

Controle op je velden is aan jezelf.


Heel erg bedankt.. hij doet het bijna X.X
Controle op velden doe ik zo:
<?php
/*Check of geen enkele variabelen leeg is, is er wel een leeg, Dan krijg je een foutmelding.*/
if (empty($voornaam) || empty($achternaam) || empty($woonplaats) || empty($email)) {
header ('refresh: 2; url=edit_profiel.php.php');
} else {
echo ('Een of meerdere velden zijn niet ingevuld!');
}
?>

en nog steeds krijg ik dit te zien... Geen form geselecteerd, ga terug naar de vorige pagina.

Live voorbeeld:
Http://www.mmgnews.nl
login met user: phphulp ww: phphulp
Daarna het kopje: Wijzig profiel
Http://www.mmgnews.nl/edit_profiel.php
Reduan kurtaj op 15/01/2014 17:13:28

[quote="Michael - op 15/01/2014 16:22:47"]
Controle op je velden is aan jezelf.


Heel erg bedankt.. hij doet het bijna X.X
Controle op velden doe ik zo:
<?php
/*Check of geen enkele variabelen leeg is, is er wel een leeg, Dan krijg je een foutmelding.*/
if (empty($voornaam) || empty($achternaam) || empty($woonplaats) || empty($email)) {
header ('refresh: 2; url=edit_profiel.php.php');
} else {
echo ('Een of meerdere velden zijn niet ingevuld!');
}
?>

en nog steeds krijg ik dit te zien... Geen form geselecteerd, ga terug naar de vorige pagina.

Live voorbeeld:
Http://www.mmgnews.nl
login met user: phphulp ww: phphulp
Daarna het kopje: Wijzig profiel
Http://www.mmgnews.nl/edit_profiel.php
[/quote]
'Geen form...' Krijg je zolang er geen request is gedaan, dus hij doet precies wat je wil. Die else kan wat dat betreft ook weg.
Je manier van controleren is vreemd. $voornaam is niet het zelfde als $_POST['voornaam']
Waarom een refresh als 1 variabele niet is ingevuld (... OF ... OF ..) en een melding 'niet ingevuld' als ze juist wel zijn ingevuld.

Laat het script eens zien zoals je het nu hebt :)
D B op 15/01/2014 18:18:12

Laat het script eens zien zoals je het nu hebt :)


<?php

// Maakt verbinding met de database.
include('conn.php');

// Errors weergeven.
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

// SQL debug.
define('DEBUG_MODE',true); // true == aan, false == uit

// Functie voor SQL debug.
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}

// Controle of de gebruiker wel is ingelogd
if (isset($_SESSION['username'])) {
} else {
header ('refresh: 1; url=index.php');
echo 'Niet ingelogd!';
}


// Controle of het formulier gepost is.
if ($_SERVER['REQUEST_METHOD'] == 'POST') {

// controle of je velden bestaan (weten we nog niet of ze gevuld zijn)
if(isset($_POST['voornaam'],$_POST['achternaam'],$_POST['woonplaats'],$_POST['email'])){

/*Check of geen enkele variabelen leeg is, is er wel een leeg, Dan krijg je een foutmelding.*/
if (empty($voornaam) || empty($achternaam) || empty($woonplaats) || empty($email)) {
header ('refresh: 2; url=edit_profiel.php.php');
} else {
echo ('Een of meerdere velden zijn niet ingevuld!');
}

$sql = "UPDATE users
SET
voornaam = '" . mysql_real_escape_string($_POST['voornaam']) . "',
achternaam = '" . mysql_real_escape_string($_POST['achternaam']) . "'
WHERE id = " . $_SESSION['id'] . "
LIMIT 1";
$res = mysql_query($sql);

// als query goed gaat
if($res){
if(mysql_affected_rows() > 0){ // als er velden zijn geupdate
echo 'Velden zijn geupdate';
} else {
echo 'Geen veranderingen. Niet geupdate';
}
} else {
echo 'Error ' . mysql_error();
}
}
} else {
echo 'Geen form geselecteerd, ga terug naar de vorige pagina.';
}

echo
'<form method="post" action="edit_profiel.php">

<p>
Voornaam:<br>
<input type="text" name="voornaam" maxlength="50" value="voornaam">
</p>
<p>
Achternaam:<br>
<input type="text" name="achternaam" maxlength="50" value="achternaam">
</p>
<p>
Woonplaats:<br>
<input type="text" name="woonplaats" maxlength="50" value="woonplaats">
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="50" value="email">
</p>
<input type="submit" class="submit" name="action" value="Update Profiel">
</p>
</form>';
?>
Bij regel 38 open je een isset, daarna ga je op regel 40 controleren of ze ingevuld zijn. Als ze niet ingevuld zijn stuur je een header en als ze wel ingevuld zijn stuur je een echo dat ze niet zijn ingevuld.

Bij de isset op regel 38 open je de if en die sluit pas ergens onderaan, daar zit het een en ander niet goed.

Als ik bij regel 38 begin zou ik het zo doen:
(ben zelf ook nog maar een beginner maar ga je proberen te helpen :))

<?
if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Controle of het formulier gepost is.
if(isset($_POST['voornaam'],$_POST['achternaam'],$_POST['woonplaats'],$_POST['email'])){ // controle of je velden bestaan (weten we nog niet of ze gevuld zijn)
if (empty($voornaam) || empty($achternaam) || empty($woonplaats) || empty($email)) { /*Check of geen enkele variabelen leeg is, is er wel een leeg, Dan krijg je een foutmelding.*/
echo ('Een of meerdere velden zijn niet ingevuld!');
}
else {
$sql = "UPDATE
users
SET
voornaam = '" . mysql_real_escape_string($_POST['voornaam']) . "',
achternaam = '" . mysql_real_escape_string($_POST['achternaam']) . "'
WHERE
id = " . $_SESSION['id'] . "
LIMIT 1
";
$res = mysql_query($sql);
if($res){ // als query goed gaat
if(mysql_affected_rows() > 0){ // als er velden zijn geupdate
echo 'Velden zijn geupdate';
}
else {
echo 'Geen veranderingen. Niet geupdate';
}
}
else {
echo 'Error ' . mysql_error();
}
}
}
else {
echo 'Er is geen form geselecteerd, ga terug naar de vorige pagina.';
}
}
else {
echo
'<form method="post" action="edit_profiel.php">

<p>
Voornaam:<br>
<input type="text" name="voornaam" maxlength="50" value="voornaam">
</p>
<p>
Achternaam:<br>
<input type="text" name="achternaam" maxlength="50" value="achternaam">
</p>
<p>
Woonplaats:<br>
<input type="text" name="woonplaats" maxlength="50" value="woonplaats">
</p>
<p>
Email:<br>
<input type="text" name="email" maxlength="50" value="email">
</p>
<input type="submit" class="submit" name="action" value="Update Profiel">
</p>
</form>';
}
?>

Reageren