webForumDet fria alternativet

Lite problem med profil skript

3 svar · 367 visningar · startad av Tulork

TulorkMedlem sedan aug. 2004903 inlägg
#1

För det första så har jag ett registrerings skript som funkar finnemang...jag har nu byggt ett skript där de registrerade medlemmarna kan ändra vissa saker i sin profil, men det funkar inte 100%... har problem med att updatera databasen med de nya uppgifterna.

Så här ser profil.php ut

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>profil</title>
<link href="../setts/style.css" rel="stylesheet" type="text/css" />
</head>
<body class="main">

<?php
 include "../setts/funcs.php";
include "../setts/conn.php";

	$sql = "SELECT * FROM $mem_table WHERE ID = '10'";
	$result = mysql_query($sql)or die(mysql_error());
	
	while ($line = mysql_fetch_array($result,MYSQL_ASSOC)){
	
	$test = $line[user];

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

$user = $_POST['user2'];
$pass = $_POST['passwd1'];
$pass2 = $_POST['passwd2'];
$fornamn = $_POST['fornamn'];
$efternamn = $_POST['efternamn'];
$stad = $_POST['stad'];
$epost = $_POST['epost'];
$msn = $_POST['msn'];
$skype = $_POST['skype'];
$hemsida = $_POST['hemsida'];
$nyhetsbrev = $_POST['nyhetsbrev'];

// Kolla om användarnamnet är upptaget
	$sql = "SELECT COUNT(*) FROM $mem_table WHERE user='{$_POST['user2']}'";
	$result = mysql_query($sql);
	if (mysql_result($result, 0) > 0) {
	$reg_error[] = 1;
	}

// Tag bort eventuella blanksteg i början eller slutet
	foreach($_POST as $key => $val){
	$_POST[$key] = trim($val);
	}
check_falt($user,$pass,$epost,$nyhetsbrev);
check_pass_langd($pass);
check_pass($pass,$pass2);
check_epost($epost);
check_hemsida($hemsida);
check_no_error($user,$pass,$fornamn,$efternamn,$stad,$epost,$msn,$skype,$hemsida,$nyhetsbrev);

}
else {
	
	// Sätt variabler för tomt formulär
	for ($i=0; $i<4; $i++) {
	$back[$i] = "";
	}
	
	}
	//Error log
	$error_list[0] = "Alla fält är inte infyllda";
	$error_list[1] = "Användarnamnet är upptaget";
	$error_list[2] = "Lösenordet måste vara längre än 5 tecken";
	$error_list[3] = "Lösenorden stämmer inte överrens";
	$error_list[4] = "Svaret du angav var fel";
	$error_list[5] = "E-post adressen verkar vara felaktig";
	$error_list[6] = "Hemside adressen verkar vara felaktig";

 
?>

<?php

// skriver ut eventuella fel
if (isset($reg_error)){

  echo "Något blev fel:<br>\n";
  echo "<ul>\n";
  for ($i=0; $i<sizeof($reg_error); $i++) {
    echo "<li>{$error_list[$reg_error[$i]]}</li>\n";
  }
  echo "</ul>\n";

  $back[0] = stripslashes($_POST['user2']);
  $back[2] = stripslashes($_POST['name']);
  $back[3] = stripslashes($_POST['email']);

}

?>

<form action="profil.php" method="post">
Här kan du redigera din profil <?php echo $line['user']; ?><br /><br />
Nytt Lösenord:<br />
<input type="password" name="passwd1" class="field" value="" />*<br />
Repetera lösenord:<br />
<input type="password" name="passwd2" class="field" value="" />*<br />
Förnamn:<br />
<input type="text" name="fornamn" class="field" value="<? echo$line[fornamn]?>" /><br />
Efternamn:<br />
<input type="text" name="efternamn" class="field" value="<? echo$line[efternamn]?>" /><br />
Stad:<br />
<input type="text" name="stad" class="field" value="<? echo$line[stad]?>" /><br />
E-post:<br />
<input type="text" name="epost" class="field" value="<? echo$line[epost]?>" />*<br />
MSN:<br />
<input type="text" name="msn" class="field" value="<? echo$line[msn]?>" /><br />
Skype:<br />
<input type="text" name="skype" class="field" value="<? echo$line[skype]?>" /><br />
Hemsida:<br />
<input type="text" name="hemsida" class="field" value="<? echo$line[hemsida]?>" /><br />
Nyhetsbrev:<br />
<input name="nyhetsbrev" type="radio" value="ja" />Ja
<input name="nyhetsbrev" type="radio" value="nej" />Nej
<br /><br />
<input name="submit" type="submit" class="field" value="Spara" />
</form>
<?
}
?>
</body>
</html>

