簡體   English   中英

將信息發送到數據庫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>

注意:上面的代碼提供了下拉列表和文本框以及textarea的所有值,應將它們發送到databasetable。

注意: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); 可以看到在哪里可以收到提交的內容?

它表明由於某種原因未發布作業,並且您的($_POST['job'])錯誤消息Undefined index並且此錯誤發生在INSERT語句中。 因此,不會插入任何內容。

解決方案

我已經檢查了Job,但它為空,我添加了一個名為default value 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>';
}

到現在為止還挺好。

我已經測試過在您的insert方法中手動注入數據,並且工作正常。

最后:

將默認值放入工作后,現在一切正常,您的表單正在提交並保存到數據庫。

結論

  1. 切換到MySQLi或PDO非常重要
  2. 變量命名應加以改進
  3. 利用函數減少大量重復代碼,例如mysql_escape_string或數據庫連接,建立中心頁面並包含連接(我有一個顯示使用PDO的最小項目的答案,您可以在這里查看並獲得啟發)
  4. 更好,更清晰的代碼和數據結構。

注意

該解決方案基於您的代碼中顯示的內容,我沒有機會進行深入測試或針對最終運行的數據庫進行測試。 我創建了一個用於插入數據的表,還獲得了舊版本的數據庫var_dump,它也提供了幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM