当重复行开始存储在数据库中时,我正在使用php和mysql更新数据库字段。 在服务器上的localhost上都不起作用 这是代码:
<?php
$con = mysqli_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysqli_error($con));
}
mysqli_select_db($con,"excel");
$sql="INSERT INTO mark (date, time_stamp, agency, a_name, first_name, last_name, address, city, zip, phone, auto, ins_det)
VALUES ('$_POST[date]','$_POST[time]','$_POST[agency]','$_POST[a_name]','$_POST[f_name]','$_POST[l_name]','$_POST[add]','$_POST[city]','$_POST[zip]','$_POST[phone]','$_POST[auto]','$_POST[ins_det]')";
$res = mysqli_query($con,$sql);
if (!$res)
{
die('Error: ' . mysqli_error($con));
}
else
{
echo "1 record added";
}
mysqli_close($con);
?>
这是Webform的代码,提交后会重定向到上面的代码
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
<h2 align='center'>Mark Noffsinger</h2>
</head>
<body>
<div class="outer-container">
<div class="col-sm-4"><form action="show_data.php">
<input type="submit" class="btn btn-default" value="Show this month's leads"/></form>
</div>
<form action="form_data.php" method="post" class="form-horizontal">
<div class="col-sm-8" "form-group">
<label>Date:</label><br>
<input type="date" class="form-control" id="date" name="date"/>
<label>Time:</label><br>
<input type="time" class="form-control" id="time" name="time"/>
<label>Agency:</label><br>
<input type="text" class="form-control" id="agency" name="agency"/>
<label>Agent's Name:</label><br>
<input type="text" class="form-control" id="a_name" name="a_name"/>
<label>First Name:</label><br>
<input type="text" class="form-control" id="f_name" name="f_name"/>
<label>Last Name:</label><br>
<input type="text" class="form-control" id="l_name" name="l_name"/>
<label>Address:</label><br>
<input type="text" class="form-control" id="add" name="add"/>
<label>City:</label><br>
<input type="text" class="form-control" id="city" name="city"/>
<label>Zip:</label><br>
<input type="number" class="form-control" id="zip" name="zip"/>
<label>Phone:</label><br>
<input type="number" class="form-control" id="phone" name="phone"/>
<label>Auto:</label><br>
<input type="number" class="form-control" id="auto" name="auto"/>
<label>Insurance Details:</label><br>
<input type="text" class="form-control" id="ins_det" name="ins_det"/><br>
<input type="Submit" value="Submit" class="btn btn-default" />
</div>
</form>
</div>
</body>
</html>
edit:电话号码在这里用作主键,每次我使用缓存的信息插入我认为是的数据,尝试清除缓存,使用差异浏览器时,但每次我提交表格时都使用最后一行的电话号码已更新,并给出了复制潜在客户的错误
答案 0 :(得分:0)
就像其他Stackoverflow工程师所说的那样,如果您打算在生产中使用它,那么您的代码就是安全灾难。
我只选择三个表单参数**(名字,姓氏,地址)**以重新创建您的代码,同时确保sql注入 攻击是不可能的。您可以按照我的方法添加其他表单参数。
在测试之前,请确保所有数据库凭据都可以
<?php
$con=mysqli_connect("localhost","root","my_password","yourdb goes");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables Against sql injections
$firstname = mysqli_real_escape_string($con, $_POST['f_name']);
$lastname = mysqli_real_escape_string($con, $_POST['l_name']);
$address = mysqli_real_escape_string($con, $_POST['add']);
$sql="INSERT INTO mark (first_name, last_name, address)
VALUES ('$firstname', '$lastname', '$address')";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
答案 1 :(得分:0)
当您使用INSERT
时,很可能(试图)INSERT
出现新行...
正确的动词应为REPLACE INTO
,即UPDATE
或INSERT INTO
。这将保存一个先前的SELECT
语句,该语句必须确定必须使用UPDATE
还是INSERT INTO
;因为您要尝试做的是两次添加一个UNIQUE
密钥,这完全是非法的。
将phone
用作PRIMARY KEY
可能会导致问题。宁愿建议改用AUTOINCREMENT
contact_id
列...只是因为存在多种格式设置电话号码的方法-这是用户输入-进一步检查输入$_POST
建议使用isset()
和!empty()
;此处的其他客户端数据验证无关紧要。我还发现表名mark
很奇怪,可能应该将其标准化为列agent_id
。
请参阅prepared statements的文档,该文档非常有用。