Autor | Zpráva | ||
---|---|---|---|
sportova stranka Profil * |
#1 · Zasláno: 2. 5. 2009, 19:28:42
ahojte,
Mam tabulky sports id sport a users_sports user_id sport_id a user si muze vybrat sporty ktery hraje a pak se ulozi do databazy ale nevim jak mam kontrolovat tohle napriklad user si vybere id 1,2,3,5,6 a pak o 5 min pozdej jenom 1,2 a ja nevim jak mam 3,5,6 vymazat ... kdyz je uz nezaskrtl jinak formular je delanej pomoci checkboxu <?php if (isset($_POST['body_ok'])) { $sport = $_POST['sport']; foreach ($sport as $v) { if ($sport_s == 0) { $sport_s = (int)$v + 1; } $sql_kontrolle1 = mysql_query(" SELECT * FROM users_sports WHERE user_id = '$user_id_session' AND sport_id = '".mysql_real_escape_string($sport_s)."' ") or die (mysql_error()); if (mysql_num_rows($sql_kontrolle1) > 0) { $sql_profilbild_extradaten_update = mysql_query(" UPDATE `users_sports` SET `sport_id` = '$sport_s' WHERE `user_id` = '$user_id_session' AND sport_id = '".mysql_real_escape_string($sport_s)."' ") or die (mysql_error()); } else { $sql_profilbild_insert21 = mysql_query(" INSERT INTO `users_sports` (`user_id`, `sport_id`) VALUES ('$user_id_session', '".mysql_real_escape_string($sport_s)."') ") or die (mysql_error()); } } echo '<div class="mitglied_meldung">' . lang(628) . '</div>'; } ?> |
||
Alphard Profil |
#2 · Zasláno: 2. 5. 2009, 20:07:32
Účel některých částí kódu mi není moc jasný, ale obecně. Co třeba prvně vše smazat a pak znovu zapsat vybrané?
Jiná řešení budou podle mě složitější. Smazat nevybrané by šlo filtrem where sport_id not in (...). |
||
AM_ Profil |
#3 · Zasláno: 2. 5. 2009, 20:09:32
Tohle mi přijde dost neefektivní způsob.
DELETE FROM users_sports WHERE `user_id` = '$user_id_session' foreach($sport as $v){ $sport_s = $v+1; //to pretypovani na int tam mas dost zbytecne INSERT INTO users_sports (user_id, sport_id) VALUES ('$user_id_session', '$sport_s') //sport_s je vzdycky cislo, nemusis ho escapovat } Navíc mám takový neblahý pocit, že $sport_s se ti aktualizuje jen jednou a pak bude pořád stejný, což není úplně dobře. |
||
Alphard Profil |
#4 · Zasláno: 2. 5. 2009, 20:21:59 · Upravil/a: Alphard
Nebo trochu efektivněji
Ta vstupní podmínka mi není jasná, kdyžtak si ji doplňte. $value = array(); foreach ($sport as $v) { $value[] = "('$user_id_session', $v)"; // je je $user_id_session číslo, není třeba cpát ho do apostrofů } if(count($value)) mysql_query("insert into users_sports (user_id, sport_id) values ".implode(", ", $value)); |
||
sportova stranka Profil * |
#5 · Zasláno: 2. 5. 2009, 20:22:02
vidis celkem dobrej napad dekuji ...
|
||
sportova stranka Profil * |
#6 · Zasláno: 2. 5. 2009, 20:29:42
<?php if (isset($_POST['body_ok'])) { $sport = $_POST['sport']; $inserts = array(); foreach ($sport as $v) { $inserts[] = '('.$user_id_session.', '. ( (int) $v) .')'; } // Erst alles (vom bisherigen User) löschen mysql_query("DELETE FROM users_sports WHERE user_id = '".$user_id_session."'") or die (mysql_error()); // Jetzt die neuen posts eintragen; mysql_query("INSERT INTO users_sports (user_id, sport_id) VALUES ".implode(',', $inserts)."") or die (mysql_error()); } ?> vyriesil som to takto ale neviem preco mi ten spodny insert nefunguje ... |
||
Alphard Profil |
#7 · Zasláno: 2. 5. 2009, 20:38:21
Já jsem vynechal tu podmínku na šestém řádku vašeho původního kódu a dosadil jsem jednoduše $v. Jak jsem již psal, nevím, co má dělat. Porovnává se tam $sport_s, která ještě asi ani není definová atd.
Doporučuji vypsat si výsledný dotaz i chybu a vyladit. mysql_query($q="INSERT INTO users_sports (user_id, sport_id) VALUES ".implode(',', $inserts)."") or die ("\nDotaz:<pre>$q</pre>\nChyba:".mysql_error()); |
||
sportova stranka Profil * |
#8 · Zasláno: 2. 5. 2009, 20:55:15
vyresil sem to takhle
if (isset($_POST['body_ok'])) { mysql_query("DELETE FROM users_sports WHERE `user_id` = '$user_id_session'") or die (mysql_error()); $sport = $_POST['sport']; foreach($sport as $v){ if($sport_s == "0"){ $sport_s = $v+1; }else{ $sport_s = $v; } $sport_n = (int)$sport_s; mysql_query("INSERT INTO users_sports (user_id, sport_id) VALUES ('$user_id_session', '$sport_n')") or die (mysql_error()); } echo '<div class="mitglied_meldung">'.lang(628).'</div>'; } diky za pomoc |
||
Alphard Profil |
#9 · Zasláno: 2. 5. 2009, 21:07:44
sportova stranka:
Jak myslíte, problém je v tom, že zde bude v cyklu zbytečně mnoho dotazů na databázi. Kdybyste tuto podmínku dal k předchozímu kódu, který generoval pole, bylo by vše OK. |
||
Časová prodleva: 15 let
|
0