Avatar billede nemlig Professor
16. november 2008 - 22:48 Der er 9 kommentarer og
1 løsning

Liste array med checkboks og smid valgte rækker i MySQL

Jeg har defineret et array, som jeg fx. kan liste sådan her:

for($i = 0; $i < count($my_data); $i++){
echo $my_data[$i]['navn']." - ";
echo $my_data[$i]['emailadresse']."<br />";
}

Jeg vil gerne vise en checkbox til venstre for hver post, som er "checked" på forhånd.
Det skal så være muligt at fravælge nogle af posterne, og ved tryk på SUBMIT knap, smides de valgte poster i MySQL.

Findes der en enkelt metode? Og gerne hvordan?
Avatar billede jordz Nybegynder
17. november 2008 - 08:09 #1
Ja det gør der..

<input type="checkbox" value="'.$my_data[$i]['id'].'" name="selected[]" />

alle de selected vil da kom ud i et array kaldet $_POST['selected']..

for at checke hvilke der er sat kan du køre dette:

foreach($_POST['selected'] as $val){
  ids .= $val.', ';
}

håber du forstår pointen.. det er da ret nemt at lave indsættet.. du kunne med fordel ændre $i i dit data array med id og istedet for din foreach så lave en sort() før og så køre en foreach da det så er nemt at hente data igen!

håber det kan bruges.
Avatar billede jakobdo Ekspert
17. november 2008 - 08:20 #2
foreach($_POST['selected'] as $val){
  ids .= $val.', ';
}
vil give resultat:

1,2,3,4,5,

Du bør evt. lave:

foreach($_POST['selected'] as $val){
  ids[] = $val;
}

$ids = implode(',',$ids);
Avatar billede nemlig Professor
17. november 2008 - 08:29 #3
Hej og mange tak for dit bidrag.
Jeg forstår det første med at sætte checkboksen, men er ikke med på fx:

ids .= $val.', ';

Og så går jeg ud fra, at der laves en INSERT INTO.... for hver post der er selected.

Og det sidste med at ændre $i til $id og sort() er jeg heller ikke med på.
Kan du bidrage lidt mere :)
Avatar billede jordz Nybegynder
17. november 2008 - 08:51 #4
Det jeg gør i linjen:
Hej og mange tak for dit bidrag.
ids .= $val.', ';

er blot at komma seperære alle ids der er selected. blot for at vise hvordan du fik det ud.

Jeg kender ikke lige din situation, men vil da regne med at du skal bruge det data du har i $my_data i din mysql insert forespørgsel. derfor vil jeg forslå at du enten skriver $i i value på checkboksen eller skifter $i ud på arrayet med id. så du kan gøre sådan:

foreach($_POST['selected'] as $val){
if (strlen($val)>0){
  $sql = "INSERT INTO `foo` SET
          `navn` = '".mysql_real_escape_string($my_data[$val]['navn'])."',
          `emailadresse` = '".mysql_real_escape_string($my_data[$val]['emailadresse'])."'
}
}

det jeg prøver at sige er at det du har i value på din checkbox skal være primær id'et i dit $my_data array. så det er nemt at hente ud ligesom $my_data[$val].
Avatar billede nemlig Professor
17. november 2008 - 09:28 #5
Jeg har prøvet med følgende kode:

if(isset($_GET['update']) && $_GET['update']) {

foreach($_POST['selected'] as $val){
if (strlen($val)>0){
  $sql = "INSERT INTO `nytabel` SET
          `navn` = '".mysql_real_escape_string($my_data[$val]['navn'])."',
          `emailadresse` = '".mysql_real_escape_string($my_data[$val]['emailadresse'])."'";
    database($sql);
}}}

echo "
<form action='".$_SERVER['PHP_SELF']."?update=true' method=post>";
for($i = 0; $i < count($my_data); $i++){
?>
<input type="checkbox" value="'.$my_data[$i]['id'].'" name="selected[]" />
<?php
echo $my_data[$i]['navn']." - ";
echo $my_data[$i]['emailadresse']."<br />";
}
echo "<input type='submit' value='Gem valgte'>";
echo "</form>";

I min tabel har jeg 3 felter, nemlig [id], [navn], [emailadresse].
Jeg får ingen fejl, men der bliver heller ikke smidt navn og emailadresse i tabellen.
Hvis jeg har selected 6 poster, så bliver der godt nok indsat 6 poster, men de er tomme (bortset fra at id sættes, da jeg anvender auto_increment).

Kan du se fejlen.
Avatar billede jordz Nybegynder
17. november 2008 - 10:08 #6
hmm du har igen ikke lavet så du kan bruge $my_data[$val]['navn'] du skal sætte din value i checkboksen til primary value.
sådan her:

if(isset($_GET['update']) && $_GET['update']) {

foreach($_POST['selected'] as $val){
if (strlen($val)>0){
  $sql = "INSERT INTO `nytabel` SET
          `navn` = '".mysql_real_escape_string($my_data[$val]['navn'])."',
          `emailadresse` = '".mysql_real_escape_string($my_data[$val]['emailadresse'])."'";
    database($sql);
}}}

echo "
<form action='".$_SERVER['PHP_SELF']."?update=true' method=post>";
for($i = 0; $i < count($my_data); $i++){
?>
<input type="checkbox" value="'.$i.'" name="selected[]" />
<?php
echo $my_data[$i]['navn']." - ";
echo $my_data[$i]['emailadresse']."<br />";
}
echo "<input type='submit' value='Gem valgte'>";
echo "</form>";

du skal jo tænke på at det ikke er sikkert at $i == $my_data[$i]['id'].
Avatar billede nemlig Professor
17. november 2008 - 10:38 #7
Sorry, men jeg sgu ikke så skarp på dette her.
Men det oprettes fortsat tomme poster.

Mener du, at jeg skal ændre den måde, jeg gemmer dataene i mit array?
Jeg gemmer på denne måde:

    $sql = "SELECT * FROM user WHERE menu_5 = 1";
    $res = database($sql);
   
while($row = mysql_fetch_assoc($res))
{
            $my_data[] = array(
            'navn'         => $row['navn'],
            'emailadresse'     => $row['emailadresse']);
}
Avatar billede nemlig Professor
18. november 2008 - 12:06 #8
Er det mon muligt, at afslutte tråden. Jeg mangler lige den sidste tilpasning, da felterne fortsat er tomme.
Avatar billede nemlig Professor
18. november 2008 - 21:03 #9
Jeg har været lidt utålmodig og har fået svaret i et ny spørgsmål her på Eksperten.
Men jeg vil gerne give pointene for dine bidrag.
Så send venligst et svar.
Avatar billede nemlig Professor
29. november 2008 - 22:59 #10
lukketid.
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