我的问题是我想遍历一个数组并将该数组的每个条目插入到mySQL表的另一列中。说实话,我不确定这是否是设计我的数据库的最佳方式,但这是我能想象的一种方式,它有效。如果有人更好地了解如何做到这一点,或者是最佳做法或某事的链接,那就太棒了。
所以我想做的事情:我有一个表格,有人可以注册提供食品送货服务。他可以输入名称等,最多可以输入10个(数据库表的限制)。这些信息应该插入“anbieter”表中的'angebot_0','angebot_1'字段...... 所以我做的是:
if (isset($_POST['register_offer']) and isset($_POST['anbieter-email'])){
$name = $loc = $cat = $email = $password ="";
$angebot = array();
// fill all variables
$name = test_sql($_POST['anbieter-name']);
$email = test_sql($_POST['anbieter-email']);
$password = test_sql($_POST['anbieter-password']);
$loc = test_sql($_POST['anbieter-loc']);
$cat = test_sql($_POST['anbieter-cat']);
// fill $angebot with all given angebot[] entries
foreach($_POST['angebot'] as $ang) {
$angebot[] = test_sql($ang);
}
if(!empty($name) and !empty($loc) and !empty($email) ){
/* decrypt password */
$password = password_hash($password, PASSWORD_BCRYPT, ["cost" => 12]);
// insert name, email, password, location and category into database
/* Prepared statement, stage 1: prepare */
if (!($stmt = $conn->prepare("INSERT INTO anbieter (anbieter_name, anbieter_email, anbieter_password, anbieter_loc, anbieter_cat) VALUES (?, ?, ?, ?, ?)"))) {
echo "Prepare failed: (" . $stmt->errno . ") " . $stmt->error;
}
/* Prepared statement, stage 2: bind and execute */
if (!$stmt->bind_param('sssss', $name, $email, $password, $loc, $cat)) {
echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
$userid = $stmt->insert_id;
// safe all angebot[] entries to database - angebot[0]-> angebot_0
for($x=0; $x < count($angebot) ; $x++) {
$upd = $conn->prepare("UPDATE anbieter SET angebot_".$x." = ? WHERE abieter_ID = ? ");
$upd->bind_param('si', $angebot[$x], $userid);
$upd->execute();
}
所以当我这样做时,我收到错误:
Fatal error: Call to a member function bind_param() on boolean in ...
使用$ x命名表的不同字段是一种非常糟糕的方法,但这是我能想到的唯一方法:/
我希望有人可以帮助我! :) 非常感谢!
答案 0 :(得分:0)
我的建议是多次单记录更新查询,你可以在一个查询中完成,
例如:
$query = "UPDATE anbieter SET";
for ($x = 0; $x < count($angebot); $x++) {
$query .= " angebot_" . $x . " = '" . $angebot[$x] . "', ";
}
echo $query .= " WHERE abieter_ID = " . $userid;
答案 1 :(得分:0)
非常感谢你的帮助,但它没有多大帮助:/ 在尝试了其他一些可能性之后,我解决了它:
$(document).ready(function(){
$(window).resize(function(){
if ($(window).width()<490) {
$("#shown").unbind().click(function(){
event.preventDefault();
$("body div hidden").toggle('slow');
});
}
else if ($(window).widht()>=490) {
$("#shown").unbind();
$("body div hidden").unbind();
}
});
});
</script>
也许它会帮助别人:)