PDA

View Full Version : مشکل با insert کردن اطلاعات به Database



hamidhassas
چهارشنبه 14 دی 1390, 16:51 عصر
من یک فرم ساختم و اون رو به یک فایل متصل کردم که در اون کد ریختن اطلاعات به دیتا بیس هست
مشکل اینجاست که به دیتا بیس متصل میشه ولی چیزی وارد دیتا بیس نمیشه و پیغام خطا میده

کد من اینه




<?php
$con=mysql_connect("localhost","root","");
mysql_select_db("database");
$Subject_1=$_POST['tSubject'];
$Text_1=$_POST['tText'];
$Link_1=$_POST['tLink'];
$in_sql="insert into news values ('','$Subject_1','$Text_1','$Link_1')";
print $in_sql;
$tab=mysql_query($in_sql);
?>



پیغام خطا من هم




Notice: Undefined index:tSubject in C:\xampp\htdocs\test\config.php on line 11

Notice: Undefined index:tSubject in C:\xampp\htdocs\test\config.php on line 12

Notice: Undefined index:tSubject in C:\xampp\htdocs\test\config.php on line 13



که مربوط به



$Subject_1=$_POST['tSubject'];
$Text_1=$_POST['tText'];
$Link_1=$_POST['tLink'];



کد بالا کار می کرد ولی یک دفعه از کار افتاد اون هم بعد از اینکه 40 رکورد در دیتا بیس ضبط شد.

می خواستم بدونم مشکه چیه؟

ravand
چهارشنبه 14 دی 1390, 22:11 عصر
كد شما در ظاهر هم اشكال داره.
اينطوري بنويس :

