Система за регистрация - промяна на профил

sn1p3r

Registered
Здравейте, имам система за регистрация, но имам проблем с промяната на профила. Пробвах много варианти, които ми казаха, но няма ефект :\

Ще дам всички кодове от системата ми за регистрация:

Кода на Login.php

Код:
<?php
session_start();
require ("config.php");

$username = addslashes($_POST['username']);
$password = md5(addslashes($_POST['password']));

if($_SERVER['REQUEST_METHOD'] != "POST")
{
      header('Location: index.php');
}
if(isset($username) && isset($password))
{
$q = mysql_query("SELECT username, password FROM users WHERE username='$username' AND password='$password' LIMIT 1");
if(mysql_num_rows($q) == 1)
{
$user = mysql_fetch_assoc($q);
$_SESSION['username'] = $user['username'];
header('Location: index.php');
}
else
{
 $_SESSION[error] = "Грешно име или парола";
 header('Location: index.php');  
}

}


?>

Кода на Logout.php

Код:
<?php
session_start();

session_destroy();
header('Location: index.php');
exit();
?>

Кода на Reg.php

Код:
<?php
require ("Config.php");

if(isset ($_POST['reg']))
{
       $name = addslashes($_POST['username']);
       $pass1 = addslashes($_POST['pass1']);
       $pass2 = addslashes($_POST['pass2']);
       $email = addslashes($_POST['email']);
	   $ime = addslashes($_POST['ime']);
	   $grad = addslashes($_POST['grad']);
	   $godini = addslashes($_POST['godini']);
       
       
       if(strlen($name) > 4)
       {
        $q = mysql_query("SELECT username FROM users WHERE username='$name'LIMIT 1") or die (mysql_error()); 
		echo "Успешно регистриране";
        if(mysql_num_rows($q) > 0)
        {
         $error = "Заето потребителско име";
        }	
        else
        {
          if(strlen($pass1) >= 6)
          {
           if($pass1 == $pass2)
           {
            if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\.-][a-z0-9]+))*$",$email))
            {
             $error = "Невалиден емайл";
            }
            else
            {
              $newPass = md5($pass1);
            $query = "INSERT INTO users SET username='$name', password='$newPass', email='$email', ime='$ime', grad='$grad', godini='$godini', skype='$skype', icq='$icq', sait='$sait', interesi='$interesi'";
            mysql_query($query) or die(mysql_error());
            }

           }
            else
            {
             $error = "Паролите не съвпадат";
            }
          }
           else
           {
            $error = "Кратка парола";
           }
        }
       }
}

?>

Махнах формите за логин и регистрация да не пречат.

Кода на SQL

Код:
CREATE TABLE IF NOT EXISTS `users` (
  `user_id` int(5) NOT NULL AUTO_INCREMENT,
  `username` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `password` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `ime` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `grad` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
   `skype` varchar(25) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Няма информация',
  `icq` varchar(35) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Няма информация',
    `interesi` varchar(25) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Няма информация',
  `sait` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `opisanie` varchar(400) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'Няма сложено описание',
  PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=58 ;

Благодаря на всеки пробвал да ми помогне. :)
 
Ето това ти е заявката за регистрация.


PHP:
$query = "INSERT INTO users (username, password, email, ime, grad, godini, skype, icq, sait, interesi) VALUES ('$name', '$newPass', '$email', '$ime', '$grad', '$godini', '$skype', '$icq', '$sait', '$interesi')";
 
Код:
<?php
session_start();
include "config.php";
        if($_POST['post']){
        $ime= htmlspecialchars($_POST['ime']);
		$query = "INSERT INTO users (username, password, email, ime, grad, godini, skype, icq, sait, interesi) VALUES ('$name', '$newPass', '$email', '$ime', '$grad', '$godini', '$skype', '$icq', '$sait', '$interesi')";
        $result = mysql_query($query) or die (mysql_error());
        echo "<center><h3>Профила е редактирах Успешно!</h3></center>";
}
?>
	<form method="post" action="index.php">
	<table border="0" width="100%" style="font: bold 15px arial; color: rgb(157, 184, 17); padding-top: 5px; text-align: center;">
	<tbody>
        <tr><td>Име: </td><td><input type="text" name="ime"></td></tr>
        <tr><td></td><td><input type="submit" name="post" value="Добави">
    </tbody>
    </table>


Правя това, но като дам edit.php?id=1 и променя името не ми го променя на профила, а без ?id=1 само edit.php променя всички останали освен профила, в който съм.
 
В заявката за регистрация имаш godini, но в таблицата users няма такава колона.

@eddyy93
Дали ще се използва SET синтаксиса, или стандартния SQL, няма особено значение, резултата е един и същ. Проблема с тази заявка е липсващата колона godini в таблицата.
 
Имам я в SQL имам и още няколко просто като дадох SQL файла махнах някои, които не искам да се използват при промяна на профила
 
