Проблем с вкарването на стойност в поле

nbacool2

Registered
Имам следния код:

PHP:
$username = trim($_POST['username']);
$password = $_POST['password'];
$email = trim($_POST['email']);

$sql = "SELECT user_name FROM users WHERE user_name = '" . $username . "'";

$connect = mysql_query($sql) or die(mysql_error());
$sql_insert = "INSERT INTO users (user_name, user_password, email, access_level) VALUES ('" . $username . "', '" . $password . "','" . $email . "', '1')";

    $insert_sql = mysql_query($sql_insert) or die(mysql_error());

    $sql_request = "SELECT user_id FROM users WHERE user_name = '" . $username . "'";

    $make_request = mysql_query($sql_request) or die(mysql_error());

    $id = mysql_fetch_field($make_request) or die(mysql_error());
    (string) $id = $id->user_id;
    $md5_id = md5($id);
    $sql2 = "UPDATE `users` SET `md5_id` = '" . $md5_id . "' WHERE `user_name` = '" . $username . "'";
    $sql2_req = mysql_query($sql2)or die(mysql_error());

Не мога да проумея защо на всеки потребител винаги дава една и cъща стойност на md5_id -d41d8cd98f00b204g9800998bcm8427e
 
Първо ни обясни знаеш ли за какво се ползва mysql_fetch_field(). Според кода ти виждам, че не знаеш. Та, когато селектираш имена на потребители очевидно не трябва да се ползва mysql_fetch_field()(прочети в php.net защо не трябва), а се ползва mysql_fetch_assoc() или ако държиш на обектите mysql_fetch_object()

Тези 3 реда:

PHP:
$id = mysql_fetch_field($make_request) or die(mysql_error());
(string) $id = $id->user_id;
$md5_id = md5($id);

аз бих ги написал така:

PHP:
$row = mysql_fetch_object($make_request) or die(mysql_error());
$md5_id = md5($row->user_id);
 
Би ли казал по-точно какво имаш предвид къде греша? Ползвам mysql_fetch_field, защото е само едно поле, а с mysql_fetch_array, mysql_fetch_assoc имах проблеми с единични стойности.

Изпробвах твоя вариант, обаче пак дава един и същ md5_id на всички. Реших да видя каква всъщност е тази стойност като махнах md5 хеша и въщност не дава нищо - просто празно поле??!

Явно има някъде грешка, но прегледах кода няколко пъти и всичко ми изглежда наред :| :o
 
Можеш да прескочиш SELECT-a с който взимаш user_id, както и да опростиш максимално UPDATE-a

[sql]
$sql = "INSERT into users ......";

$sql = "UPDATE `users` set `md5_id` = MD5(`user_id`) where `user_id` = LAST_INSERT_ID()";
[/sql]

При този начин:

1. Не минаваш през РНР за да съдзаваш md5 hash, това го може и MySQL.

2. Не обновяваш по username и не се занимаваш да търсиш кое му е id-то на най-новия потребител, това отново MySQL може да си го открие самостоятелно.
 
mysql_fetch_field връща информация за полето, а не неговата стойност
http://bg.php.net/mysql_fetch_field

Returns an object containing field information. The properties of the object are:

* name - column name
* table - name of the table the column belongs to
* max_length - maximum length of the column
* not_null - 1 if the column cannot be NULL
* primary_key - 1 if the column is a primary key
* unique_key - 1 if the column is a unique key
* multiple_key - 1 if the column is a non-unique key
* numeric - 1 if the column is numeric
* blob - 1 if the column is a BLOB
* type - the type of the column
* unsigned - 1 if the column is unsigned
* zerofill - 1 if the column is zero-filled
 
exec каза:
Можеш да прескочиш SELECT-a с който взимаш user_id, както и да опростиш максимално UPDATE-a

[sql]
$sql = "INSERT into users ......";

$sql = "UPDATE `users` set `md5_id` = MD5(`user_id`) where `user_id` = LAST_INSERT_ID()";
[/sql]

При този начин:

1. Не минаваш през РНР за да съдзаваш md5 hash, това го може и MySQL.

2. Не обновяваш по username и не се занимаваш да търсиш кое му е id-то на най-новия потребител, това отново MySQL може да си го открие самостоятелно.

Благодаря много! Сега работи както трябва. Все пак искам да разбера защо с моя пример(а и с примера на relax4o) не се получаваше.
 
nbacool2 каза:
exec каза:
Можеш да прескочиш SELECT-a с който взимаш user_id, както и да опростиш максимално UPDATE-a

[sql]
$sql = "INSERT into users ......";

$sql = "UPDATE `users` set `md5_id` = MD5(`user_id`) where `user_id` = LAST_INSERT_ID()";
[/sql]

При този начин:

1. Не минаваш през РНР за да съдзаваш md5 hash, това го може и MySQL.

2. Не обновяваш по username и не се занимаваш да търсиш кое му е id-то на най-новия потребител, това отново MySQL може да си го открие самостоятелно.

Благодаря много! Сега работи както трябва. Все пак искам да разбера защо с моя пример(а и с примера на relax4o) не се получаваше.

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

@exec очаквах автора да провери в php.net за какво служи mysql_fetch_field().
 
relax4o каза:
@exec очаквах автора да провери в php.net за какво служи mysql_fetch_field().

Спокойно, има шанс, той все още не е забелязал второто ми мнение :)
 

Back
Горе