Avatar billede 44fire44 Nybegynder
13. december 2007 - 23:25 Der er 10 kommentarer og
1 løsning

Hvis nummer eksisterer i to tabeller = checkbox checked

Hej eksperter. Her er en lille let én


Jeg har to tabeller

Første tabel indholder en masse numre - lad os sige 1-100

Den anden tabel indeholder udvalgte numre - fx. nummer 2,4,6,8,23 og 48

Mit spørgsmål er hvordan min funktion skal se ud? - Jeg vil gerne at når numrene eksisterer i begge tabeller, så skal min checkbox (som har numrene 1-100) være checked - i dette tilfælde skal checkbox nummer 2,4,5,6,23 og 48 være checked


Mvh K
Avatar billede 44fire44 Nybegynder
13. december 2007 - 23:27 #1
- tabellerne er selvfølgelig MySQL tabeller ;) - det fik jeg vidst ikke lige nævnt
Avatar billede innercitydk Nybegynder
14. december 2007 - 07:33 #2
Feks. (teoretisk plan)

Læs data fra begge tabeller ind i 2 arrays. Lav et nested loop der løber alle muligheder igennem:

for(index=0;index<Array1's længde; index+1)
{
  for(index2=0;index2<Array2's længde; index2+1)
  {
      if(Array1[index] == Array2[index2])
      {
          sæt checked = true på checkbox nummer [index]
      }
  }
}

Er ikke den store php koder så logikken må du selv finde ud af. Nestede loops er ihvertfald en ok måde at løse problemet på.

Vh Nicki
Avatar billede 44fire44 Nybegynder
14. december 2007 - 08:16 #3
Det lyder som en udmærket idé - men problemet er at begge mine arrays er variable - så skal jeg ihvertfald have lavet et eller andet som tæller det antal inputs som er i databasen først, istedet for at skrive arrayets længde...
Avatar billede smitten1 Nybegynder
14. december 2007 - 10:32 #4
prøv om dette giver mening:

select udvalgte.nummer from alle,udvalgte where alle.nummer = udvalgte.nummer

$udvalgt = array();

while($row = mysql_fetch_array($res)){
    $udvalgt[$row['nummer']] = 1;
}

// generering af checkboxe
for($i=1; $i<=100; $i++){
...

if(isset($udvalgt[$i])){
    // afkryds box
}
}
Avatar billede 44fire44 Nybegynder
14. december 2007 - 10:43 #5
smitten: yeah, men problemet er at du har sat den til at være 100 checkbokse - problemet er at dette tal er variabelt, så for($i=1; $i<=100; $i++){ skal have en funktion der fx. tæller alle de inputs som der er i databasen eller noget
Avatar billede 44fire44 Nybegynder
14. december 2007 - 10:47 #6
jeg generer allerede mine checkbokse ud fra en while-løkke - som laver et antal checkbokse ud fra de IDs som er i databasen (http://iceweb.eu/xplayn/vinslottet/admin_tilfravalg.php) - meningen er at man skal kunne vælge en bruger i dropdown-boksen, og så tjecke de bokse af som man har lyst til, for derefter at tilføje dem til brugeren.

Funktionen som jeg efterspørger er dén som sørger for at de valg som man før har foretaget bliver hentet ud fra databasen og checker checkboksene af - dem vil jeg hente ud ved at jeg har en liste med alle rækkerne (som du kan se på siden - altså de 5-6 vine lige nu) og så en liste med privilegier til hvilket brugerID som har fået checked udvalgte checkboxe af
Avatar billede smitten1 Nybegynder
14. december 2007 - 10:51 #7
måske en left join. Hvis nummeret ikke findes i udvalgte-tabellen, så sættes kolonnen til null:

select udvalgte.nummer from alle left join udvalgte on alle.nummer = udvalgte.nummer

while($row = mysql_fetch_array($res)){
  if(!is_null($row['nummer'])){
    // afkryds box
  }
}
Avatar billede 44fire44 Nybegynder
14. december 2007 - 11:04 #8
min query er således:

$query = mysql_query("SELECT * FROM vine ORDER BY vin_origin") or die(mysql_error());
$user_wine = mysql_query("SELECT * FROM wine_priv WHERE user_id = '{$_GET[ID]}'") or die(mysql_error());

hvordan skal jeg bruge left join mellem de to?
Avatar billede 44fire44 Nybegynder
29. december 2007 - 23:02 #9
nevermind - jeg lavede en _GET-funktion samt en løkke der så således ud:

<?
$num = 0;
while($row = mysql_fetch_assoc($result2)) {

    if((!is_null($row['data']))? $checked = 'checked="checked"': $checked = '');
    if(($num % 2 == 0)?    $farve = 'light': $farve = 'dark');

    echo '<tr class="'.$farve.'"><td valign="top" width="25" align="center">';
    echo '<input name="'.$row[data].'" type="checkbox" value="'.$row[data].'" '.$checked.'>';
    echo '</td>
          <td valign="top">'.$row[data].'</td>
          <td valign="top">'.$row[data].'</td>
          <td valign="top">'.$row[data].'</td>
          <td valign="top">'.$row[data].'</td>
          <td valign="top">'.$row[data].'</td>
          <td valign="top">'.$row[data].'</td>
          </tr>';
$num++;
}
?>
Avatar billede 44fire44 Nybegynder
29. december 2007 - 23:05 #10
samt en LEFT JOIN i min query

$nummer = mysql_real_escape_string($_GET[id]);
$result2 = mysql_query("SELECT * FROM vine LEFT JOIN wine_priv ON vine.vin_number = wine_priv.wine_id AND wine_priv.user_id = '$nummer'");

smitten1 - points?
Avatar billede 44fire44 Nybegynder
10. januar 2008 - 12:24 #11
du får lige til i morgen også, ellers lukker jeg bare spm :)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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