exec прав си, че липсва това поле. А колкото до SET никога не съм го ползвал за вкарване на резултати, а само за update и не знаех, че работи и по този начин.


Това ти е за update на полето "ime" ..

Код:
<?php
session_start();
include "config.php";
        if($_POST['post']){
        $ime= htmlspecialchars($_POST['ime']);
		$query = "UPDATE users SET ime='$ime' WHERE username='$_SESSION['username']' ";
        $result = mysql_query($query) or die (mysql_error());
        echo "<center><h3>Профила е редактирах Успешно!</h3></center>";
}
?>
	<form method="post" action="index.php">
	<table border="0" width="100%" style="font: bold 15px arial; color: rgb(157, 184, 17); padding-top: 5px; text-align: center;">
	<tbody>
        <tr><td>Име: </td><td><input type="text" name="ime"></td></tr>
        <tr><td></td><td><input type="submit" name="post" value="Добави">
    </tbody>
    </table>
 
Код:
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in C:\xampp\htdocs\library\new\include\members\edit2.php on line 6
 
PHP:
$query = "UPDATE users SET ime='$ime' WHERE username='".$_SESSION['username']."' ";

Но най-добре е при такива заявки да използваш user_id, а не потребителското име.

1. MySQL ще открие много по-бързо кой точно ред от таблицата трябва да се обнови (вярно, че разликата може да е от порядъка на милисекунди, но все пак).

2. По-голяма сигурност - работиш с числа, филтрираш до integer и след това вкарваш в заявката. Така забравяш за простотийте на пишман хакерите:

PHP:
//обаче нямам идея дали запазваш user_id в сесията
$user_id = (int) $_SESSION['user_id'];

$query = "UPDATE users SET ime='$ime' WHERE user_id = '".$user_id."' ";
 
exec каза:
PHP:
$query = "UPDATE users SET ime='$ime' WHERE username='".$_SESSION['username']."' ";

Но най-добре е при такива заявки да използваш user_id, а не потребителското име.

1. MySQL ще открие много по-бързо кой точно ред от таблицата трябва да се обнови (вярно, че разликата може да е от порядъка на милисекунди, но все пак).

2. По-голяма сигурност - работиш с числа, филтрираш до integer и след това вкарваш в заявката. Така забравяш за простотийте на пишман хакерите:

PHP:
//обаче нямам идея дали запазваш user_id в сесията
$user_id = (int) $_SESSION['user_id'];

$query = "UPDATE users SET ime='$ime' WHERE user_id = '".$user_id."' ";

По принцип тези неща се правят, когато базата данни е релационна. Съмнявам се неговата да е релационна.
 
relax4o каза:
По принцип тези неща се правят, когато базата данни е релационна. Съмнявам се неговата да е релационна.

:wink:
Като цяло не знам какво и как прави, но поне за тази конкретна таблица (дал е структурата малко по-нагоре), има:
[sql] `user_id` int(5) NOT NULL AUTO_INCREMENT, [/sql]
 
Е, да, не му пречи при вход да запазва и ID-то.
Лично аз не бих създал още една отделна сесия затова. Бих си направил функция, която да взима ID-то според името, но въпрос на принцип, структура и ВКУС.
 
Значи направих го

Код:
	 <?php
session_start();
include "config.php";
        if($_POST['post']){
        $ime= htmlspecialchars($_POST['ime']);
        $query = "UPDATE users SET ime='$ime' WHERE username='{$_SESSION['username']}'";
        $result = mysql_query($query) or die (mysql_error());
        echo "<center><h3>Профила е редактирах Успешно!</h3></center>";
}
?>
   <form method="post" action="index.php">
   <table border="0" width="100%" style="font: bold 15px arial; color: rgb(157, 184, 17); padding-top: 5px; text-align: center;">
   <tbody>
        <tr><td>Име: </td><td><input type="text" name="ime"></td></tr>
        <tr><td></td><td><input type="submit" name="post" value="Добави">
    </tbody>
    </table>

И сега както преди не обновява името :( Пиша edit.php?id=1 променям и не го е обновило пробвах само edit.php (преди така сменяше на всички потребители) и не променя никъде нищо :(
 
Еми искам да променя името от регистрацията. Направих това, което казахте всички, но пак не става :\
 
Добре ти като администратор ли се явяваш или като обикновен потребител, който е дал да промени профила си ?
 
sn1p3r каза:
като обикновен потребител дал промяна на профил.

Ами тогава защо аджеба си задал тази глупост action="index.php". Ако този код ти е в edit.php то задай на action edit.php.
 
Добре стана :) Но мога да променям всички профили. Може ли да ми кажеш как да направя като цъкнеш Промяна и да си зададе твоето ?id= и не като смениш числото да променяш чуждото име.
 

Back
Горе