Så här ser funktionerna ut

function check_falt($user,$pass,$epost,$nyhetsbrev){
	//Kolla efter tomma fält
	if (empty($pass)  || empty($epost) || empty($nyhetsbrev)) {
	$reg_error[] = 0;
	}

}

function check_pass_langd($pass){
	//Kolla så att lösenorden är längre än 5 tecken
	if (strlen($pass)<5){
	$reg_error[] = 2;
	}
}

function check_pass($pass,$pass2){
	// Kolla så att lösenorden stämmer överrens
	if ($pass != $pass2) {
	$reg_error[] = 3;
	}
}

function check_epost($epost){
	// Kolla om e-post kan tänkas vara ok
	if (!preg_match('/^[-A-Za-z0-9_.]+[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,6}$/', $epost)) {
	$reg_error[] = 5;    
	}
}

function check_hemsida($hemsida){
	// Kolla om hemsida kan tänkas vara ok
	if (!empty($hemsida)){
	if (!preg_match('/^[www]+[.][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+)*[.][A-Za-z]{2,6}$/', $hemsida)) {
	$reg_error[] = 6;    
	}
	}

}

function check_no_error($pass,$fornamn,$efternamn,$stad,$epost,$msn,$skype,$hemsida,$nyhetsbrev){

	// Inga fel? Spara
	if (!isset($reg_error)) {
	
	$sql = "UPDATE $mem_table SET pass='$pass', fornamn='$fornamn', efternamn='$efternamn', stad='$stad', epost='$epost', msn='$msn', hemsida='$hemsida', nyhetsbrev='$nyhetsbrev', skype='$skype' WHERE ID ='10'";

	$send = mysql_query($sql) or die(mysql_error());
	
	echo "<br /><br />Välkommen: <strong>$user</strong><br />
			Du kan nu logga in och delta i medlemsktiviteterna!";
	
	
	}
	ob_end_flush();
}

jag la varje check i en egen funktion så att jag kan använda varje enskild check senare om det behövs. Men när jag väl ska spara min informatiojn blir det mysql fel, och jag vet inte riktigt varför. Man kanske inte alls kan göra på detta sätt?

mysql felet

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 'SET pass='', fornamn='', efternamn='', stad='', epost='', msn='', hemsida='', ny' at line 1
MatteMedlem sedan aug. 20002 975 inlägg
#2

I funktionen check_no_error() använder du variabeln $mem_table. Denna finns dock inte definierad.
Antingen får du globaldeklarera den, eller skicka in den som parameter.

TulorkMedlem sedan aug. 2004903 inlägg
#3

den finns deklarerad i conn.php som inkluderas i profil sidan, om jag inkluderar den igen i funktionen check_no_error så får jag felmeddelande eftersom jag då har använd db escapde två gånger

aasahMedlem sedan mars 20034 471 inlägg
#4

Tulork skrev:

den finns deklarerad i conn.php som inkluderas i profil sidan, om jag inkluderar den igen i funktionen check_no_error så får jag felmeddelande eftersom jag då har använd db escapde två gånger

Jo, fast den syns inte i funktionen.

$five = 5;

function addFive($i) {
   return ($i + $five);
}

$i = 1;
echo addFive($i);  ===> 1

Varför? Jo därför att i addFive är $five inte definierad och tolkas därför som 0. För att använda den globala variabelns värde måste du antingen slänga med $five som en av inparametrarna eller skriva:

function addFive($i) {
   global $five; // Använd värdet på den globala variabeln
   return ($i + $five);
}
127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)