PDA

View Full Version : سوال: دادن پیغام خطا در صورت تکراری بودن فیلد



manager_66
سه شنبه 24 آبان 1390, 11:19 صبح
سلام . من دو تا جدول دارم بشکل زیر :


77870


میخوام در جدول sub_categry یک فیلد جدید بذارم و بگم بشرط این میتونی تو این جدول اینسرت بشی که قبلا با این نام و با این cat_id چیزی درج نشده باشه . باید چیکار کنم .این کدیه که نوشتم .

میشه خواهشا یک نگاهی بندازین بگین چیکار کنم بهتره ؟


<?php
include_once '../_con/config.php';
ob_start();
if (isset($_POST["add_company"]))
{
$comp_name=$_POST["add_company_name"];
if(!empty($comp_name))
{
$res_comp=mysql_query("SELECT * FROM `company` WHERE `name`='{$comp_name}'");
$row_comp=mysql_fetch_assoc($res_comp);
$cat_id=$row_comp["cat_id"];
$res_cat=mysql_query("SELECT * FROM `category` WHERE `id`='{$cat_id}'");
if(mysql_num_rows($res_cat)!=0)
{
echo "موفقیت";
}


}
}
?>
<form method="POST" action="">

<p>
" با انتخاب دسته مورد نظر و کلیک روی دکمه نمایش کمپانی محصولات آن دسته برای شما به نمایش در می آید. "
</p>
<label for="category">انتخاب دسته : </label>
<input type="hidden" name="cat_id" value=""/>
<select name="category" id="category" class="orig_text">;
<?php
$res=mysql_query("SELECT * FROM `category`");
while($row=mysql_fetch_assoc($res))
{
$name=$row['name'];
$id=$row['id'];
?>
<option value="<?php echo $id; ?>"><?php echo $name; ?> </option>
<?php
}

?>
</select>
<input type="submit" name="company_show" value="نمایش کمپانی" class="origbut"/>
</form>


<?php
if (isset($_POST["company_show"]))
{
if(array_key_exists("action",$_GET))
{
$_GET["action"]=null;
}
$id=$_POST["category"];
echo '<hr width="70%" color="red" />';
$res=mysql_query("SELECT * FROM `category` WHERE `id`='{$id}'");
$row=mysql_fetch_assoc($res);
echo '<label> شماره دسته :' . "$id" .'</label>';
echo '<p>';
echo '<label> نام دسته :' . $row["name"] .'</label></p>';
echo '<p> محصولات متعلق به دسته '. $row["name"] .': </p>';
?>
<div>
<table border="1" class="cat_table">
<tr>
<th>شماره دسته :</th>
<th>نام کمپانی :</th>
<th>عملیات :</th>
</tr>
<?php
$comp=mysql_query("SELECT * FROM `company` WHERE `cat_id`='{$id}'");
if(mysql_num_rows($comp)!=0)
{
while($com=mysql_fetch_assoc($comp))
{
echo '<tr>';
echo '<td>'.$com["cat_id"] .'</td>';
echo '<td>'.$com["name"] . '</td>';
echo '<td>'.'<a href="?act=company&action=edit&id='.$com['id'].'"> ویرایش </a>';
echo '&nbsp;&nbsp;&nbsp;&nbsp;';
echo '<a href="?act=company&action=del&id='.$com['id'].'"> حذف </a></td>';
echo '</tr>';

}
}
else echo "برای دسته انتخابی شرکتی ثبت نشده است!";


?>
</table>
<div class="form_update_cat">
<form method="POST" action="">
<fieldset>
<legend>اضافه کردن کمپانی جدید</legend>
<label for="add_company_name">کمپانی جدید : </label>
<input type="text" name="add_company_name" id="add_company_name" class="orig_text"/>
<input type="submit" name="add_company" value="اعمال" class="origbut"/>
</fieldset>
</form>
</div>
<?php
}
echo '</div>';
$content=ob_get_contents();
ob_clean();
return $content;
?>

رضا قربانی
سه شنبه 24 آبان 1390, 13:59 عصر
این کدی که نوشتم رو ببین و ازش الگو بگیر و مشکلت رو حل کن:


$link = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$link);
$SearchUser = mysql_fetch_array(mysql_query("select * from `tbl_...` Where `user` = '$name' "));
if($SearchUser['user']){
die(' !!! این نام کاربری قبلا ثبت شده است !!!');
return false;
}



