PDA

View Full Version : سوال: ارسال یک داده به ستون id در یک جدول بانک که aouto increase هست چگونه میباشد



hamed-php
یک شنبه 07 فروردین 1390, 16:35 عصر
سلام

ارسال یک داده به ستون id در یک جدول بانک که aouto increase هست چگونه میباشد؟

مثلا در فرم تماس با ما: نام ، ایمیل و متن را از فرد میگیریم حالا برای id چگونه insert باید کرد که در بانک ذخیره شود؟
کد زیر با یک eror مواجه شده:


$sql= "insert into contactus values
('','','".$name."','".$visitor_email."','".$user_message."')";

کد بانک هم بقرار زیر است:

CREATE TABLE IF NOT EXISTS `contactus` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` datetime NOT NULL,
`name` varchar(30) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
`email` varchar(30) CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
`com` text CHARACTER SET utf8 COLLATE utf8_persian_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


ممنون اگه راهنمایی فرمایید. راه اصولی چیست؟

و سوال دوم اینکه برای ثبت ساعت و تاریخ پیغام چه دیتایی را با ید به بانک فرستاد؟ در جدول من زمان و تاریخ فقط بصورت 00.00.00 00.00 درج میشود

hamed-php
یک شنبه 07 فروردین 1390, 16:37 عصر
کد eror :

Error: Incorrect integer value: '' for column 'id' at row 1

sargardoon
یک شنبه 07 فروردین 1390, 17:26 عصر
$sql= "insert into contactus values ('',date("Y-m-d", time()),'".$name."','".$visitor_email."','".$user_m essage."')";

باید به این صورت بنویسی، شما برای تاریخ مقداری نفرستادید

hamed-php
یک شنبه 07 فروردین 1390, 17:47 عصر
ممنون - ولی نشد
حتی داخل "" و '' هم چک کردم باز هم نشد

sargardoon
یک شنبه 07 فروردین 1390, 17:57 عصر
من کد بالا رو به این صورت امتحان کردم جواب داد
insert into contactus values('','2011-03-11','sargardoon','myEmail@gmail.com','hi there');

sargardoon
یک شنبه 07 فروردین 1390, 18:00 عصر
$today = date("Y-m-d", time());
$sql = "INSERT INTO contactus VALUES ('','".$today."','".$name."','".$visitor_email."','".$user_message."')";

به روش بالا امتحان کن ببین جواب میده؟

hamed-php
دوشنبه 08 فروردین 1390, 09:39 صبح
سلام
مشکل با تاریخ حل شد.
اما با id همچنان مشکل دارم.

در لوکال هاست یک داده خالی اینزرت میکنم و بدون مشکل در بانک id افزایش میابد. ولی در سرور اصلی وقتی همین کار را میکنم ارور میده:


Error: Incorrect integer value: '' for column 'id' at row 1

MMSHFE
دوشنبه 08 فروردین 1390, 10:27 صبح
با سلام، اين راه رو امتحان كنيد:


$today = date("Y-m-d", time());
$result=mysql_query("INSERT INTO `contactus` (`$today`,`name`,`email`,`com`) VALUES ('2011-03-11','sargardoon','myEmail@gmail.com','hi there')");

نكته: اصلاً فيلد Auto Increment رو نفرستيد!
موفق باشيد.

sargardoon
دوشنبه 08 فروردین 1390, 10:36 صبح
تا جایی که من اطلاع دارم در لوکال هاست و سرور SQL Syntaxیکی هستش. فقط باید نگاه کنید که ساختار دیتابیس شما چطوریه، من خودم همیشه این عادت رو دارم قبل از اینکه بخوام داده ای را در دیتابیس دخیره کنم ابتدا به صورت دستی در بانک داده امتحان میکنم اگر جواب داد بعد میبرمش توی کد برنامه.

به نظرم اول به صورت دستی امتحان کن، جواب گرفتی بذار توی برنامه، اگر از mySQL استفاده میکنی جایی داره که میتونی کد تبدیل شده برای PHP رو هم بگیری

MMSHFE
دوشنبه 08 فروردین 1390, 15:30 عصر
تا جایی که من اطلاع دارم در لوکال هاست و سرور SQL Syntaxیکی هستش. فقط باید نگاه کنید که ساختار دیتابیس شما چطوریه، من خودم همیشه این عادت رو دارم قبل از اینکه بخوام داده ای را در دیتابیس دخیره کنم ابتدا به صورت دستی در بانک داده امتحان میکنم اگر جواب داد بعد میبرمش توی کد برنامه.
به نظرم اول به صورت دستی امتحان کن، جواب گرفتی بذار توی برنامه، اگر از mySQL استفاده میکنی جایی داره که میتونی کد تبدیل شده برای PHP رو هم بگیری
با سلام، فكر كنم منظورتون phpmyadmin بود نه MySQL چون بخش مربوطه توي phpmyadmin وجود داره. ضمناً درصورتي Syntax در لوكال هاست و سرور يكي هست كه نسخه MySQL مورد استفاده در هر دو، يكي باشه. بخاطر همين ميگم كه از ساختار استاندارد MySQL پيروي كنيد. مستندات خود MySQL اعلام ميكنه كه فيلد AutoIncrement رو اصلاً نفرستيد!
موفق باشيد.

hamed-php
دوشنبه 08 فروردین 1390, 16:27 عصر
سلام
این کد شما رو وارد کردم:

$sql=mysql_query("INSERT INTO `contactus` (`name`,`email`,`com`,`date`) VALUES ('".$name."','".$visitor_email."','".$user_message."','".$today."')");

اما ارور زیر رو داد:

Error: 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 '1' at line 1

MMSHFE
دوشنبه 08 فروردین 1390, 17:03 عصر
با سلام، يك بار اين دستور رو اجرا كنيد و ببينيد چه خروجي توليد ميشه؟


echo "INSERT INTO `contactus` (`name`,`email`,`com`,`date`) VALUES ('".$name."','".$visitor_email."','".$user_message."','".$today."')";

موفق باشيد.

hamed-php
دوشنبه 08 فروردین 1390, 18:02 عصر
سلام

echo کردم و پیغام زیر اومد:

INSERT INTO `contactus` (`name`,`email`,`com`,`date`) VALUES ('hamed','h.sasa@edf.fm','salam peygham for test','2011-03-28 18:29:07')Error: 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 '1' at line 1

sargardoon
دوشنبه 08 فروردین 1390, 19:16 عصر
با سلام، فكر كنم منظورتون phpmyadmin بود نه MySQL چون بخش مربوطه توي phpmyadmin وجود داره. ضمناً درصورتي Syntax در لوكال هاست و سرور يكي هست كه نسخه MySQL مورد استفاده در هر دو، يكي باشه. بخاطر همين ميگم كه از ساختار استاندارد MySQL پيروي كنيد. مستندات خود MySQL اعلام ميكنه كه فيلد AutoIncrement رو اصلاً نفرستيد!
موفق باشيد.
سلام دوست عزیز درسته منظور من PHP MyAdmin هستش و نوع دیتابیس mySQL هستش، و منظور من syntax کلی SQL در دیتابیس هستش که فرقی باهم ندارند،
آره روش که شما در پاسخ قبلی نوشتید استاندارد هستش
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
و برای اینکه خطای کمتری پیش بیاد این روش بهتره

sargardoon
دوشنبه 08 فروردین 1390, 19:19 عصر
سلام

echo کردم و پیغام زیر اومد:

INSERT INTO `contactus` (`name`,`email`,`com`,`date`) VALUES ('hamed','h.sasa@edf.fm','salam peygham for test','2011-03-28 18:29:07')Error: 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 '1' at line 1

من با ساختاری که گذاشته بودید به صورت دستی امتحان کردم جواب داد.

MMSHFE
دوشنبه 08 فروردین 1390, 21:53 عصر
با سلام، همونطور که میبینید، مشکل از فیلد تاریخ هست. قبل از دستور mysql_query که نوشتین، این دستور رو بنویسید:


$today=substr($today,0,10);

موفق باشید.

sargardoon
دوشنبه 08 فروردین 1390, 22:23 عصر
اگر میخواهید ساعت هم داشته باشه میتونی به روش زیر هم استفاده کنید

$today = date("Y-m-d H:i:s", time());


با سلام، همونطور که میبینید، مشکل از فیلد تاریخ هست. قبل از دستور mysql_query که نوشتین، این دستور رو بنویسید:


$today=substr($today,0,10);

موفق باشید.
فرق

$today = date("Y-m-d", time());
با این یکی چیه؟

$today=substr($today,0,10);




من خودم برای نشان دادن ساعت و تاریخ از روش زیر استفاده میکنم

$today = date("Y-m-d H:i:s", time());

sargardoon
دوشنبه 08 فروردین 1390, 22:41 عصر
دوست عزیز من این رو روی لوکال هاست امتحان کردم جواب داد، خودت هم امتحان کن

$con = mysql_connect('localhost','root','') or die('unable to connect mysql');
$db = mysql_select_db('test',$con) or die('unable to select database');

$today = date("Y-m-d H:i:s", time());

$name= 'Sargardoon';
$visitor_email = 'sargardoon@gmail.com';
$user_message = "Hi there, I\'m testing SQL Syntax123";

$sql = "INSERT INTO contactus (`name`,`email`,`com`,`date`) VALUES ('".$name."','".$visitor_email."','".$user_message."','".$today."')";

$sql= mysql_query($sql) or die('check sql syntax');
$rc = mysql_affected_rows();
echo "<h4>Records inserted: ".$rc."</h4>";

$sql = mysql_query("SELECT * FROM contactus;") or die('check sql syntax');

$nor = mysql_num_rows($sql);
$row = mysql_fetch_assoc($sql);
echo '<h3>Number of Records are: '.$nor.'</h3>';

echo "<table>";
for($h=0;$h<mysql_num_fields($sql);$h++){
$fieldCaption=mysql_field_name($sql,$h);
echo "<th width=80px style=\"text-align:center; background-color:#abcdef; border: thin solid #abcdef;\">".$fieldCaption."</th>";
}
for($i=0;$i<$nor;$i++){
echo "<tr>";
for($j=0;$j<mysql_num_fields($sql);$j++){
$DataRec = mysql_result($sql,$i,$j);
echo "<td width=80px style=\"text-align:center; border: thin solid #abcdef;\">".$DataRec."</td>";
}
echo "</tr>";
}
echo "</table>";

توجه کن بین single Quote و Double Quote فرق میکنه، بهتر از Double Quote استفاده کنی تا کمتر دچار مشکلی بشی. در کد بالا هم بهت میگه که آیا تغییر انجام داده شده یا نه، و بعد از اون اطلاعات رو نشون میده

sargardoon
دوشنبه 08 فروردین 1390, 22:47 عصر
با سلام، همونطور که میبینید، مشکل از فیلد تاریخ هست. قبل از دستور mysql_query که نوشتین، این دستور رو بنویسید:


$today=substr($today,0,10);

موفق باشید.

دوست عزیز آیا راهی هست که من توضیحات رو به جای field name نشون بدم (comments)، اینطوری راحتر میشه اطلاعات رو نشون داد

MMSHFE
سه شنبه 09 فروردین 1390, 09:50 صبح
دوست عزیز آیا راهی هست که من توضیحات رو به جای field name نشون بدم (comments)، اینطوری راحتر میشه اطلاعات رو نشون داد
ميشه منظورتون رو دقيق تر بيان كنيد؟
در مورد سؤال دوستمون هم كه گفتن چرا پيشنهاد دادم از substr استفاده كنن، بايد بگم كه در MySQL استاندارد، فيلد تاريخ، ساعت رو نگهداري نميكنه و درنتيجه، با كمك substr كه گفتم فقط 10 كاركتر اول كه شامل تاريخ هست جدا شده و در فيلد تاريخ ثبت ميشه.

sargardoon
سه شنبه 09 فروردین 1390, 11:16 صبح
ميشه منظورتون رو دقيق تر بيان كنيد؟
در مورد سؤال دوستمون هم كه گفتن چرا پيشنهاد دادم از substr استفاده كنن، بايد بگم كه در MySQL استاندارد، فيلد تاريخ، ساعت رو نگهداري نميكنه و درنتيجه، با كمك substr كه گفتم فقط 10 كاركتر اول كه شامل تاريخ هست جدا شده و در فيلد تاريخ ثبت ميشه.

دوست عزیز سوال من این بود که چه فرقی بین

$today = date("Y-m-d", time());
و
$today=substr($today,0,10);
خروجی هر دو به صورت yyyy-mm-dd (2011-03-21) هستش.

در اینجا توضیح دادم لطفا اینجا مراجعه کنید. (http://barnamenevis.org/showthread.php?280335-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%DA%AF%D8%B2%DB%8C%D9%86%D9%87-comments-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A8%D9%87-%D9%88%D8%B3%DB%8C%D9%84%D9%87-PHP)

MMSHFE
سه شنبه 09 فروردین 1390, 11:52 صبح
با سلام، دوست گرامي همونطور كه ميبينيد، دوستمون در Query كه نوشته بودن، ساعت رو هم ذخيره ميكردن كه با استفاده از substr كه پيشنهاد دادم، اين قسمت حذف ميشه وگرنه دستوري كه شما نوشتين درسته. راستي به اون موضوع كه لينكش رو گذاشتين هم پاسخ دادم. لطفاً بررسي كنيد.
موفق باشيد.

hamed-php
سه شنبه 09 فروردین 1390, 12:48 عصر
سلام

در لوکال که از ابتدا مشکلی نداشتم!

اما این دستور رو هم اجرا کردم :

$today=substr($today,0,10);

اما همچنان این ارور ... هست. مثل کابوس:گیج:

Error: 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 '1' at line 1

در کل نمیدونم چرا با وجود ثبت اطلاعات در بانک ولی ارور هم در صفحه ظاهر میشود. ولی من در بانکم اطلاعات رو صحیح میگیرم و ستون id هم یکی یکی افزایش دارد.

نسخه لوکال : MySQL client version: mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $
نسخه سرور اصلی : MySQL client version: 5.0.51a

تفاوت در چیست؟

MMSHFE
سه شنبه 09 فروردین 1390, 12:56 عصر
اگه ميشه، كد كامل صفحه و اينكه از چه طريقي وارد اين صفحه ميشين (فرم، لينك و...) رو بنويسيد. ضمناً اگه با فرم وارد ميشين، مقاديري كه نوشته شده (حتي المقدور كد فرم) و اگه با لينك وارد ميشين، مقاديري كه ازطريق آدرس براي صفحه ارسال ميشه رو هم ذكر كنيد تا دقيقاً ببينيم مشكل از كجاست.
موفق باشيد.

hamed-php
چهارشنبه 10 فروردین 1390, 18:33 عصر
با سلام

کد های من از این قراره:

<?php


$name = '';
$visitor_email = '';
$user_message = '';

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

$name = $_POST['name'];
$visitor_email = $_POST['email'];
$user_message = $_POST['message'];



$pass='1234';
$con = mysql_connect("myroot","myuser","$pass","mydb");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("mydb", $con);
date_default_timezone_set('Asia/Tehran');


$today = date("Y-m-d H:i:s", time());

$sql=mysql_query("INSERT INTO contactus (`name`,`email`,`com`,`date`) VALUES ('".$name."','".$visitor_email."','".$user_message."','".$today."')");

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}

header('Location: thank-you.html');
mysql_close($con);
}


?>

3 تامقادیر شامل نام ، ایمیل و پیغام هم با متد پست از یک فایل html ارسال میشود.

آیا به جز mysql-query تابع دیگری هست مثلاً db-query رو شنیده بودم . ممکن هست از این تابع باشه؟
راستی چرا با وجود درج در دیتابیس ارور هم ظاهر میشود و البته دیگر صفحه header که تشکر میباشد وصل نمیشود؟

MMSHFE
پنج شنبه 11 فروردین 1390, 19:43 عصر
با سلام، دوست گرامي براي today$ اين دستور رو امتحان كنيد:


$today = date("Y-m-d", time());

ببينيد مشكل برطرف ميشه يا نه.
موفق باشيد.

hamed-php
جمعه 12 فروردین 1390, 23:23 عصر
سلام

مشکل حل شد.
البته تابع mysql_query در خط 29 هم حذف شد .

ممنون از راهنمایی شما