0

PHP を使用して Web ページから MySQL データベースに挿入したいのですが、変数を使用しようとすると機能しません (使用中にsomethingnot を使用すると問題なく機能します$something)

コードは次のとおりです。

mysqli_query($con,"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) values ('".$_GET['iddoctor']."', '".$_GET['idpacient']."', '".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')");

データは、次のフォームの他のページから取得されます。

<form action="thanks/index.php" method="get">
    <span class="largetext">ID. doctor</span><br/>
    <input type="password" name="iddoctor"><br/>
    <span class="largetext">ID. patient</span><br/>
    <input type="password" name="idpatient"><br/>
    <span class="largetext">Date</span><br/>
    <input type="date" name="date"><br/>
    <span class="largetext">Amount</span><br/>
    <input type="number" name="amount"><br/>
    <span class="largetext">Description</span><br/>
    <input type="text" name="description"><br/><br/>
    <input type="submit" value="Accept" style="background-color:#FF5F00; color:#FFFFFF; opacity: 0.77;">
</form>

ありがとうございました!SQL インジェクションの問題に気づいたすべての人に、私もそれを見ていきます。

私は今動作します、ここに修正されたコードがあります:

mysqli_query($con,"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) VALUES ('".$_GET['idpatient']."', '".$_GET['iddoctor']."','".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')");
4

3 に答える 3

1

$_GET['idpacient']OPと話し合ったname="idpatient"ように、一致しません。

私はあなたが使いたかったと信じてい $_GET['idpatient']ますname="idpacient"

どちらを修正するかを選択してください。

于 2013-11-15T02:00:46.813 に答える
0

あなたのINSERT構文はそのままではほとんど意味がありません:

mysqli_query($con,"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) values ('".$_GET['iddoctor']."', '".$_GET['idpacient']."', '".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')");

sprintfフォーマットを簡単にするために、次のことを実行して使用することをお勧めします。

$insert_query = sprintf("INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) values ('%s','%s','%s','%s','%s')", $_GET['iddoctor'], $_GET['idpacient'], $_GET['date'], $_GET['amount'], $_GET['description']);
mysqli_query($con,$insert_query);

優れてsprintfいる点は、書式設定ロジックをデータ自体から簡単に分離できることです。小規模なテンプレート システムと考えてください。

また、これを行うことで、さらに一歩進めることをお勧めします。

$data_keys = array('idPaciente','idDoctor','fecha','costo','tipoAtencion');
$data_values = array();
foreach($data_keys as $key) {
  $value = array_key_exists($key, $_GET) && !empty($_GET[$key]) ? $_GET[$key] : null;
  if (!empty($value)) {
    $data_values[$key] = $value;
  }
}
if (!empty($data_values)) {    
  $insert_query = sprintf("INSERT INTO Atendido (%s) values ('%s')", implode(',', array_keys($data_values)), implode("','", $data_values) );
  echo $insert_query;
  mysqli_query($con,$insert_query);
}

そうすれば、値をフィルタリングし、値の数に関係なく、理解しやすいものを$_GET作成するプロセスが得られます。INSERT

于 2013-11-15T01:59:37.280 に答える