我想使用PHP从网页插入MySQL数据库,但是当尝试使用变量时它不起作用(如果我在使用something
时不使用$something
,它就可以正常工作了) / p>
以下是代码:
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 injection问题的所有人,我也会看一下。
我现在工作,这是更正后的代码:
mysqli_query($con,"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion) VALUES ('".$_GET['idpatient']."', '".$_GET['iddoctor']."','".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')");
答案 0 :(得分:1)
字段顺序错误:
Atendido (idPaciente, idDoctor
VALUES ('".$_GET['iddoctor']."', '".$_GET['idpacient']."'
更改为:
"INSERT INTO Atendido (idPaciente,idDoctor,fecha,costo,tipoAtencion)
VALUES ('".$_GET['idpacient']."', '".$_GET['iddoctor']."',
'".$_GET['date']."', '".$_GET['amount']."', '".$_GET['description']."')")
答案 1 :(得分:1)
正如OP所讨论的,$_GET['idpacient']
和name="idpatient"
因此不匹配。
我相信你想使用$_GET['idpatient']
或name="idpacient"
选择哪一个更正。
答案 2 :(得分: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
的创建更容易理解,无论您拥有多少值。