Autor Zpráva
sportova stranka
Profil *
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
Úč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
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
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 *
vidis celkem dobrej napad dekuji ...
sportova stranka
Profil *
<?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
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 *
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
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: