将信息发送到数据库SQL PHP


Sending information to database SQL PHP

我有一个表单要发送到表中。有两个下拉列表。第一个获取当前登录用户的作业信息,第二个获取所有用户的用户名。日期字段、价格字段和评论字段。所以我的代码在这里:

此代码获取所有信息。submit.action.php

 <form name="form5" method="post" action="send_action.php" >

<div dir="rtl">         
                <?php
   $db_host = 'localhost';
   $db_name= 'site';
   $db_table= 'job_list';
   $db_user = 'root';
   $db_pass = '';
  $user=$fgmembersite->UserNameOfUser();
  $con = mysql_connect($db_host,$db_user,$db_pass) or die("خطا در اتصال به پايگاه داده");
  $selected=mysql_select_db($db_name, $con) or die("خطا در انتخاب پايگاه داده");
 mysql_query("SET CHARACTER SET  utf8");
 $dbresult=mysql_query("SELECT job_list.job_id,
                               job_list.job_name,
                       tablesite.username
                   FROM  $db_table
          INNER JOIN relation
          on job_list.job_id=relation.job_id
          INNER JOIN tablesite
          on relation.user_id=tablesite.id_user AND tablesite.username='$user'",$con);
 echo'* خدمتی که ارائه داده اید: ','<br/>';                    
 echo '<select name="job" dir="rtl">';
 while($amch=mysql_fetch_assoc($dbresult))
 {
 echo '<option value="'.$amch['job_id'].'">'.$amch['job_name'].'</option>';
 }
 echo '</select>'; ?><br/>
 </div>     
 <!--************************************************************** --> 
 <div dir="rtl">    
 <?php  
 $db_host = 'localhost';
 $db_name= 'site';
 $db_table2= 'tablesite';
 $db_user = 'root';
 $db_pass = '';
 $con2 = mysql_connect($db_host,$db_user,$db_pass) or die("خطا در اتصال به پايگاه داده");
 $selected=mysql_select_db($db_name, $con2) or die("خطا در انتخاب پايگاه داده");
 mysql_query("SET CHARACTER SET  utf8");
 $dbresult=mysql_query("SELECT *
                              FROM  $db_table2",$con2);
 echo'* نام کاربری که به او خدمت داده اید: ','<br/>';                      
     echo '<select name="users" dir="rtl">';
     while($amch=mysql_fetch_assoc($dbresult))
      {
   echo '<option value="'.$amch['id_user'].'">'.$amch['username'].'</option>';
      }
   echo '</select>'; ?><br/>

   <label for='date' >* تاریخ عملیات:</label><br/>
   <input type='text' name='date' id='date' value='' maxlength="11" placeholder="1394/1/1" /><br/>
   <label for='price' >* هزینه کار:</label><br/>
   <input type='text'  dir="rtl" name='price' id='price' value='' maxlength="50" placeholder="54000"/><br/>
   <label for='textaria' >توضیحات:</label><br/>
   <textarea name="textaria" cols="" rows=""></textarea><br/>
   <input name="submit" type="submit" value="ثبت عملیات" />
   </div>
    </form>
  </span>
  </div>

在这个页面中,我们将信息发送到数据库,但没有发送任何信息!:

 <?php
 require_once("./include/membersite_config.php");
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>ارسال عملیات</title>
 </head>
 <body>
 <?php
 $id=$fgmembersite->UserID(); 
 echo "$id"; ?>
 <?php
 $db_host = 'localhost';
 $db_name= 'site';
 $db_table= 'action';
 $db_user = 'root';
 $db_pass = '';

 $con = mysql_connect($db_host,$db_user,$db_pass) or die("خطا در اتصال به پايگاه داده");
 mysql_query("SET NAMES 'utf8'", $con);
 mysql_query("SET CHARACTER SET 'utf8'", $con);
 mysql_query("SET character_set_connection = 'utf8'", $con);

 $selected=mysql_select_db($db_name, $con) or die("خطا در انتخاب پايگاه داده");
 $ins = "INSERT INTO $db_table
     (service_provider_id,customer_id,date,price,job_id,service_provider_comment)
     VALUES ('$id',
             '" . mysql_escape_string($_POST['users']) . "',
             '" . mysql_escape_string($_POST['date']) . "',
             '" . mysql_escape_string($_POST['price']) . "',
             '" . mysql_escape_string($_POST['job']) . "',
             '" . mysql_escape_string($_POST['textaria']) . "')";
$saved=mysql_query($ins );
mysql_close($con); 
?>
</body>
</html>

注意:上面的代码给出了下拉列表、文本框和文本区域的所有值,应该将它们发送到数据库中。

注意:fg_membersite包含者:

      function UserID()
    {
          return isset($_SESSION['user_id'])?$_SESSION['user_id']:'';
    }

我的桌子是这样的:

    job_id                   int(11)
    service_provider_id      int(10)
    customer_id              int(10)
    date                     int(50)
    price                    int(255)
    vote                     varchar(255)
    service_provider_comment varchar(255)
    customer_comment         varchar(255)

简介

在查看了您的代码后,我已经调试了您的程序并将问题本地化。这个问题几乎没有什么难题。

我已经在我的测试环境中创建了您的代码场景。

您的主表单将提交的内容发布到send_action.php

问题

为了调试,我在send_action.php页面和$selected = ....行之后添加了var_dump($_POST);。这就是如果提交的内容被接收到了,你会看到哪里?

它显示由于某种原因,Job没有发布,并且您的($_POST['job'])带有错误消息Undefined index,并且由于此错误发生在INSERT语句中。因此,不会插入任何内容。

解决方案

我检查了Job,它是空的,我添加了一个名为默认值echo '<option value="0">default job</option>';的选项,这是为了确保在测试环境下,如果你的作业列表是空的话,那么应该提交一些东西,否则它会返回null并给你带来问题。

echo '<select name="job">';
echo '<option value="0">default job</option>';
while ($amch = mysql_fetch_assoc($dbresult))
{
    echo '<option value="' . $amch['job_id'] . '">' . $amch['job_name'] . '</option>';
}

到目前为止还不错。

我已经测试过在您的插入方法中手动注入数据,它工作得很好。

最后:

在作业中设置默认值后,现在一切都很好,您的表单正在提交并保存到数据库中。

结论

  1. 切换到MySQLi或PDO很重要
  2. 应改进变量命名
  3. 利用减少大量重复代码的功能,如mysql_escape_string或数据库连接,制作中心页面并包括连接(我有一个使用PDO的最小项目的答案,你可以在这里看看并获得灵感)
  4. 更好、更清晰的代码和数据结构

备注

该解决方案基于您的代码中提供的内容,因此,我没有机会对最终运行的数据库进行深入测试。我已经创建了一个用于插入数据的表,我还得到了你的旧版本数据库var_dump,这也有帮助。