توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : اضافه کردن ای دی منحصر بفرد به دیتابس
mirmohsen
May 27th, 2016, 19:41
سلام. کد زیر رو مشاهده کنید.
طبق این کد به دیتابس سه مقدار adress,score,send اضافه میشه. میخام یهid منحصربفرد هم به دیتابس اضافه بشه به هر ردیف.چه باید بکنم.لطفا کمک کنید
$result = mysql_query("SELECT address FROM users WHERE address='$address'");
$number = mysql_num_rows($result);
if($number==1){
$go = mysql_query("SELECT address FROM users WHERE score>0 and address<>'$address' and address<>'unknown' order by rand()");
$data=mysql_fetch_array($go);
$input=$data;
$rand_keys = array_rand($input, 2);
$numberd=mysql_num_rows($go);
if($numberd>=1){
$addr=$input[$rand_keys[0]];
mysql_query("UPDATE `users` SET score =score + 1 where address = '$address';");
mysql_query("UPDATE `users` SET sent =sent + 1 where address = '$addr';");
mysql_query("UPDATE `users` SET score =score - 1 where address = '$addr';");
echo '<script>self.parent.location="http://';echo $addr;echo'"</script>';
}else{
mysql_query("UPDATE `users` SET score =score + 1 where address = '$address';");
echo '<script>self.parent.location="http://localhost"</script>';
};
}else{
$go = mysql_query("SELECT address FROM users WHERE score>0 and address<>'$address' and address<>'unknown' order by rand()");
$data=mysql_fetch_array($go);
$input=$data;
$rand_keys = array_rand($input, 2);
$numberd=mysql_num_rows($go);
if($numberd>=1){
$addr=$input[$rand_keys[0]];
mysql_query("INSERT INTO users VALUES ('$address',1,0)");
mysql_query("UPDATE `users` SET sent =sent + 1 where address = '$addr';");
mysql_query("UPDATE `users` SET score =score - 1 where address = '$addr';");
echo '<script>self.parent.location="http://';echo $addr;echo'"</script>';
}else{
mysql_query("INSERT INTO users VALUES ('$address',1,0)");
echo '<script>self.parent.location="http://www.localhost"</script>';
};
};
miladtnt
May 27th, 2016, 20:07
باید از دیتابیس
id رو از نوع int کنین و بعد بهش primary و auto increasment رو بدین
خودش اتومات یکی یکی بالا میره و نمیتونه دوتا ایدی با یک عدد توش باشه
mirmohsen
May 27th, 2016, 20:12
باید از دیتابیس
id رو از نوع int کنین و بعد بهش primary و auto increasment رو بدین
خودش اتومات یکی یکی بالا میره و نمیتونه دوتا ایدی با یک عدد توش باشه
ممنون. اینکارو کردم اما دیه خودش اون سه تا مورد رو اضافه نمیکنه.نمی دونم مشکل از کجاس
T.Toosi
May 27th, 2016, 20:12
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT K
بجای tableName اسم تیبل خودتون قرار دهید.
mirmohsen
May 27th, 2016, 20:16
ALTER TABLE tableName ADD id MEDIUMINT NOT NULL AUTO_INCREMENT K
بجای tableName اسم تیبل خودتون قرار دهید.
به کجای کد اضافه کنم؟ ببخشیدا
miladtnt
May 27th, 2016, 20:17
ممنون. اینکارو کردم اما دیه خودش اون سه تا مورد رو اضافه نمیکنه.نمی دونم مشکل از کجاس
اگه mysql تون ورژن 5.6 هست باید دقت کنین هیچ ستونی رو خالی نزارید چون ارور میده
دقت کنین وقتی insert میکنین باید value اول رو خالی بزارید چون مال ایدی هست و از value I های بعدی شروع به INSERT کنین ( ایدی رو هم بیارین ستون اولی)
از دستور MYSQL_ERROR استفاده کنین ببینین مشکلتون از کجا هست که INSERT نمیشه بهتون میگه
mirmohsen
May 27th, 2016, 20:46
ببینید دوستان این کد رو ببینید:
mysql_query("INSERT INTO users VALUES ('$address',1,0)");
الان سه تا رو insert میکنه دیتابس.چیکار کنم که ای دی هم خوادکار و بترتیب اضافه کنه؟کل مشکل من اینه
mirmohsen
May 28th, 2016, 12:07
کسی جوابگو نیست ایا؟
iHSG
May 28th, 2016, 12:12
کسی جوابگو نیست ایا؟
دوست عزیز دوستان پاسخ کامل رو دادن.
شما فقط کافیه وارد phpMyAdmin بشید و برای تیبل users یه ستون دیگه به نام id با نوع int و خاصیت auto increment بسازید.
از این به بعد همین کد INSERT رو که اجرا کنید خودکار یه آیدی منحصر به فرد هم از هر ردیف در ستون id که ساختید ساخته میشه.
mirmohsen
May 28th, 2016, 12:14
نمیشه اخه.امتحان کردم. insert نمیشه.باید در کد id هم معرفی بشه شاید
iHSG
May 28th, 2016, 12:15
باید کوئری INSERT رو اینطوری بنویسید:
mysql_query("INSERT INTO users (value1, value2, value3) VALUES ('$address',1,0)");
و به جای value1 تا value3 اسم اون ستون هایی که قراره تغییر کنه رو بنویسید.
mirmohsen
May 28th, 2016, 12:30
نمیشه در همین کد id هم معرفی بشه؟ اخه من این کارو کردم فقط ای دی 1 وارد میشه و بفیه رو insert نمیکنه
iHSG
May 28th, 2016, 12:38
نمیشه در همین کد id هم معرفی بشه؟ اخه من این کارو کردم فقط ای دی 1 وارد میشه و بفیه رو insert نمیکنه
میشه به جای یکی از اون value هم id رو زد.
اما تا اون جایی که من می دونم وقتی id زده نشه خودش خودکار انتخاب میشه اینکه چرا برای شما فقط اولی رو INSERT میکنه عجیبه.
برای فهمیدن آخرین آیدی اضافه شده هم می تونید از LAST_INSERT_ID() به جای مقدار ستون id استفاده کنید.
mirmohsen
May 28th, 2016, 12:41
یعنی به این صورت:
mysql_query("INSERT INTO users (id, value1, value2, value3) VALUES (LAST_INSERT_ID(),'$address',1,0)");
vpsman
May 28th, 2016, 12:57
دوست عزیز راهش همینه
باید از دیتابیس
id رو از نوع int کنین و بعد بهش primary و auto increasment رو بدین
خودش اتومات یکی یکی بالا میره و نمیتونه دوتا ایدی با یک عدد توش باشه
شما وقتی این کارو انجام دادی کافیه بصورت عادی اینسرت هات رو انجام بدی خودش خودکار یکی یکی زیاد میکنه
mirmohsen
May 28th, 2016, 13:01
ببین شما یه بار کد اصلی رو که در پست اول دادم نگاه کنید.همه کارایی که دوستان عزیزم گفتن انجام دادم. اما جواب نمیده.یعنی خودش نمیتونه تشخیص بده که چه ای دی اضافه کنه به دیتابس.
vpsman
May 28th, 2016, 13:06
ببین شما یه بار کد اصلی رو که در پست اول دادم نگاه کنید.همه کارایی که دوستان عزیزم گفتن انجام دادم. اما جواب نمیده.یعنی خودش نمیتونه تشخیص بده که چه ای دی اضافه کنه به دیتابس.
شما مطمعن هستید اینو تنظیم کردید؟
auto increasment
ضمنا الان فیلد ای دی چطوری داره پر میشه یه اسکرین شات قرار بدید
mirmohsen
May 28th, 2016, 13:13
اصلا پر نمیشه.حتما من باید مقدار ای دی رو یک عدد اختصاص بدم مثلا 2 یا 1 تا بقیه اطلاعات وارد دیتابس بشه یعنی اینطوری:
mysql_query("INSERT INTO users (id, address, score, send) VALUES (2,'$address',1,0)");
بلهauto increasment کردم. اینم اسکرین شات از نحوه ساخت:
31538
vpsman
May 28th, 2016, 13:21
id نباید تو کويری بیاد
mysql_query("INSERT INTO users (id, address, score, send) VALUES (2,'$address',1,0)");
این شکلی کنش
mysql_query("INSERT INTO users (address, score, send) VALUES ('$address','1','0')");
mirmohsen
May 28th, 2016, 13:25
کردم. همه کار.هر جور امتحان کردم. نشد.دستت درد نکنه ممنونم
mirmohsen
May 28th, 2016, 15:16
مشکل رو متوجه شدم.باید دیتابس رو به صورت ENGINE=InnoDB سیو کنم.ولی مشکل اینه که اسکریپ بر پایه ENGINE=MyISAM هستش و وقتی تغییر بدم اسکریپ خوب کار نمیکنه
mahdikhanzadi
May 29th, 2016, 13:28
مشکل رو متوجه شدم.باید دیتابس رو به صورت ENGINE=InnoDB سیو کنم.ولی مشکل اینه که اسکریپ بر پایه ENGINE=MyISAM هستش و وقتی تغییر بدم اسکریپ خوب کار نمیکنه
شما کافیه که به phpmyadmin برید و جدول مورد نظر خودتون رو انتخاب کنید. بعد add new column رو بزنید و نام ستون دلخواه رو تایپ کنید و در اخر ثبت کنید تا یک ستون به جدول شما اظافه بشه. موفق باشید.
mirmohsen
May 29th, 2016, 21:01
دوستان عزیز. مشکلم هنوز حل نشد. کل مشکل من اینه:
ببین دوستان گفتن که id رو ازدیتابس روی auto increasment تنظیم کن و خودش خودکار اطلاعاتی که دخیر میشه رو بترتیب شماره بندی میکنه یعنی دستور زیرو:
mysql_query("INSERT INTO users (value1, value2, value3) VALUES ('$address',1,0)");
ولی مشکل اینجاس که فقط یک مورد رو insert میکنه و من فک میکنم چون نمیتونه اطلاعات ای دی قبلی رو دریافت کنه سپس insert نمیکنه اطلاعات جدیدو.
حالا من میخام یه کدی باشه که توی فایل php بزارم که اخرین id رو پیدا کنه بعد برای اطلاعات جدید یکی بهش اضافه کنه؟
کمک میکنید
slash_70
May 30th, 2016, 01:12
اگر میبینید مشکل دارید و auto increment مناسب کار شما نیست ، میشه آیدی ها رو خودتون وارد کنید
آیدی ها رو هم برای این که صعودی باشه و یکتا ، از تابع time() استفاده کنید. اون رو توی یه متغیر بزارید و ازش استفاده کنید
حالا هم ID هاتون یکتا هست و هم اینکه میدونید چه آیدی ای استفاده کردید
البته اگر فاصله اضافه کردن رکورد هاتون کمتر از یه ثانیه هست از تابع microtime() استفاده کنید
mirmohsen
May 30th, 2016, 01:21
من خودم نبايد دستي وارد کنم اي دي رو،يه اسکريپ دارم خودش خودکار insert ميکنه و ميخام خودش تشخيص بده id داده قبلي چي بوده و يکي اضافه کنه.کد اسکريپ در اولين پست همين موضوع هست،يه کمک کنيد،خيلي مغزمو درگير کژده
iHSG
May 30th, 2016, 10:43
من خودم نبايد دستي وارد کنم اي دي رو،يه اسکريپ دارم خودش خودکار insert ميکنه و ميخام خودش تشخيص بده id داده قبلي چي بوده و يکي اضافه کنه.کد اسکريپ در اولين پست همين موضوع هست،يه کمک کنيد،خيلي مغزمو درگير کژده
دوست عزیز این مشکلی که شما میگید خیلی عجیبه اصلاً ربطی هم به InnoDB یا MyISAM بودن موتور دیتابیس نداره چون در هر دوش این امکان باید براحتی انجام بشه.
شما در یه هاست دیگه هم همین اسکریپتت رو تست کن اگه اون جا جواب گرفتی به احتمال زیاد مشکل در سرور هاست فعلی است.
mirmohsen
May 30th, 2016, 13:13
اصلا ببینید من الان کاری به دیتابس و موتورش ندارم. اون حرفی هم که زدم اشتباه بوده.الان حرف من اینه که تمام پست هایی که در این بخش ارسال شده رو نادیده بگیرید فقط پست اول منو نگاه کنید و اینکه یهتغغیری در اون کدایجاد بشه که خودش id قبلی رو ازدیتابس بگیره و داده جدید رو با id+1 ذخیره کنه.مشکل من اینه. کد اصلیش هم در زیر اومده:
$result = mysql_query("SELECT address FROM users WHERE address='$address'");
$number = mysql_num_rows($result);
if($number==1){
$go = mysql_query("SELECT address FROM users WHERE score>0 and address<>'$address' and address<>'unknown' order by rand()");
$data=mysql_fetch_array($go);
$input=$data;
$rand_keys = array_rand($input, 2);
$numberd=mysql_num_rows($go);
if($numberd>=1){
$addr=$input[$rand_keys[0]];
mysql_query("UPDATE `users` SET score =score + 1 where address = '$address';");
mysql_query("UPDATE `users` SET sent =sent + 1 where address = '$addr';");
mysql_query("UPDATE `users` SET score =score - 1 where address = '$addr';");
echo '<script>self.parent.location="http://';echo $addr;echo'"</script>';
}else{
mysql_query("UPDATE `users` SET score =score + 1 where address = '$address';");
echo '<script>self.parent.location="http://localhost"</script>';
};
}else{
$go = mysql_query("SELECT address FROM users WHERE score>0 and address<>'$address' and address<>'unknown' order by rand()");
$data=mysql_fetch_array($go);
$input=$data;
$rand_keys = array_rand($input, 2);
$numberd=mysql_num_rows($go);
if($numberd>=1){
$addr=$input[$rand_keys[0]];
mysql_query("INSERT INTO users VALUES ('$address',1,0)");
mysql_query("UPDATE `users` SET sent =sent + 1 where address = '$addr';");
mysql_query("UPDATE `users` SET score =score - 1 where address = '$addr';");
echo '<script>self.parent.location="http://';echo $addr;echo'"</script>';
}else{
mysql_query("INSERT INTO users VALUES ('$address',1,0)");
echo '<script>self.parent.location="http://www.localhost"</script>';
};
};