موفق باشید

manager_66
سه شنبه 24 آبان 1390, 14:41 عصر
ممنون جناب قربانی.
ولی کدی که شما نوشتین دقیقا کار کد من رو میکنه . فقط بهینه تره. بینید بذارید با یک مثال بگم منظورم چیه : با توجه به عکسی که بالا گذاشتم (جداول) من در جدول sub_category فیلدی بنام Football دارم که cat_id اون برابر یک هست ؛ یعنی مخصوص دسته ورزشی است . خوب حالا من میخوام یک فیلد دیگه در همین جدول بنام Football و cat_id=2 ایجاد کنم . یعنی Footabll که من درج میکنم مخصوص دسته خبری باشد . ولی این کد وقتی میبینه فوتبال از قبل وجود داره درجش نمیکنه و میگه تکراریه . باید چیکار کنم که cat_id اون رو چک کنم ؟ ممنون.

من کد رو به این شکل تغییر دادم ولی باز هم کار نکرد:گریه::

if(!empty($comp_name))
{
$res_cat=(mysql_fetch_assoc(mysql_query("SELECT * FROM `category`")));
$res=(mysql_fetch_assoc(mysql_query("SELECT * FROM `company` WHERE `name`='{$comp_name}' AND `cat_id`='{$res_cat["id"]}'")));
if($res)
{
echo "کمپانی موجود است";
}
else
{
echo "شرکت ثبت شد";
}


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

manager_66
سه شنبه 24 آبان 1390, 23:57 عصر
اقا بذارین یک طور دیگه درخواستم رو مطرح کنم :

میخوام در جدول sub_category مقدار جدیدی درج کنم . میخوام چک کنه اگه با این نام و با این cat_id که cat_id خودش id جدول category میشه فیلدی نبود بعد درج کنه در غیر اینصورت پیغام خطا بده . واقعا نمیدونم باید چیکار کنم . خیلی فکر کردم . این کد واسه کسایی که کار کردن نباید کاری داشته باشه .

pejman_view
چهارشنبه 25 آبان 1390, 09:42 صبح
سلام

یکم سوالتان گنگ است بگذارید من توضیح بدم اگر هر جای توضیح من مشکل داشت شما برای من اصلاحش کنید:
شما یک دیتابیس دارید که فرضاً دو جدول دارد و من بصورت فرضی این جدول ها را با توجه به عکس تان که در پست اول خود گذاشتید اینجا هم آوردم

http://barnamenevis.org/attachment.php?attachmentid=77870&d=1321343818

حالا می خواهید cat_id و نام بصورت یکتا باشه و هیچ وقت تکرار نشه؟

یا سوالتان اینه که cat_id یا نام بصورت یکتا باشه و هیچ وقت تکرار نشه؟

چون می دانید دو سوال بالا جواب و صورت مسئله ایی متفاوت دارند.

manager_66
چهارشنبه 25 آبان 1390, 10:32 صبح
سلام .
من میخوام cat_id و نام بصورت یکتا باشه و هیچ وقت تکرار نشه . مراحل کار به این صورته : من ابتدا در یک صفحه بنام مدیریت دسته در جدول category دسته ها رو وارد میکنم . بعد در یک صفحه دیگه که مدیریت کمپانیم هست ابتدا دسته رو مشخص میکنم(با کمبو باکس). بعد میخوام واسه اون دسته در جدول sub_category یک کمپانی جدید درج کنم که مقدار cat_idش برابر id دسته ای بشه که از کمبو باکس انتخاب کردم . بعد اگه قبلا با این نام و cat_id در جدول sub_category کمپانی درج نشده بود بیاد و درجش کنه در غیر اینصورت خطا بده .

pejman_view
چهارشنبه 25 آبان 1390, 15:59 عصر
سلام

من متوجه نمی شم چرا در یک category فقط باید یک sub_category باشه؟
همانطور که در عکسی که خودت دادی می بینیم category - sport دارای 3 زیر مجموعه است: 1- فوتبال 2- بسکتبال 3- والیبال
----------
اما اگر با combo box یک category انتخاب کردید مقدار selection category را با مقدار cat_id یکی کنید فرضا من 1 گذاشتم. و سپس نام شرکت تابع آن category را دریافت کنید و وارد کوئری زیر بکنید:



$q = "SELECT NAME,CAT_iD FROM Sub_Category WHERE NAME=1 OR CAT_ID= 'Football' ";
$r = mysqli_query($r,$q);
if (mysqli_num_rows($r) = 1){
echo 'Error: This information already exists ';
}else{
echo 'Error: You are available to register your company';
//....(rest of code)
}

manager_66
چهارشنبه 25 آبان 1390, 19:37 عصر
خوب من میخوام کل چیزی رو که الان اتفاق میفته رو بصورت تصویری قرار بدم :

من یک صفحه دارم که شامل این دسته هاست (از جدول category) :


77963


با انتخاب دسته بخاری و زدن دکمه نمایش کمپانی اینها به صفحه اضافه میشن :


77964


حالا من میخوام در فرم اضافه کردن کمپانی جدید یک کمپانی جدید (در جدول کمپانی) اضافه کنم . ما الان در دسته بخاری هستیم . در دسته دیگر مثلا آبگرمکن ممکنه کمپانی بوتان ثبت شده باشه ولی cat_id اون برابر 3 است . من وقتی میخوام واسه قسمت بخاری یک کمپانی جدید به اسم بوتان ثبت کنم میگه تکراریه . با اینکه اون چیزی که در جدول هست در دسته آبگرمکن قرار داره . چیکار کنم که این مشکل پیش نیاد . امیدوارم منظورم رو رسونده باشم . متشکرم /

pejman_view
چهارشنبه 25 آبان 1390, 20:15 عصر
خوب الان توضیحات کاملاً شفافه نگاه کنید اولین کاری که می کنید اینه که کدی که برای دسته وارد می کنید مانند ذیل باشد:
$q = "SELECT * FROM CATEGORY";
$r = mysqli_run ($q,$r);
echo '<select name="category">';
while ($row = mysqli_fetch_assoc($r)){
echo "<option value=\"$row['cat_id']\"> $row['cat_name'] </option>";
}
echo '</select>';

سپس کد کنترلر شما مانند ذیل است:


$cat_id = (int)$_POST['category'];
$q = "SELECT NAME,CAT_iD FROM Sub_Category WHERE CAT_ID= {$cat_id} ";
$r = mysqli_query($r,$q);
$row = mysqli_fetch_assoc($r);
if ($company_name == $row['name']){
echo 'Message: This company is already registered.';
//....(rest of code)
}else{
echo 'Message: You're company is available to register.';
//....(rest of code)
}

manager_66
چهارشنبه 25 آبان 1390, 22:11 عصر
ممنون pejman_view عزیز. اشتباه من این بود که مقدار cat_id رو به کنترلر نمی فرستادم . خیلی لطف کردین . فقط یک مورد دیگه هست که میخوام ببینم حل میشه یا خیر . البته باز هم با عکس توضیح میدم . 77969

من الان وقتی دسته کولر رو از کمبو باکس انتخاب میکنم و دکمه نمایش کمپانی رو میرنم جدول اون بخش رو نشون میده و اطلاعاتش درسته منتها مقدار کمبو باکس چون مجدد از جدول خونده میشه باز رو اولین مقدار(بخاری) قرار داده میشه . میشه این مشکل رو حل کرد . در حال حاضر کد مخصوص کمبو باکسم اینجوریه :


<form method="POST" action="">
<div>
<p style="color:#50c; font-weight:bold; margin-top:10px;">
" با انتخاب دسته مورد نظر و کلیک روی دکمه نمایش کمپانی محصولات آن دسته برای شما به نمایش در می آید. "
</p>
<label for="category">انتخاب دسته : </label>
<select name="category" id="category" class="orig_text_select">;
<?php
$res=mysql_query("SELECT * FROM `category`");
while($row=mysql_fetch_assoc($res))
{
$name=$row['name'];
$id=$row['id'];
?>
<option value="<?php echo $id; ?>"><?php echo $name; ?> </option>
<?php
}

?>
</select>
</div>

<div style=""><input type="submit" name="company_show" value="نمایش کمپانی" class="origbut_select"/></div>
</form>

pejman_view
پنج شنبه 26 آبان 1390, 00:18 صبح
سلام

خوشحالم که مشکلتون برطرف شد،
حالا این کار هم زیاد سخت نیست کد while رو مانند زیر ویرایش کنید


while($row = mysql_fetch_assoc($res))
{
$name=$row['name'];
$id=$row['id'];
if (isset($_POST['category']) && $id == $_POST['category'] ){
<option value="<?php echo $id; ?>" selected="selected"><?php echo $name; ?> </option>
}
}

manager_66
پنج شنبه 26 آبان 1390, 01:11 صبح
ممنون از پاسخگوییتون .
من این کد رو به این شکل تغییر دادم ولی مشکل حل نشد . اولین چیزی که در صفحه نمایش داده میشه همینه . یعنی قبل از زدن دکمه ای . بنابراین $_POST
خالیه . من کدم رو قرار میدم اگه تونستید تست کنید خیلی خوشحال میشم . فقط یک خورده کدنویسم زشته و زیاده !


<?php
include_once '../_con/config.php';

ob_start();

//++++++++++++++++++ IF add_company button pressed
if (isset($_POST["add_company"]))
{
$comp_name=$_POST["add_company_name"];
$cid=$_POST["id_content"];
if(!empty($comp_name))
{
$res=mysql_query("SELECT * FROM `company` WHERE `name`='{$comp_name}' AND `cat_id`='{$cid}'");
if(mysql_num_rows($res)!=0)
ShowError ("خطا", "کمپانی وارد شده تکراری است");

else
{
mysql_query ("INSERT INTO `company` VALUES ('','$comp_name','$cid')") or die(mysql_error());
ShowOk("پیام سیستم","کمپانی <b>$comp_name</b> با کد دسته <b>$cid</b> با موفقیت اضافه شد");
}
}
else
ShowError ("خطا", "فیلد کمپانی خالی است");
}
//++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++


//------------- IF btnupdatecompany button pressed -->update company value
if(isset($_POST["btnupdatecompany"]))
{
$id=$_GET["id"];
$updatename=$_POST["txtupdatecompany"];
if(!empty($updatename))
{
$res=mysql_query("SELECT * FROM `company` WHERE `name`='{$updatename}'");
if(mysql_num_rows($res)==0)
{
mysql_query("UPDATE company SET `name`='$updatename' WHERE `id`='{$id}'") or die(mysql_error());
ShowOk("پیام سیستم","تغییرات با موفقیت انجام شد");
}
else
{
ShowError("خطا","نام وارد شده تکراری است");
}
}
else
ShowError("خطا", "فیلذ تغییر کمپانی خالی است");
}
//-----------------------------------------------------------------------
?>

<form method="POST" action="">
<div>
<p style="color:#50c; font-weight:bold; margin-top:10px;">
" با انتخاب دسته مورد نظر و کلیک روی دکمه نمایش کمپانی محصولات آن دسته برای شما به نمایش در می آید. "
</p>
<label for="category">انتخاب دسته : </label>
<select name="category" id="category" class="orig_text_select">;
<?php
$res=mysql_query("SELECT * FROM `category`");
while($row=mysql_fetch_assoc($res))
{
$name=$row['name'];
$id=$row['id'];
?>
<option value="<?php echo $id; ?>"><?php echo $name; ?> </option>
<?php
}
?>
</select>
</div>
<div style=""><input type="submit" name="company_show" value="نمایش کمپانی" class="origbut_select"/></div>
</form>

<?php


// ***************** IF company_show button Pressed
if (isset($_POST["company_show"]))
{
if(array_key_exists("action", $_GET))
{
$_GET["action"]="";
}
$id=$_POST["category"];
echo '<div style="border:1px solid; margin:10px;">';
$res=mysql_query("SELECT * FROM `category` WHERE `id`='{$id}'");
$row=mysql_fetch_assoc($res);
echo '<div class=desc_category>';
echo '<label> شماره دسته : <span style="color:red; font-weight:bold;">' . "$id" .'</span></label>';
echo '<p>';
echo '<label> نام دسته : <span style="color:red; font-weight:bold;">' . $row["name"] .'</span></label></p>';
echo '</div>';
echo '<p> محصولات متعلق به دسته '. $row["name"] .': </p>';

?>
<table border="1" class="cat_table">
<tr>
<th>شماره دسته :</th>
<th>نام کمپانی :</th>
<th>عملیات :</th>
</tr>
<?php
$comp=mysql_query("SELECT * FROM `company` WHERE `cat_id`='{$id}'");
if(mysql_num_rows($comp)!=0)
{
while($com=mysql_fetch_assoc($comp))
{
$cat_id=$com["cat_id"];
echo '<tr>';
echo '<td>'.$cat_id.'</td>';
echo '<td>'.$com["name"] . '</td>';
echo '<td>'.'<a href="?act=company&action=edit&id='.$com['id'].'"> ویرایش </a>';
echo '&nbsp;&nbsp;&nbsp;&nbsp;';
echo '<a href="?act=company&action=del&id='.$com['id'].'"> حذف </a></td>';
echo '</tr>';

}
}
else echo "برای دسته انتخابی شرکتی ثبت نشده است!";
// ************************************************** *************
?>

</table>
<!-- end of company table show -->




<!-- Form update -->
<div class="form_update_cat" style="margin-bottom:10px; margin-top:10px;">
<form method="POST" action="">
<fieldset>
<legend>اضافه کردن کمپانی جدید</legend>
<label for="add_company_name">کمپانی جدید : </label>
<input type="text" name="add_company_name" id="add_company_name" class="orig_text"/>
<input type="submit" name="add_company" value="اعمال" class="origbut" style="width:60px; height:25px;"/>
<input type="hidden" value="<?php echo $id; ?>" name="id_content"/>
</fieldset>
</form>
</div>


<?php
}

// +-+-+-++-+-+--+-++-+--+-+ Check edit
if(isset($_GET["action"]))
{
switch($_GET["action"])
{
case "edit":
$id=$_GET["id"];
$res=mysql_query("SELECT * FROM `company` WHERE `id`='{$id}'");
$row=mysql_fetch_assoc($res);
?>
<div class="form_update_cat">
<form action="" method="POST">
<fieldset>
<legend>فرم ویرایش کمپانی </legend>
<p style="text-align:right; padding:10px;">
<label>مقدار فعلی : </label>
<label style="color:#fff; background:#360; padding:5px;" ><?php echo $row["name"]; ?> </label>
</p>
<p style="text-align:right; padding-right:10px; line-height:40px;"><label>مقدار جدید : </label>
<input type="text" name="txtupdatecompany" value="<?php echo $row["name"];?>" class="orig_text" />
</p>
<p>
<input type="submit" name="btnupdatecompany" value="اعمال" class="origbut" style="width:50px; height:25px;"/>
</p>
</fieldset>
</form>
</div>
<?php

break;
// +++++++++++++++++++++++++++++++++ check delete
case "del":
$id=$_GET["id"];
mysql_query("DELETE FROM `company` WHERE `id`='{$id}'");
ShowOk("پیام سیستم","با موفقیت پاک شد");
break;


}
}

echo '</div>';
$content=ob_get_contents();
ob_clean();
return $content;
?>

pejman_view
پنج شنبه 26 آبان 1390, 06:38 صبح
سلام

احتمال می دادم اینو بهم بگی ببخشید دیگه زبان تخصصی من PHP نیست. بخاطر همین به اندازه دیگر دوستان به PHP مسلط نیستم. مشکلش با یک حلقه تو در تو حل می شه



while($row = mysql_fetch_assoc($res))
{
$name=$row['name'];
$id=$row['id'];
if (isset($_POST['category'])){
if ( $id == $_POST['category'] ){
<option value="<?php echo $id; ?>" selected="selected"><?php echo $name; ?> </option>
}
}
}

manager_66
پنج شنبه 26 آبان 1390, 12:22 عصر
مرسی داداش . ممنون که وقت گذاشتی . مشکلم حل شد.:لبخندساده:

pejman_view
پنج شنبه 26 آبان 1390, 12:53 عصر
خواهش می کنم داداش وظیفه بود.

با آرزوی موفقیت

BOBZzZ
دوشنبه 24 بهمن 1390, 09:03 صبح
آقا ببخشید نمیدونم اینجا جاش هست یا نه اما اگر کسی میدونه بگه چطوری میشه وقتی که یه فیلد مثلا abc هست دیگه اصلا نشه هیچ جور دیگه ABc یا AbC یا ... درست کرد؟
من هرچی میگردم نمیتونم چیزی پیدا کنم که نذاره همچین اتفاقی بیفته ممنون میشم 1 نفر راهنمائی کنه .