mysql_query("INSERT INTO form (`ID`,`URL`,`tfname`) VALUES
('ID','$des' ,'$tfname')")or die(mysql_error());

ببين من به كدم براي اينكه اگه موردي اشتباه بود اخطار بده چيكار كردم؟

or die(mysql_error());
براي براي ديتابيست و براي اتصال mysql_connect و براي ارسال كوئري ازش استفاده كن تا اخطار رو درست بهت نشون بده.
و مورد ديگه :
بهتره تمام فيلدهاي جدول رو بنويسي.

امیـرحسین
چهارشنبه 14 دی 1390, 22:18 عصر
به متن خظا توجه کنید کارتون خیلی سریعتر راه میافته..
خطای Notice: Undefined index یعنی عنصر تعریف نشده‌ای از یک آرایه استفاده شده. یعنی اون tSubject وجود نداره. خطا از نوع Notice هست و تاثیری در روند برنامه نداره. این یعنی INSERT نشدن ربطی به این خطا نداره. کوئری رو کامل بنویسید یعنی قبل از VALUES لیست فیلدها رو هم نام ببرید و مشابه روشی که گفتند خطای MySQL رو چک کنید.

hamidhassas
پنج شنبه 15 دی 1390, 01:02 صبح
من از php و اصلاحات اون سر در نمیارم فقط کد شما را کاملا به صورت زیر نوشتم اگه امکان داره بیشتر توضیح بدین و کد را کامل برام بنویسید


<?php
$con=mysql_connect("localhost","root","");
mysql_select_db("database");
$Subject_1=$_POST['tSubject'];
$Text_1=$_POST['tText'];
$Link_1=$_POST['tLink'];
mysql_query("INSERT INTO *اسمی جدول* (`IDاینجا نمیدونم چی هست و مال کجاست`) VALUES (`IDاینجا هم نمیدونم چی هست و مال کجاست`)")or die(mysql_error());
print $in_sql;
$tab=mysql_query($in_sql);
?>

MMSHFE
پنج شنبه 15 دی 1390, 10:03 صبح
با سلام، دوست گرامی، اینطور که از کد شما فهمیدم، جدول شما به نام news و دارای چهار فیلد هست به اسامی id و subject و text و link که به احتمال زیاد، id کلید اصلی و Auto Increment هست. خوب حالا برای درج رکورد جدید، باید اینطوری بنویسید:


<?php
if(isset($_POST['tSubject']) && isset($_POST['tText'] && isset($_POST['tLink'])) {
mysql_connect('localhost', 'root', '');
mysql_select_db('database');
mysql_query('SET NAMES \'utf8\'');
$Subject = mysql_real_escape_string($_POST['tSubject']);
$Text = mysql_real_escape_string($_POST['tText']);
$Link = mysql_real_escape_string($_POST['tLink']);
mysql_query("INSERT INTO `news` (`subject`,`text`,`link`) VALUES ('{$Subject}','{$Text}','{$Link}')");
echo mysql_affected_rows() > 0 ? 'News stored successfully' : 'Error : '.mysql_error();
}
?>

توی کد فوق به چند نکته باید دقت کنید:
1- پرانتز اول در دستور MySQL مربوط به INSERT شامل اسامی فیلدهای جدول هست که میخواین بهشون مقدار بدین. همونطور که میبینید، اسم فیلد id ذکر نشده چون بطور خودکار مقدار میگیره
2- پرانتز دوم در دستور MySQL مربوط به INSERT شامل مقادیری هست که میخوایم به فیلدهای مشخص شده در پرانتز اول نسبت بدیم و باید تعداد و ترتیبشون با تعداد و ترتیب فیلدهای پرانتز اول متناظر باشه.
3- درمورد مقادیر آرایه POST_$ بهتره قبلش با isset بررسی کنید و مطمئن بشین که مقادیر فرم برای این صفحه ارسال شدن یا نه. خطایی که دریافت میکردین، مربوط به عدم ارسال مقادیر بوده و احتمالاً مستقیماً این صفحه رو ازطریق بخش آدرس مرورگر درخواست کردین درحالی که این صفحه، باید توسط فرم دریافت اطلاعات و با کلیک روی دکمه ارسال اطلاعات درخواست بشه تا مقادیر دریافت شده از کاربر، توسط فرم برای این صفحه ارسال بشه.
4- بعد از اینکه مطمئن شدین صفحه درست کار میکنه و کدها رو درست نوشتین، بهتره mysql_error رو از کد حذف کنید تا پیغامهای خطای MySQL به بازدیدکنندگان سایت نشون داده نشه چون ممکنه بخشی از ساختار دیتابیس شما لو بره و این برای یک هکر، غنیمت خیلی بزرگی محسوب میشه.
5- ضمناً اسامی فیلدها و جداول و... رو توی دستورات MySQL توی گیومه برعکس (` کلید کنار عدد 1 و بالای Tab بدون نگه داشتن کلید Shift) و مقادیر رو بین گیومه تگ (' کلید کنار Enter بدون نگه داشتن کلید Shift) بگذارین.
موفق باشید.

ravand
پنج شنبه 15 دی 1390, 11:43 صبح
ببخشيد آقاي شهركي .
من واقعا نميتونم بفهمم اين كدهاي من چرا كار نميكنه.
آخه هميشه از همين روش استفاده ميكردم ولي الان كار نميكنه. شايدم چون مخم داغ كرده نمي فهمم چي كار كردم :لبخند:

<?php
$con=mysql_connect('localhost','root','')or die(mysql_error());
$db=mysql_select_db('database')or die(mysql_error());
$Subject_1=$_POST['tSubject'];
$Text_1=$_POST['tText'];
$Link_1=$_POST['tLink'];
mysql_query("SET CHARACTER SET utf8",$con);
$insert=mysql_query("INSERT INTO news (`tSubject`,`tText`,`tLink`) VALUES
('$Subject_1','$Text_1','$Link_1')")or die(mysql_error());
$tab=mysql_query($insert,$con);
if($tab==false){
die("error with query\r\n");
}
$num=mysql_affected_rows($con);
if($num==1){
echo ".ارسال شد";
}
else
if($num == 0){
echo".ارسال نشد ";
}
mysql_close($con);
?>
البته اينم بگم كه مطالبي كه ارسال ميكنم به ديتابيس ارسال ميشه ولي يه خطا ميده:

error with query

MMSHFE
پنج شنبه 15 دی 1390, 11:48 صبح
میشه با mysql_error خطا رو بررسی کنید و بگین چه خطایی دریافت میکنید؟

mtchabok
پنج شنبه 15 دی 1390, 13:23 عصر
اینو امتحان کنید :

<?php
$con=mysql_connect('localhost','root','')or die(mysql_error());
$db=mysql_select_db('database')or die(mysql_error());
mysql_query("SET CHARACTER SET utf8",$con);
$Subject_1=empty($_POST['tSubject'])?'':mysql_real_escape_string(trim($_POST['tSubject']),$con);
$Text_1=empty($_POST['tText'])?'':mysql_real_escape_string(trim($_POST['tText']),$con);
$Link_1=empty($_POST['tLink'])?'':mysql_real_escape_string(trim($_POST['tLink']),$con);

$insert="INSERT INTO news (`tSubject`,`tText`,`tLink`) VALUES ('$Subject_1','$Text_1','$Link_1')";
$tab=mysql_query($insert,$con) or die(mysql_error());;
if($tab==false){
die("error with query\r\n");
}
$num=mysql_affected_rows($con);
if($num==1){
echo ".ارسال شد";
}
else
if($num == 0){
echo".ارسال نشد ";
}
mysql_close($con);
?>

hamidhassas
شنبه 17 دی 1390, 11:34 صبح
با سلام، دوست گرامی، اینطور که از کد شما فهمیدم، جدول شما به نام news و دارای چهار فیلد هست به اسامی id و subject و text و link که به احتمال زیاد، id کلید اصلی و Auto Increment هست. خوب حالا برای درج رکورد جدید، باید اینطوری بنویسید:


<?php
if(isset($_POST['tSubject']) && isset($_POST['tText'] && isset($_POST['tLink'])) {
mysql_connect('localhost', 'root', '');
mysql_select_db('database');
mysql_query('SET NAMES \'utf8\'');
$Subject = mysql_real_escape_string($_POST['tSubject']);
$Text = mysql_real_escape_string($_POST['tText']);
$Link = mysql_real_escape_string($_POST['tLink']);
mysql_query("INSERT INTO `news` (`subject`,`text`,`link`) VALUES ('{$Subject}','{$Text}','{$Link}')");
echo mysql_affected_rows() > 0 ? 'News stored successfully' : 'Error : '.mysql_error();
}
?>

توی کد فوق به چند نکته باید دقت کنید:
1- پرانتز اول در دستور MySQL مربوط به INSERT شامل اسامی فیلدهای جدول هست که میخواین بهشون مقدار بدین. همونطور که میبینید، اسم فیلد id ذکر نشده چون بطور خودکار مقدار میگیره
2- پرانتز دوم در دستور MySQL مربوط به INSERT شامل مقادیری هست که میخوایم به فیلدهای مشخص شده در پرانتز اول نسبت بدیم و باید تعداد و ترتیبشون با تعداد و ترتیب فیلدهای پرانتز اول متناظر باشه.
3- درمورد مقادیر آرایه POST_$ بهتره قبلش با isset بررسی کنید و مطمئن بشین که مقادیر فرم برای این صفحه ارسال شدن یا نه. خطایی که دریافت میکردین، مربوط به عدم ارسال مقادیر بوده و احتمالاً مستقیماً این صفحه رو ازطریق بخش آدرس مرورگر درخواست کردین درحالی که این صفحه، باید توسط فرم دریافت اطلاعات و با کلیک روی دکمه ارسال اطلاعات درخواست بشه تا مقادیر دریافت شده از کاربر، توسط فرم برای این صفحه ارسال بشه.
4- بعد از اینکه مطمئن شدین صفحه درست کار میکنه و کدها رو درست نوشتین، بهتره mysql_error رو از کد حذف کنید تا پیغامهای خطای MySQL به بازدیدکنندگان سایت نشون داده نشه چون ممکنه بخشی از ساختار دیتابیس شما لو بره و این برای یک هکر، غنیمت خیلی بزرگی محسوب میشه.
5- ضمناً اسامی فیلدها و جداول و... رو توی دستورات MySQL توی گیومه برعکس (` کلید کنار عدد 1 و بالای Tab بدون نگه داشتن کلید Shift) و مقادیر رو بین گیومه تگ (' کلید کنار Enter بدون نگه داشتن کلید Shift) بگذارین.
موفق باشید.

ممنون
دوست عزیز در برنامه Adobe Dreamweaer CS5 از خط اول کد شما ایراد میگیره و وقتی هم اجرا میکنم پیغام زیر را میدهد.
Parse: syntax error,unexpected T_BOOLEAN_AND, expecting ',' or ')' in c:\xampp\htdocs\test\config.php on line 9

hamidhassas
شنبه 17 دی 1390, 11:44 صبح
اینو امتحان کنید :

<?php
$con=mysql_connect('localhost','root','')or die(mysql_error());
$db=mysql_select_db('database')or die(mysql_error());
mysql_query("SET CHARACTER SET utf8",$con);
$Subject_1=empty($_POST['tSubject'])?'':mysql_real_escape_string(trim($_POST['tSubject']),$con);
$Text_1=empty($_POST['tText'])?'':mysql_real_escape_string(trim($_POST['tText']),$con);
$Link_1=empty($_POST['tLink'])?'':mysql_real_escape_string(trim($_POST['tLink']),$con);

$insert="INSERT INTO news (`tSubject`,`tText`,`tLink`) VALUES ('$Subject_1','$Text_1','$Link_1')";
$tab=mysql_query($insert,$con) or die(mysql_error());;
if($tab==false){
die("error with query\r\n");
}
$num=mysql_affected_rows($con);
if($num==1){
echo ".ارسال شد";
}
else
if($num == 0){
echo".ارسال نشد ";
}
mysql_close($con);
?>

ممنون
فقط بعد از اجرای کد پیغام زیر داده میشود
Unknown column 'tSunject in 'field list'

hamidhassas
شنبه 17 دی 1390, 11:54 صبح
با سلام، دوست گرامی، اینطور که از کد شما فهمیدم، جدول شما به نام news و دارای چهار فیلد هست به اسامی id و subject و text و link که به احتمال زیاد، id کلید اصلی و Auto Increment هست. خوب حالا برای درج رکورد جدید، باید اینطوری بنویسید:


<?php
if(isset($_POST['tSubject']) && isset($_POST['tText'] && isset($_POST['tLink'])) {
mysql_connect('localhost', 'root', '');
mysql_select_db('database');
mysql_query('SET NAMES \'utf8\'');
$Subject = mysql_real_escape_string($_POST['tSubject']);
$Text = mysql_real_escape_string($_POST['tText']);
$Link = mysql_real_escape_string($_POST['tLink']);
mysql_query("INSERT INTO `news` (`subject`,`text`,`link`) VALUES ('{$Subject}','{$Text}','{$Link}')");
echo mysql_affected_rows() > 0 ? 'News stored successfully' : 'Error : '.mysql_error();
}
?>

توی کد فوق به چند نکته باید دقت کنید:
1- پرانتز اول در دستور MySQL مربوط به INSERT شامل اسامی فیلدهای جدول هست که میخواین بهشون مقدار بدین. همونطور که میبینید، اسم فیلد id ذکر نشده چون بطور خودکار مقدار میگیره
2- پرانتز دوم در دستور MySQL مربوط به INSERT شامل مقادیری هست که میخوایم به فیلدهای مشخص شده در پرانتز اول نسبت بدیم و باید تعداد و ترتیبشون با تعداد و ترتیب فیلدهای پرانتز اول متناظر باشه.
3- درمورد مقادیر آرایه POST_$ بهتره قبلش با isset بررسی کنید و مطمئن بشین که مقادیر فرم برای این صفحه ارسال شدن یا نه. خطایی که دریافت میکردین، مربوط به عدم ارسال مقادیر بوده و احتمالاً مستقیماً این صفحه رو ازطریق بخش آدرس مرورگر درخواست کردین درحالی که این صفحه، باید توسط فرم دریافت اطلاعات و با کلیک روی دکمه ارسال اطلاعات درخواست بشه تا مقادیر دریافت شده از کاربر، توسط فرم برای این صفحه ارسال بشه.
4- بعد از اینکه مطمئن شدین صفحه درست کار میکنه و کدها رو درست نوشتین، بهتره mysql_error رو از کد حذف کنید تا پیغامهای خطای MySQL به بازدیدکنندگان سایت نشون داده نشه چون ممکنه بخشی از ساختار دیتابیس شما لو بره و این برای یک هکر، غنیمت خیلی بزرگی محسوب میشه.
5- ضمناً اسامی فیلدها و جداول و... رو توی دستورات MySQL توی گیومه برعکس (` کلید کنار عدد 1 و بالای Tab بدون نگه داشتن کلید Shift) و مقادیر رو بین گیومه تگ (' کلید کنار Enter بدون نگه داشتن کلید Shift) بگذارین.
موفق باشید.

کد شما را به صورت زیر تغییر دادم جواب داد علت چی هست



<?php
//if(isset($_POST['tSubject']) && isset($_POST['tText'] && isset($_POST['tLink'])) {
mysql_connect('localhost', 'root', '');
mysql_select_db('database');
mysql_query('SET NAMES \'utf8\'');
$Subject = mysql_real_escape_string($_POST['tSubject']);
$Text = mysql_real_escape_string($_POST['tText']);
$Link = mysql_real_escape_string($_POST['tLink']);
mysql_query("INSERT INTO `news` (`subject`,`text`,`link`) VALUES ('{$Subject}','{$Text}','{$Link}')");
echo mysql_affected_rows() > 0 ? 'News stored successfully' : 'Error : '.mysql_error();
//}
?>

mtchabok
شنبه 17 دی 1390, 12:56 عصر
مشکلش فقط یه پرانتز بود :

<?php
if(isset($_POST['tSubject']) && isset($_POST['tText']) && isset($_POST['tLink'])) {
mysql_connect('localhost', 'root', '');
mysql_select_db('database');
mysql_query('SET NAMES \'utf8\'');
$Subject = mysql_real_escape_string($_POST['tSubject']);
$Text = mysql_real_escape_string($_POST['tText']);
$Link = mysql_real_escape_string($_POST['tLink']);
mysql_query("INSERT INTO `news` (`subject`,`text`,`link`) VALUES ('{$Subject}','{$Text}','{$Link}')");
echo mysql_affected_rows() > 0 ? 'News stored successfully' : 'Error : '.mysql_error();
}
?>

MMSHFE
شنبه 17 دی 1390, 17:11 عصر
آقا ممنون که کد رو اصلاح کردین. شرمنده بعضی اوقات اینقدر سؤالات زیاده که در اکثر موارد توی ادیتور درست و حسابی نمینویسم و از NotePad خود ویندوز استفاده میکنم واسه همین ممکنه پرانتز یا گیومه یا... جا بیفته. دوستان لطفاً زحمت بکشن این خطاهای T_STRING رو دیگه خودشون اصلاح کنن. قراره ایده بگیرین نه لقمه آماده :چشمک:
موفق باشید.

hamidhassas
شنبه 17 دی 1390, 17:30 عصر
آقا ممنون که کد رو اصلاح کردین. شرمنده بعضی اوقات اینقدر سؤالات زیاده که در اکثر موارد توی ادیتور درست و حسابی نمینویسم و از NotePad خود ویندوز استفاده میکنم واسه همین ممکنه پرانتز یا گیومه یا... جا بیفته. دوستان لطفاً زحمت بکشن این خطاهای T_STRING رو دیگه خودشون اصلاح کنن. قراره ایده بگیرین نه لقمه آماده :چشمک:
موفق باشید.
عزیز دلم ممنون از زحماتت
ولی یکی مثل من که آشنایی درستی از برنامه نویسی نداره و فقط میخواد کارش رو راه بندازه فکر کنم لقمه آماده بهتر باشده چون با همین لقمه آماده هست که کم کم یاد میگیره تا کاراش رو خودش انجام بده مگه نه؟؟؟؟؟

MMSHFE
شنبه 17 دی 1390, 17:47 عصر
چشم عزیز، خودم برات لقمه میگیرم :لبخند: قصه نخور :چشمک:
البته به شرطی که قول بدی خودتم تمرین کنی لقمه گرفتن رو یاد بگیری. بعدش هم به بقیه یاد بدی.

hamidhassas
شنبه 17 دی 1390, 18:04 عصر
به چشم هر چی شما بگی استاد
خودم هم دارم سعی میکنم
تازه شاگرد کلاس اولیم

persian-boy
شنبه 17 دی 1390, 20:08 عصر
دوستان عذر میخوام اینجا میپرسم

لطف میکنید بگین علامت سوال و دونقطه در این خط چه کار میکنن ؟ یا کلا کار این 2 تا کاراکتر چیه ؟


echo mysql_affected_rows() > 0 ? 'News stored successfully' : 'Error : '.mysql_error();

ravand
شنبه 17 دی 1390, 21:34 عصر
آقاي شهركي يه لقمه آماده هم براي ما بگير :لبخند:
آخرش اين فايل id.php رو راهنماييم نكردي چجوري بسازم چون بدجور توش گير كردم.


echo mysql_affected_rows() > 0 ? 'News stored successfully' : 'Error : '.mysql_error();

اين كد بررسي ميكنه كه آيا پرس و جو با موفقيت انجام شده يا نه؟

MMSHFE
یک شنبه 18 دی 1390, 09:40 صبح
ساختار : ? از سه قسمت تشکیل شده:
condition ? true statement : false statement
توی این ساختار، قسمت condition بررسی میشه و اگه درست باشه، قسمت true و درغیر اینصورت، قسمت false برگردونده میشه.
موفق باشید.

MMSHFE
یک شنبه 18 دی 1390, 09:41 صبح
آقاي شهركي يه لقمه آماده هم براي ما بگير :لبخند:
آخرش اين فايل id.php رو راهنماييم نكردي چجوري بسازم چون بدجور توش گير كردم.

لطفاً توی بحث مربوطه، ساختار قبلی فایل id.php خودتون رو بنویسید و بگین قراره این فایل کلاً چه کاری انجام بده تا قالب جدیدش رو براتون برحسب تگهایی که تعریف کردین، بگذارم. موفق باشید.

ali***
دوشنبه 04 دی 1391, 08:44 صبح
با سلام و خسته نباشید
یه سوال که حسابی کلافه ام کرده
یه فرم دارم که شامل فیلدهای دو جدول توی دیتابیسم هست
می خواهم مقادیر این فرم را همزمان توی این دو تا جدول بریزم
اما نمی دونم چطور از insert into , join استفاده کنم
خواهش می کنم راهنماییم کنید
با تشکر

فرزند کوروش
دوشنبه 04 دی 1391, 10:37 صبح
با سلام و خسته نباشید
یه سوال که حسابی کلافه ام کرده
یه فرم دارم که شامل فیلدهای دو جدول توی دیتابیسم هست
می خواهم مقادیر این فرم را همزمان توی این دو تا جدول بریزم
اما نمی دونم چطور از insert into , join استفاده کنم
خواهش می کنم راهنماییم کنید
با تشکر
دوست گرامی پاسخ شما در این پست داده شده است. لطفا اسپم نزنید
http://barnamenevis.org/showthread.php?364677-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D9%81%D8%B1%D8%A7%D8%AE%D9%88%D8%A7%D9%86%DB%8C-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A8%D9%87-%D9%81%DB%8C%D9%84%D8%AF%D9%87%D8%A7%DB%8C-%D8%AC%D8%AF%D9%88%D9%84&p=1658018&viewfull=1#post1658018