Avatar billede soduno Novice
10. juli 2011 - 19:15 Der er 10 kommentarer

php foreach m.m.

Jeg er stuck her ved et sql/foreach problem.

Mit "program" fungerer sådan at klienten skal hakke nogle checkboxes af som bestemmer hvad der
er spot på. Når det er gjort, bliver et felt i databasen som hedder spot sat til 1 i stedet som før, 0.

Nu skal jeg jo så derefter have alle dem som var sat til 1 før den opdaterede databasen til 0, så der ikke kun kommer til at stå spot=1 ved alle sammen.

Hvordan gør jeg det?
Lige i øjeblikket er jeg ved at brygge på:

foreach($active as $id){
  //Opdaterer de valgte spots
  $sql = "UPDATE categories SET cat_spot='". 1 ."' WHERE cat_id='". $id ."'" . "<br />";
}



VH Simon
Avatar billede soduno Novice
10. juli 2011 - 19:16 #1
$active indeholder checkboxene...
Avatar billede superdreng Nybegynder
10. juli 2011 - 20:13 #2
Du skal ikke lave en foreach statement når du skal opdatere i sql. Du skal gøre det i EN query. Hvis du har mange felter, vil det tage lang tid at udfører dem alle. Man kan godt gøre det som du skriver, men det er bare ikke best practice!

Derudover hvad laver det <br /> til sidst i din forespørgelse? :)
Avatar billede soduno Novice
10. juli 2011 - 20:18 #3
Men hvordan kan man gøre det jeg beskriver i en query?
<br /> var bare for at få en pænt layout når jeg udskrev sql'en... ;)
Avatar billede kjeldsted Novice
11. juli 2011 - 00:58 #4
Du kommer i hvert fald ikke langt med dét <br /> tag.
Avatar billede vagnk Juniormester
11. juli 2011 - 03:58 #5
Jeg er ikke helt enig med #2. Hvis du får $active via POST eller GET, må det være til at overskue hvad der er af UPDATEs. Hvis 'cat_spot' og 'cat_id' er numeriske, hvad de bør være, kan du undvære en del apostrofer, så:
$sql = "UPDATE categories SET cat_spot=1 WHERE cat_id=$id;";
Så mangler du bare:
$qry = mysql_query($sql) or die(mysql_error());
Avatar billede vagnk Juniormester
11. juli 2011 - 04:09 #6
Ups! Jeg overså lige en detalje. Jeg kan ikke rigtig se om det er det du vil have, men en query som ligger uden for loopet, som #2 måske har set:
$sql = "UPDATE categories SET cat_spot=0;";
Den sætter 'cat_spot' til 0 i samtlige rækker.

Hvis det ikke er det du vil have må du lige kvabbe dig.
Avatar billede soduno Novice
23. oktober 2012 - 02:46 #7
Superdreng og vagnk læg lige et svar, så kan jeg få tråden lukket.
Fand frem til en løsning vha. begge jeres forslag :)
Avatar billede vagnk Juniormester
25. oktober 2012 - 10:45 #8
Hovedsagen er at du fik det til at virke.
Avatar billede soduno Novice
25. oktober 2012 - 10:57 #9
Yes lige nemlig. Jeg venter lige til superdreng lægger et svar, så kan jeg også give ham point :-)
Avatar billede superdreng Nybegynder
31. oktober 2014 - 11:01 #10
Close
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester