変数を数値として定義する方法 – PHP – SitePoint Forums

こんにちは、コードに問題があります。 月末にアカウントの支払いファイルを更新するためです。 コメントが記載されています
コード (//) で。
#1)変数を数値として定義する方法(いくつかの例を試しました(フォーラムとマニュアル)
#2) いくつかの変数を一緒に追加して、数値として知られるようにする方法 (データベースではすべて 10 進数の 8,2 です)
#3) 誰か「未定義の変数: mysql」について説明してください。

";echo date('m/d/y');echo "
"; $due=0; $prevbal="prevbal"; $latechg="latechg"; $secdep="secdep"; $damage="damage"; $courtcost="courtcost"; $nsf="nsf"; $amtdue="amtdue"; $amtpaid="amtpaid"; $paidsum="paidsum"; $due = $prevbal + $latechg + $secdep + $damage + $courtcost + $nsf; // Warning: A non-numeric value encountered x 5 line 21 $amtdue = $amtdue + $due; Warning: // A non-numeric value encountered x 1 line 22 // if no payment or partial payment, add $10 to latechg field and amount not paid to prevbal field if ($amtpaid < $amtdue) // Notice: Undefined variable: amtpaid { $latechg = $latechg + 10; $prevbal = $amtdue - $amtpaid; } // if payment = amtdue clear due if ($amtpaid == $amtdue) // Notice: Undefined variable: amtpaid { $prevbal = 0; $latechg = 0; } // if over-payment subtract over-payment // from prevbal field if ($ampaid > $amtdue ) // Notice: Undefined variable: amtpaid { $amtdue = $amtpaid - $amtdue; $prevbal = 0; $latechg = 0; } $secdep = 0; $damage = 0; $courtcost = 0; $nsf = 0; // refresh every record - give every record the below values $amtpaid = '0.00'; $hudpay = '0.00'; $datepaid = ' '; $paidsum = '0.00'; $comments=" "; // Perform a query, check for error if (!$mysqli -> query("UPDATE payfile SET // Undefined variable: mysqli Fatal error: Uncaught Error: Call to a member function query() on null prevbal="$prevbal",latechg='$latechg', hudpay='$hudpay', amtpaid='$amtpaid', datepaid='$datepaid', comment="$comment", paidsum='$paidsum' where unit = $unit")); mysqli_query($sql) or die(mysql_error()); ?> these are error messages: Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21 Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21 Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21 Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21 Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21 Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 21 Warning: A non-numeric value encountered in C:xampphtdocspropertyrefreshpayments.php on line 22 Notice: Undefined variable: ampaid in C:xampphtdocspropertyrefreshpayments.php on line 32 Notice: Undefined variable: mysqli in C:xampphtdocspropertyrefreshpayments.php on line 44 Fatal error: Uncaught Error: Call to a member function query() on null on line 44


数値以外の変数については、11 行目で文字列に設定しています。

$courtcost="courtcost"; 

また、他の mysql エラーは、おそらく 2 つの異なるスタイルの PHP (MySQLi Procedural を接続し、MySQLi オブジェクト指向のように見えるクエリを実行する) を使用しているという事実に起因します。

クエリを実行するときは、未定義の変数 ($mysqli) ではなく、接続変数 ($link) を使用する必要があります。

すべてのデータベース コードが同じタイプであり、正しい変数を使用して正しく構成されていることを確認する必要があります。 この一連の記事を参考にしてください。

これはもっと近いと思います。数値エラーはなくなりましたが、残ったエラーはコードにコメントされています。 アドバイスありがとうございます。

";echo date('m/d/y');echo "
"; //connect to database $mysqli = new mysqli("localhost", "root", "", "prerentdb"); //check for errors if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error; } //MySqli Select Query $res = $mysqli->query("SELECT * FROM payfile"); //fetch query $row = $res->fetch_assoc(); $due=0; //display results /* echo $row['amtdue']; echo $row['amtpaid']; echo $row['prevbal']; echo $row['latechg']; echo $row['secdep']; echo $row['damage']; echo $row['courtcost']; echo $row['nsf']; echo $row['paidsum']; echo $row['comments']; */ if ($result = $mysqli->query($sql)) { // Undefined variable: sql& Warning: Empty query while($obj = $result->fetch_object()){ $due = $obj->prevbal + $obj->latechg + $obj->secdep + $obj->damage + $obj->courtcost + $obj->NSF; $amtdue = $obj->amtdue + due; // do these need to be variables or can your code just use $obj? $prevbal =$obj->prevbal; $latechg = $obj->latechg; $secdep = $obj->secdep; $damage = $obj->damage; $courtcost = $obj->courtcost; $nsf = $obj->nsf; // if no payment or partial payment, add $10 to latechg field and amount not paid to prevbal field if ($amtpaid < $amtdue) { $latechg = $latechg + 10; $prevbal = $amtdue - $amtpaid; } // if payment = amtdue clear due if ($amtpaid == $amtdue) { $prevbal = 0; $latechg = 0; } // if over-payment subtract over-payment // from prevbal field if ($ampaid > $amtdue ) { $amtdue = $amtpaid - $amtdue; $prevbal = 0; $latechg = 0; } $secdep = 0; $damage = 0; $courtcost = 0; $nsf = 0; // refresh every record - give every record the below values $amtpaid = '0.00'; $hudpay = '0.00'; $datepaid = ' '; $paidsum = '0.00'; $comments=" "; // Perform a query, check for error if (!$mysqli -> query("UPDATE payfile SET prevbal="$prevbal",latechg='$latechg', hudpay='$hudpay', amtpaid='$amtpaid', datepaid='$datepaid', comment="$comment", paidsum='$paidsum' where unit = $ unit")); mysqli_query($sql) or die(mysql_error()); } } $result->close(); // Fatal error: Call to a member function close() on bool ?>

  1. あなたが呼ぶ mysqli->query($sql); しかし、あなたはと呼ばれる変数を持っていません $sql – エラーメッセージがこれを示しています。 ここでクエリを実行するつもりでしたか? あなたはすでに実行しました select * from payfile そして、最初の結果を取得しました $row さらに数行前に。 別のクエリを実行する代わりに、これらの結果をループするべきではありませんか? そうでない場合、結果に対して何もしない最初のクエリのポイントは何でしたか?

  2. 「bool のメンバー関数 close() への致命的なエラー呼び出し」は、エラー 1 のためにクエリが実行されなかったためです。 $resultfalse、結果ポインターではありません。 そもそも開かれていないものを閉じることはできません。 いずれにせよ、結果オブジェクトを閉じることはめったにありません。スクリプトが終了すると自動的に閉じられるからです。 どうしても閉じたい場合は、内側で閉じてください。 if() 節であり、正常に開かれた場合にのみ閉じます。

  3. これらは変数である必要がありますか、それとも obj を使用できますか? – そのために変数を作成しても意味がないので、オブジェクトを直接使用できます。

  4. mysqli_query($sql) or die (mysql_error()) – 繰り返しますが、クエリを実行しようとしています $sql その変数をどこにも定義していない場合、最初のエラーを修正すると、ここでエラーが発生します。 次に、古い、最新から削除された PHP を使用します。 mysql_error() コードの残りの部分は mysqli を使用していますが。 1 つのクエリが途中で失敗した場合に、コードがループから抜け出すことを本当に望んでいますか? ループの処理を続行したいですか? これは残高を更新しているため、コードを再実行する必要がある場合、あらゆる種類の問題が発生します。

このビットでは:

// Perform a query, check for error
if (!$mysqli -> query("UPDATE payfile SET  
 prevbal="$prevbal",latechg='$latechg', hudpay='$hudpay', amtpaid='$amtpaid', 
datepaid='$datepaid', comment="$comment", paidsum='$paidsum' 
where unit = $ unit"));

のポイントは何ですか if() このクエリを囲む句は? あなたは持っていません else またはクエリが実行されたかどうかに依存する条件付きのもの。 そして、どこで $unit から来る? あなたのコードのどこにもそれはありません。 また、次のように指定する必要があると思います $unit としてではなく $ unit、ただし、Prepared Statements に変更すると修正できます。

コードを一貫してインデントすると、はるかに読みやすくなります。 そのようなクエリに変数を連結する代わりに、Prepared Statements も確認する必要があります。

このコードは以前にここで見たことがあると確信しています。



2いいね

「レンタル決済」プログラミング教室の練習です。

@ckguitarz、これを行うためにテーブルの金額を更新しないでください。 値に影響を与える +/- トランザクションごとに新しいデータ行を INSERT してから、SQL クエリで金額を SUM() して、いつでも現在の残高を取得する必要があります。 月末に、すべてのレコードの延滞料金を計算するときに、支払額が未払い額よりも少ないユニット (アカウント) 番号の延滞料金額を含む新しい行を INSERT します。 また、異なる列に異なるタイプの金額を分散させるのではなく、単一の type_id 列と、型定義の id/name データを保持するデータベース テーブルを用意します。



1 いいね

トランザクションなしで合計を維持することは、経理では悪いことであり、両方を維持することは、最終的には同意しないことを意味します。 トランザクションを保持し、必要に応じて合計するだけです。



1 いいね

このトピックは、最後の返信から 91 日後に自動的にクローズされました。 新しい返信は許可されなくなりました。

Leave a Comment

Your email address will not be published. Required fields are marked *