【发布时间】:2019-08-19 00:50:43
【问题描述】:
我正在尝试构建一种方法来进行输入字段更新检查,以查看用户输入字段是否为空。然后根据答案是否为空或不做更多检查。因此,例如,如果输入字段为空,我希望它被忽略,以便其余代码运行,并且如果输入字段内有一个值,则将进行更多检查以检查它是否在数据库内,并且如果它不在数据库中,则必须将其插入到数据库中,如果它已经在数据库中,则只需更新该字段。
该表是与主表相关的表,其中inf_id 是主表,userid 是我正在使用的关系表
所以我尝试以不同的方式进行操作,但是我一直遇到问题,每次我犯了错误或某些事情不起作用时,我都会收到一个 HTTP 500 error 页面,说无法访问。我还尝试将输入中的name 更改为其他内容,以查看该效果和不同的布局或两者都不起作用我觉得这是我错过的一些小东西
也很累,但我可能做错了,因为我以前从未真正使用过它
IF EXISTS (SELECT count(*) FROM `table` WHERE inf_id = $infid)
BEGIN UPDATE GOES HERE END ELSE BEGIN INSERT GOES HERE END
这是我在表单中的代码,用于检查数据库是否有输入,如果没有,它会创建一个空白输入。但是,如果数据库中有值,那么它将回显它
$vId = $_GET['i']; //this is the users unique ID that is send in the query string for testing purpose
if (mysqli_num_rows($rs_username) == 0 ){
echo '<input type="text" name="currentusername[]" class="currentusername" placeholder="Current Bikes" >';
} else {
while ($rs_bike_rows = mysqli_fetch_assoc($rs_bikes)) {
echo '<input type="text" name="currentusername[]" class="currentusername" value="' . $row['currentusername'] . '">';
echo '<input type="hidden" name="userid[]" value="' . $row['userid'] . '">';
echo '<button type="button" onclick="return deleteFromDbBike('. $rs_bike_rows['oid'] .', '. $vId .');">Delete</button>';
}
}
这是为了清理用户在流程文件中输入的输入
if (isset($_POST['currentusername']) && $_POST['currentusername'] !== '') {
$currentusername = $_POST['currentusername'];
$allusername = '';
foreach ($vcurrentbike as $users) {
$allusername .= $users. ' ';
}
if (filter_var($allusername , FILTER_SANITIZE_STRING) === null) {
$vValidation++;
}
} else {
$currentusername= '';
}
稍后在流程文件中检查输入值并更新/插入它
$user = $_POST['userid'];
if ($currentusername != '') {
for ($i = 0; $i < count($user); $i++) {
$userid = $bike[$i];
$valueuser = $currentusername[$i];
$sqlcheck = "Select `inf_id` FROM usertable WHERE inf_id = $vId";
$resultcheck = mysqli_query($conn,$sqlcheck);
if (mysqli_num_rows($resultcheck) >= 1) {
$stmt = $conn->prepare("UPDATE usertable SET currentusername = ? WHERE inf_id = ? and userid = ?");
$stmt->bind_param("sii", $currentperson, $infid, $ownedid);
$currentperson = $valueuser ;
$infid = $vid;
$ownedid = $userid;
$stmt->execute();
//the update code works (tried and tested) just using
//exit to see where the code goes.
exit('1');
} else {
//this is where the insert value would be however I can
//never get it to echo 0 when it exits; instead i just get a HTTP 500;
exit('0');
}
};
} else {
exit('fails');
}
最后,我希望它能够检查用户是否输入了值,然后根据他们是否有然后插入或更新它。如果用户没有忽略它。并移动到下一个字段
编辑 这个陈述基本上有两个层次
1级:
1.1) 如果用户输入为空,则完全忽略它。
1.2) 如果用户输入有值,请对照数据库检查它
2级:
2.1) 如果值存在于数据库中,则更新值
2.2) 如果值不存在,则将其插入数据库。
我遇到的错误是,如果该值不在数据库中开始,它将创建一个空输入字段。
现在,当用户将文本添加到空字段时,它想要更新它但它不存在。所以通过我的错误,因为没有什么可以更新
输入字段的状态可以是:
1) 没有任何价值的空
2) 现在添加了一个值,因此它不在数据库中
3) 具有初始提交表单的值,该值位于 db 中编辑 2:添加更多按钮
<button type="button" onclick="addMoreRows('user')"> Add More Current Usernames</button>
<div id="currentuser"></div>
var itemTypes = {
user:{
maxLimit: 4,
currentCount: 1,
selector: '#currentuser',
newElement: '<div class="moreusersadd"><input type="text" name="currentusernameadd[]" class="currentusernameadd" placeholder="Current Bikes" ><button class="delete" onclick="deleteRow(this, \'user\')">Delete</button></div>'
}
}
function addMoreRows(type){
var item = itemTypes[type];
if (item.currentCount < item.maxLimit) {
item.currentCount++;
$(item.selector).append(item.newElement);
}
else {
alert('You Have Reached the limits')
}
}
function deleteRow(event, type){
$(event).parent('div').remove();
itemTypes[type].currentCount--;
};
【问题讨论】:
-
这不是很清楚,我的意思是说您想为表中的每一行创建一个输入,以便您可以更新现有的,然后有一个额外的输入来添加额外的?
-
mysqli_num_rows 正在检查 $resultcheck,它是来自数据库的结果数组。因此,您要么需要计算数组总数并检查是否为空而不是 mysqli_num_rows。或者将当前在 mysqli_query 中的内容添加到 mysql_num_rows 中。或者执行 SQL COUNT(*) all 作为您的选择,这将返回您的行数。
-
@PaddyHallihan 是的,所以如果数据库中没有任何内容并且用户输入了输入,那么我希望它被创建,但如果数据库中已经有一个值,那么我希望它被更新
-
@w3shivers 我以前做过
SQL COUNT(*),但也没有用 -
@PaddyHallihan 我希望它查看输入。如果没有值,则忽略输入并继续执行代码。但是,如果有一个值,我希望它检查它是否在数据库中,如果是则更新该值,如果没有值则将其插入数据库中。这对你有帮助吗?
标签: php mysqli sql-update