2017-03-05 16 views
1

私はphpとMySQLを使い慣れていません。現在、私は実際に小さなウェブサイトを構築しようとしています。私は自分のデータベースで支払いを編集したい、コードが実行され、成功したと言いますが、テーブルでは更新しないという小さなエラーがあります。私は自分のデータベースにビューを作成するような方法をたくさん使ってみましたが、まだ動作しませんでした。 PHPページは、前のページからuser_idを取得するはずですが、これは正常に動作しますが、それでもテーブルは更新されません。ここでSQLクエリはphpmyadminのデータベースを更新しません

は私のバスケットテーブルのSQLです:私は私のデータベースにpayment_detailsというビューを使用しているよう

以下
CREATE TABLE IF NOT EXISTS `basket` (


`product_id` int(8) NOT NULL, 
    `user_id` tinyint(4) NOT NULL, 
    `quantity` mediumint(8) NOT NULL, 
    `size` varchar(150) NOT NULL, 
    `payment` varchar(6) NOT NULL default 'No', 
    `checkout` varchar(3) NOT NULL default 'No' 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

-- 
-- Dumping data for table `basket` 
-- 

INSERT INTO `basket` (`product_id`, `user_id`, `quantity`, `size`, `payment`, `checkout`) VALUES 
(1, 1, 1, 'Small', 'No', 'Yes'), 
(3, 1, 1, 'Small', 'No', 'Yes'), 
(20, 1, 1, 'Small', 'No', 'Yes'), 
(3, 2, 1, 'Small', 'Yes', 'Yes'); 

は私のPHPコードです:

<?php 
require_once('my_connect.php'); 
require_once 'header.php'; 
$user_id=$_GET["user_id"];?> 

<html> 
<head></head> 
<body> 
<H1>Edit Payment Form</H1> 
<table> 

<?php 
if (isset($_POST['change_payment'])): 
     $user_id=$_GET["user_id"]; 
     $payment=$_POST["payment"]; 

     $edit_query= "update basket set 
         payment = '$payment' where 
         user_id='$user_id'"; 

     $edit_result= mysqli_query($connection, $edit_query); 

     if ($edit_result) : 
       header ('location: view_orders.php?confirm=Product item successfully updated'); 
     else : 
       echo "<b>This didn`t work, error: </b>"; 
       echo mysqli_error($connection); 
     endif; 
    endif; 


    $user_id=$_GET['user_id']; 
    $my_query="select * from basket where user_id=$user_id;"; 
    $result= mysqli_query($connection, $my_query); 

    while ($myrow = mysqli_fetch_array($result)): 
     $user_id= $myrow['user_id']; 
     $payment = $myrow["payment"]; 
    endwhile; 

    echo "<form method='POST' action='change_payment.php' > 
     <tr><td><b>Payment:</b> 
     <td><input type='text' name='payment' value='$payment'> 
     <tr><td><input type='submit' name='change_payment' value='Save Changes'> 
     </form>"; 
?> 

</table> 
</body> 
</html> 
</div> 
<?php require_once('footer.php'); ?> 

それは更新されません。私のデータベースのバスケットテーブルと私は理由を知りたいですか?これで私を助けてください、そして、私は感謝するでしょう。

+0

SQLエラーが表示されますか? – hassan

+0

エラーはまったくありません。尋ねられたところで前のページに移動し、「商品アイテムは正常に更新されました」が追加されますが、更新されていません。 –

+0

'$ edit_query'を印刷し、phpmyadminから手動で実行し、何が間違っているかを確認してください。 – hassan

答えて

0

MySQLにMS SQLと同様の構文がある場合は、INSERTステートメントのテーブル名とカラム名を囲むアポストロフィしか表示されません。挿入する文字列値にはアポストロフィしか必要ありません。

+0

これらはバッククォート '\' 'です - これはMySQLで識別子を引用する正しい方法です。 –

+0

彼らが同じかどうかわからない、私はそれらを取ってみましたが、それはエラーを示しています。私はvarchar(?)に数字や単語を挿入できるので、varcharは文字列と同じであると考えます。 –

+0

赤ちゃんに謝罪します! – WillCDev

1

私はコメントできません(評判が足りないので答えとして書く必要があります)。まず、すべてのmysql/i_query()は、準備された文になるまでスティックで叩かれなければなりません。私はあなたが支払いを処理しているのを見ることができ、SQLInjectionは脆弱です。最初の提案はSQLInjectionとプリペアドステートメントに関するものです。質問については、スクリプトの上部にあるエラー報告を次のように設定してください:

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

クエリを更新する前に$ user_idをダンプして問題があるかどうかを確認します。$ user_idがデータベースに存在しなくてもクエリが正常に更新されるため、クエリは正常に更新されます。

+0

私はまだ支払いページに達していませんが、これは管理者だけがデータベースを更新するためのページであり、私は実際のウェブサイトではありません。注意:セッションはすでに開始されています.2行目のC:\ WebServ \ wwwroot \ htdocs \ php \ my-shop \ footer.phpのsession_start()は無視されています。 –

0

それは私の作品、およびuはここ

"select * from basket where user_id=$user_id;" 

このエラーを持って、これを試してみてください。エラーです。そして、必ずuはウルフォームの読み取りので、それは、フォームを表示またはスクリプトを更新しませんされていない場合のuser_idがURLに存在する場合はチェックして更新あなたのドメインのindex.php?user_idを= 1

EDITコードでUSER_IDいる作りますuser_idに基づくデータベースからの入力。

<?php 

require_once 'my_connect.php'; 
require_once 'header.php'; 

?> 

<html> 
    <head> 
     <title></title> 
    </head> 
<body> 

<H1>Edit Payment Form</H1> 
<table> 

<?php 

// if submit button is pressed 
if (isset($_POST['change_payment'])) 
{ 

     // check if user_id is exists in a URL 
     if (isset($_GET['user_id']) && !empty($_GET['user_id'])) 
     { 
      // now if user_id exists and is not empty make a variable and run a rest of a script 
      $user_id = (int)$_GET['user_id']; 

      // get name from a form input field payment 
      $payment = $_POST["payment"]; 

      // update basket table with payment where user_id is equal to user_id from a $_GET variable 
      $edit_query = "UPDATE basket SET payment = '$payment' WHERE user_id = '$user_id'"; 

      // run query 
      $edit_result = mysqli_query($connection, $edit_query); 

      // if query is valid redirect user to another location 
      if ($edit_result) 
      { 
       header('location: view_orders.php?confirm=Product item successfully updated'); 
      } 
      else 
      { 
       // if query fails display error message 
       echo "<b>This didn't work, error: </b>" . mysqli_error($connection); 
      } 
     } 

} 

// check if user_id is exists in a URL if not dont display a form 
if (isset($_GET['user_id']) && !empty($_GET['user_id'])) 
{ 
    // now if user_id exists and is not empty make a variable and run a rest of a script 
    $user_id = (int)$_GET['user_id']; 

    // select all data from basket table where user_id is equal to user_id from a $_GET variable 
    $my_query = "SELECT * FROM basket WHERE user_id = '$user_id'"; 

    // run query 
    $result = mysqli_query($connection, $my_query); 

    // get an array with all data from basket table where user_id is equal to user_id from $_GET variable 
    $myrow = mysqli_fetch_array($result); 

    // show a form and set value to $myrow['payment'] where payment is equal to payment data where user_id is equal to user_id from a $_GET variable 
    echo ' 
     <form method="POST" action=""> 
      <b>Payment:</b> 
      <input type="text" name="payment" maxlength="6" value="'.$myrow['payment'].'"> 
      <input type="submit" name="change_payment" value="Save Changes"> 
     </form> 
    '; 
} 

?> 

</table> 
</body> 
</html> 
</div> 
<?php require_once 'footer.php'; ?> 

そして

<?php 

// display errors, comment this 2 functions after make this script to work 
error_reporting(1); 
ini_set('error_reporting', E_ALL); 

// starting session 
session_start(); 

// connection to database 
define('DB_HOST', 'localhost');  // database host 
define('DB_USER', 'root');   // database username 
define('DB_PASSWORD', '');   // database pasword 
define('DB_NAME', 'baza');   // database name 

$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

?> 
+0

編集済みです。 – Mario

+0

config.phpは何ですか? –

+0

ああ申し訳ありません、あなたのようなデータベースへの接続my_connect.phpただそれを変更します – Mario

0

をmy_connect.phpあなたは、それはエラーが表示されない場合は、この更新が行われたりされていないという意味ではありません考慮する必要があります。これは、クエリが良い(構文ミスがない)ことを意味します。 存在しないユーザーのレコードを更新しようとしていると考えられます。例:user_id = 10、user_id = 11のレコードを更新しようとしました。構文はOKですが、user_id = 11のユーザーは見つかりませんでしたが、 "OK、 。

($ result = @mysqli_affected_rows($ handle);を使用して更新されたレコードの数を確認することを検討する必要があります)また、クエリが良好であっても、値を変更してください(あなたのケースでは、 "payment"の古い値と新しい値が同じ場合)、mysqli_affected_rowsは0を返します。

私が提案するのは、呼び出しの前にクエリの「エコー」を追加することだけです。次に、この文字列をPhpMyadminにコピーして、何が起きているのかを確認します。クエリの文字列を表示しているときに、値が間違っていることがわかります。

希望すると、これが役立ちます。

0

皆さん、ありがとうございました。自分のミスがどこにあるのか知ることができたことを伝えたいと思います。それは単純に、支払いがバスケットのテーブルに繰り返しユーザーIDであったためです。そのため、管理できなかったのです。私はそれをusersテーブルに移しました。

関連する問題