Avatar billede michaeltryl Seniormester
09. januar 2007 - 12:43 Der er 42 kommentarer og
1 løsning

array problem

jeg har denne form
<?
$sql = "SELECT modulid, navn, aktiv, visning FROM moduler ORDER BY modulid DESC";
$moduler = mysql_query( $sql ) or die(mysql_error());
while ( $c = mysql_fetch_array($moduler))
{
    $id = $c['modulid'];
    $navn = $c['navn'];
    $akt = ( $c['aktiv'] == 1 ? ' checked="checked"' : '' );
    $visning = $c['visning'];
   
    echo"<tr>";
    echo "<td><input type='checkbox' name='modul[]'" . $akt . " value='$id'> $navn</td>";
    echo"<td><input type='text' name='visning[]' value='$visning' size='3' maxlength='255'></td>";
    echo"</tr>";
}
?>

med tilhørende kode

else if ( is_array($_POST['modul']) && count( $_POST['modul'] ) > 0 )
{
    $sql = "UPDATE moduler SET aktiv = 0";
    mysql_query( $sql ) or die(mysql_error());
    $res = array();
    foreach ( $_POST['modul'] as $modul )
    {
      $res[] = intval( $modul );
    }
        $ids = implode( ",", $res );
$sql = "UPDATE moduler SET aktiv = 1 WHERE modulid IN ($ids)";
    mysql_query($sql) or die(mysql_error());

$nres = array();
    foreach ( $_POST['visning'] as $visning )
    {
      $nres[] = intval( $visning );
    }
$nsql = "UPDATE moduler SET visning = '$visning' WHERE modulid IN ($ids)";
    mysql_query($nsql) or die(mysql_error());

$_SESSION['nej'] = 0;

    header("Location: ret-moduler.php");
    exit;
}

den registrere fint når jeg krydser checkboksene, men de tal jeg skriver i text boxen bliver ikke indsat i tabellen.
En som kan se hvor fejlen er?
Avatar billede michaeltryl Seniormester
09. januar 2007 - 14:25 #1
jeg har nu prøvet med

    $sql = "UPDATE moduler SET aktiv = 0";
    mysql_query( $sql ) or die(mysql_error());
    $res = array();
    foreach ( $_POST['modul'] as $modul )
    {
      $res[] = intval( $modul );
    }
        $ids = implode( ",", $res );

$nres = array();
    foreach ( $_POST['visning'] as $visning )
    {
      $nres[] = intval( $visning );
    }
        $idss = implode( ",", $nres );
       
$sql = "UPDATE moduler SET aktiv = 1, visning ='$idss' WHERE modulid IN ($ids)";
    mysql_query($sql) or die(mysql_error());

udskriver jeg $idss med kommer den fint med alle tal som bliver skrivet i tekst felterne, men opdatere kun med det første tal der skrives.
så jeg tror visning ='$idss' skal se lidt anderledes ud
Avatar billede fixxxer Nybegynder
09. januar 2007 - 15:38 #2
Hvis feltet "visning" er af typen char/varchar eller anden teksttype, så burde du sagtens kunne:

UPDATE moduler SET aktiv = 1, visning ='1,2,3,4,5,6' WHERE ...
Avatar billede fixxxer Nybegynder
09. januar 2007 - 15:38 #3
Har du prøvet at echo'e din update-sql ?
Avatar billede zynzz Praktikant
09. januar 2007 - 20:02 #4
Ja prøv at echo den, ellers prøv:

UPDATE moduler SET aktiv = '1', visning ='".$idss."' WHERE modulid IN (".$ids.")
Avatar billede michaeltryl Seniormester
10. januar 2007 - 01:03 #5
feltet der skal opdateres er af typen DECIMAL
hvis jeg udfylder tekst felterne med henholdsvis
5, 4, 3, 2 og 1 startende fra toppen og ned bliver alle "visning" felterne i databasen opdateret med tallet 5
så der skal køres update de antal gange der er felter i array. (i dette eksempel 5 gange)
UPDATE moduler SET aktiv = 1, visning ='5' WHERE
UPDATE moduler SET aktiv = 1, visning ='4' WHERE
osv..... jeg kan bare ikke regne ud hvilken variabel jeg skal indsætte i update
Avatar billede michaeltryl Seniormester
10. januar 2007 - 01:21 #6
jeg har lige prøvet
    $sql = "UPDATE moduler SET aktiv = 0";
    mysql_query( $sql ) or die(mysql_error());
    $res = array();
    foreach ( $_POST['modul'] as $modul )
    {
      $res[] = intval( $modul );
    }
        $ids = implode( ",", $res );

    $nres = array();
    foreach ( $_POST['visning'] as $visning )
    {
      $nres[] = intval( $visning );
    }
        $nids = implode( ",", $nres );
     
$sql = "UPDATE moduler SET aktiv = 1, visning ='$nids' WHERE modulid IN ($ids)";
    mysql_query($sql) or die(mysql_error());
    echo"$nids";

og det echo udskriver 5,4,3,2,1, men samme resultat som før i databasen måske det er fordi det er DECIMAL som felt type, men det skal det blive ved at være da det er dette felt der senere skal sorteres efter
Avatar billede michaeltryl Seniormester
10. januar 2007 - 02:16 #7
echo"sql";
istedet for
echo"$nids"; giver

UPDATE moduler SET aktiv = 1, visning ='5,4,2,3,1' WHERE modulid IN (9,8,5,4,1)
Avatar billede fixxxer Nybegynder
10. januar 2007 - 07:50 #8
...
    foreach ( $_POST['visning'] as $visning )
    {
      $sql = "UPDATE moduler SET aktiv = 1, visning ='".intval( $visning )."' WHERE modulid IN ($ids)";
      mysql_query($sql) or die(mysql_error());
    }
...


hvis jeg forstår dig korrekt..
Avatar billede fixxxer Nybegynder
10. januar 2007 - 07:51 #9
men omvendt giver det jo heller ikke rigtig nogen mening - mon ikke du skal have en relationstabel mere imellem?
Avatar billede michaeltryl Seniormester
10. januar 2007 - 10:48 #10
det virker ikke jeg har lagt en prøve ud her
http://localhost/demo/admin/moduler/test.php
felterne visning skal udfyldes med den rækkefølge man vil vise modulerne i.

test-send.php ser i dette eksempel sådan ud
-----------------
if ( is_array($_POST['modul']) && count( $_POST['modul'] ) > 0)
{
  $sql = "UPDATE moduler SET aktiv = 0";
    mysql_query( $sql ) or die(mysql_error());
    $res = array();
    foreach ( $_POST['modul'] as $modul )
    {
      $res[] = intval( $modul );
    }
        $ids = implode( ",", $res );

    $nres = array();
    foreach ( $_POST['visning'] as $visning )
    {
      $nres[] = intval( $visning );
  $sql = "UPDATE moduler SET aktiv = 1, visning ='".intval( $visning )."' WHERE modulid IN ($ids)";
    mysql_query($sql) or die(mysql_error());
  }
        $nids = implode( ",", $nres );
     
$_SESSION['nej'] = 0;

    header("Location: test.php");
    exit;
------------------------
hvor er det du vil have en relationstabel imellem det er jo data i tabellen moduler der skal sorteres efter feltet visning?
Avatar billede michaeltryl Seniormester
10. januar 2007 - 10:49 #11
den adresse er forkert den rigtige er her
http://demo.magiske-michael.dk/admin/moduler/test.php
Avatar billede michaeltryl Seniormester
11. januar 2007 - 15:04 #12
har du eller andre et bud på hvor fejlen er. jeg har hævet point da det ikke var så nemt at løse som jeg havde troet
Avatar billede fixxxer Nybegynder
11. januar 2007 - 16:22 #13
Jeg har svært ved at sætte mig ind i hvad du helt præcist vil, så hvis jeg skal kunne hjælpe yderligere, må jeg bede dig om at uddbybe hvad det er du helt præcist prøver at strikke sammen, hvilke tabeler du gemmer information i, og hvordan information relatere til hinnanden.
Avatar billede michaeltryl Seniormester
11. januar 2007 - 16:36 #14
eksempel side er her:
http://demo.magiske-michael.dk/admin/moduler/test.php
og billede af databasen her:
http://demo.magiske-michael.dk/admin/moduler/modul.JPG

på eksempel siden ser du 5 checkbokse med tilhørene tekst felter
denne form er udskrevet sådan

<?
$sql = "SELECT modulid, navn, aktiv, visning FROM moduler ORDER BY modulid DESC";
$moduler = mysql_query( $sql ) or die(mysql_error());
while ( $c = mysql_fetch_array($moduler))
{
    $id = $c['modulid'];
    $navn = $c['navn'];
    $akt = ( $c['aktiv'] == 1 ? ' checked="checked"' : '' );
    $visning = $c['visning'];
   
    echo"<tr>";
    echo "<td><input type='checkbox' name='modul[]'" . $akt . " value='$id'> $navn</td>";
    echo"<td><input type='text' name='visning[]' value='$visning' size='3' maxlength='255'></td>";
    echo"</tr>";
}
?>

tjekker du checkboksene af eller fjerne det opdateres databasen i feltet aktiv med 1 hvis det checked og 0 hvis det ikke er

tekst felterne skal så udfyldes med tal f.eks

Forum = 5
Vennebog = 1
Nyheder = 3
Event = 2
Konkurrence = 4

disse tal skal puttes ind i feltet visning i databasen. sådan de passer til det modul de er skrevet ud for. Så Vennebog bliver = 1 i visning osv.

Senere skal denne tabel sorteres efter feltet visning.

Håber dette var en bedre forklaring ellers må du spørge :-)
Avatar billede michaeltryl Seniormester
13. januar 2007 - 18:21 #15
har du et bud på en løsning?
Avatar billede michaeltryl Seniormester
16. januar 2007 - 10:33 #16
har du et bud ellers vil jeg lukke dette spørgsmål
Avatar billede fixxxer Nybegynder
16. januar 2007 - 10:50 #17
echo "<td><input type='checkbox' name='modul[$id]'" . $akt . " value='$id'> $navn</td>";



...

mysql_query("UPDATE moduler SET visning = 0");

foreach ($_POST['modul'] as $modulvalg) {
    $sql = "UPDATE moduler SET aktiv = 1, visning ='1' WHERE modulid = $modulvalg";
    mysql_query($sql) or die(mysql_error());
}
Avatar billede fixxxer Nybegynder
16. januar 2007 - 10:54 #18
Det kunne også være at det er dit "aktiv"-felt vi arbejder med:

mysql_query("UPDATE moduler SET aktiv = 0");

foreach ($_POST['modul'] as $modulvalg) {
    $sql = "UPDATE moduler SET aktiv = 1 WHERE modulid = $modulvalg";
    mysql_query($sql) or die(mysql_error());
}
Avatar billede michaeltryl Seniormester
16. januar 2007 - 11:00 #19
opdateringen at aktiv virker fint. det er opdateringen af feltet "visning" i tabellen som er problemt. værdien disse felter skal opdateres med skal hentes fra
echo"<td><input type='text' name='visning[]' value='$visning' size='3' maxlength='255'></td>";
Avatar billede fixxxer Nybegynder
16. januar 2007 - 11:04 #20
Er visning en rækkefølge, eller blot 0/1 afhænging om siden skal vises eller ej?
Avatar billede michaeltryl Seniormester
16. januar 2007 - 11:48 #21
visning er en rækkefølge.
aktiv er blot 0/1
Avatar billede fixxxer Nybegynder
16. januar 2007 - 12:32 #22
Well, så er vi ude i noget ala:

echo"<td><input type='text' name='visning[$id]' value='$visning' size='3' maxlength='255'></td>";


...

foreach ($_POST['modul'] as $modulvalg => $modulvisning) {
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";
    mysql_query($sql) or die(mysql_error());
}
Avatar billede michaeltryl Seniormester
16. januar 2007 - 13:33 #23
måske har jeg indsat update koden forkert, men det virker ikke.
den ser lige nu sådan ud

else if ( is_array($_POST['modul']) && count( $_POST['modul'] ) > 0)
{
  $sql = "UPDATE moduler SET aktiv = 0";
    mysql_query( $sql ) or die(mysql_error());
    $res = array();
    foreach ( $_POST['modul'] as $modul )
    {
      $res[] = intval( $modul );
    }
        $ids = implode( ",", $res );

    $nres = array();
foreach ($_POST['modul'] as $modulvalg => $modulvisning)
{
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";
    mysql_query($sql) or die(mysql_error());
}     

det som sker er.
checkbokse bliver opdateret til 0 (ikke checked)
visning bliver opdateret til
Forum = 4
Vennebog = 1
Nyheder = 2
Event = 3
Konkurrence = 4

uanset hvordan jeg udfylder dem.
Avatar billede michaeltryl Seniormester
16. januar 2007 - 13:34 #24
hvis du undre dig over at der står
else if i stedet for if er det fordi jeg længere oppe tjekker om fjern alle eller aktver alle er markeret
Avatar billede michaeltryl Seniormester
16. januar 2007 - 13:37 #25
felterne bliver udfyldt sådan
Forum = 0
Vennebog = 1
Nyheder = 2
Event = 3
Konkurrence = 4

men de skal opdateres med de tal jeg selv skriver i dem
Avatar billede fixxxer Nybegynder
16. januar 2007 - 13:50 #26
Har du husket

echo"<td><input type='text' name='visning[$id]' value='$visning' size='3' maxlength='255'></td>";


.. og at $id faktisk er sat jf. 09/01 2007 12:43:15
Avatar billede michaeltryl Seniormester
16. januar 2007 - 13:51 #27
har lige prøvet med følgende kode. så bliver chekboksene opdateret rigtigt, men tekst boksene driller stadig

else if ( is_array($_POST['modul']) && count( $_POST['modul'] ) > 0)
{
  $sql = "UPDATE moduler SET aktiv = 0";
    mysql_query( $sql ) or die(mysql_error());
    $res = array();
    foreach ( $_POST['modul'] as $modul )
    {
      $res[] = intval( $modul );
    }
        $ids = implode( ",", $res );

    $nres = array();
 
  $sql = "UPDATE moduler SET aktiv = 1 WHERE modulid IN ($ids)";
    mysql_query($sql) or die(mysql_error());
        $nids = implode( ",", $nres );
     
foreach ($_POST['modul'] as $modulvalg => $modulvisning)
{
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";
    mysql_query($sql) or die(mysql_error());
    }



$_SESSION['nej'] = 0;

    header("Location: ret-moduler1.php");
    exit;
}
Avatar billede michaeltryl Seniormester
16. januar 2007 - 13:55 #28
ja det har jeg husket og på
http://demo.magiske-michael.dk/admin/moduler/test.php
har jeg lige indsat $id før alle chekbokse og de er sat
Avatar billede fixxxer Nybegynder
16. januar 2007 - 14:09 #29
foreach ($_POST['visning'] as $modulvalg => $modulvisning)
{
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";
    mysql_query($sql) or die(mysql_error());
    }
Avatar billede michaeltryl Seniormester
16. januar 2007 - 14:17 #30
indlægget 16/01-2007 13:51:16 nederst i koden der har jeg indsat
foreach ($_POST['visning'] as $modulvalg => $modulvisning)
{
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";
    mysql_query($sql) or die(mysql_error());
    }

du kan teste det på den side jeg postede i mit forrige indlæg. prøv at udfylde tekst feltet ud for f.eks Nyheder med tallet 4. trykker du så på knappen opdater bliver det rettet til 2, men det skal forblive med at være 4
Avatar billede fixxxer Nybegynder
16. januar 2007 - 14:37 #31
Så går vi til debugging..

foreach ($_POST['visning'] as $modulvalg => $modulvisning)
{
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";
    echo $sql."<br>";
    mysql_query($sql) or die(mysql_error());
    }


Prøv øverst i dit dokument at indsætte:

print_r($_POST['vising']);

Kopier resultatet herind.
Avatar billede michaeltryl Seniormester
16. januar 2007 - 15:02 #32
echo $sql."<br>"; giver

UPDATE moduler SET visning ='5' WHERE modulid = 0
UPDATE moduler SET visning ='4' WHERE modulid = 1
UPDATE moduler SET visning ='3' WHERE modulid = 2
UPDATE moduler SET visning ='2' WHERE modulid = 3
UPDATE moduler SET visning ='1' WHERE modulid = 4

mens print_r($_POST['vising']); ikke giver noget resultat
Avatar billede fixxxer Nybegynder
16. januar 2007 - 16:24 #33
print_r($_POST['visning']);
Avatar billede michaeltryl Seniormester
16. januar 2007 - 16:34 #34
ja den udskriver intet på siden. jeg har indsat den lige under session start på siden hvor update scriptet er, men den udskriver ingenting. Jeg kender godt den funktion den burde udskriv hvad der er i det array visning og undre mig over hvorfor der ikke kommer noget
Avatar billede fixxxer Nybegynder
16. januar 2007 - 22:38 #35
Prøv at ligge mærke til den forskel der. Der manglede et n i det første eksempel jeg gav.


print_r($_POST['visning']);

Da dine "input"-felter hedder "visning[$i]".
Avatar billede michaeltryl Seniormester
16. januar 2007 - 22:51 #36
ahh det havde jeg ikke lige set. nu skete der noget
udfylder jeg felterne sådan
Forum = 1
Vennebog = 2
Nyheder = 3
Event = 4
Konkurrence = 5

giver den følgende udskrift
Array ( [5] => 1 [4] => 2 [3] => 3 [2] => 4 [1] => 5 )
og echo $sql giver det samme som indlæg 16/01-2007 15:02:04
Avatar billede fixxxer Nybegynder
16. januar 2007 - 22:57 #37
Så er vi tilbage ved


echo"<td><input type='text' name='visning[$id]' value='$visning' size='3' maxlength='255'></td>";


Tjek at $id nu også indeholder det rigtige modulid.
Avatar billede fixxxer Nybegynder
16. januar 2007 - 22:59 #38
prøv lige at kopiere scriptet her ind som det ser ud n
Avatar billede michaeltryl Seniormester
16. januar 2007 - 23:06 #39
formularen er her og $id indeholder rigtigt modulid ved alle

<form name='moduler' method='POST' ACTION='test-send.php'>
<table><tr>
<td><input type='checkbox' name='slet_alle' value='1'> Fjern alle</td><td></td></tr>
<tr><td> <input type='checkbox' name='alle' value='1'> Aktiver alle</td><td></td></tr>
<tr><td><b>Modul</b></td><td><b>Visning</b></td></tr>
<?
$sql = "SELECT modulid, navn, aktiv, visning FROM moduler ORDER BY modulid DESC";
$moduler = mysql_query( $sql ) or die(mysql_error());
while ( $c = mysql_fetch_array($moduler))
{
    $id = $c['modulid'];
    $navn = $c['navn'];
    $akt = ( $c['aktiv'] == 1 ? ' checked="checked"' : '' );
    $visning = $c['visning'];
   
    echo"<tr>";
    echo "<td>$id<input type='checkbox' name='modul[]'" . $akt . " value='$id'> $navn</td>";
    echo"<td><input type='text' name='visning[$id]' value='$visning' size='3' maxlength='255'></td>";

    echo"</tr>";
}
?>
</table>
<input class="inputknap" type="submit" value="Opdater">
</form>

---------------------

update koden er her

else if ( is_array($_POST['modul']) && count( $_POST['modul'] ) > 0)
{


$sql = "UPDATE moduler SET aktiv = 0";
    mysql_query( $sql ) or die(mysql_error());
    $res = array();
    foreach ( $_POST['modul'] as $modul )
    {
      $res[] = intval( $modul );
    }
        $ids = implode( ",", $res );

    $nres = array();
 
  $sql = "UPDATE moduler SET aktiv = 1 WHERE modulid IN ($ids)";
    mysql_query($sql) or die(mysql_error());
        $nids = implode( ",", $nres );
     
foreach ($_POST['modul'] as $modulvalg => $modulvisning)
{
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";
 
    echo $sql."<br>";
mysql_query($sql) or die(mysql_error());
    }



$_SESSION['nej'] = 0;

    header("Location: test.php");
    exit;
}
Avatar billede fixxxer Nybegynder
16. januar 2007 - 23:09 #40
Du har i 16/01-2007 14:17:54 rettet jf. 16/01-2007 14:09:39, men har i ovenstående ikke denne rettelse med:


foreach ($_POST['modul'] as $modulvalg => $modulvisning)
{
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";

    echo $sql."<br>";
mysql_query($sql) or die(mysql_error());
    }


skal være (jf 16/01-2007 14:09:39):

foreach ($_POST['visning'] as $modulvalg => $modulvisning)
{
    $sql = "UPDATE moduler SET visning ='$modulvisning' WHERE modulid = $modulvalg";

    echo $sql."<br>";
mysql_query($sql) or die(mysql_error());
    }
Avatar billede michaeltryl Seniormester
16. januar 2007 - 23:15 #41
hey det virker. jeg ved ikke lige hvorfor jeg har fået det rettet tilbage igen, men kom med et svar så får du din fortjente point
Avatar billede fixxxer Nybegynder
17. januar 2007 - 07:54 #42
svar
Avatar billede michaeltryl Seniormester
17. januar 2007 - 12:32 #43
tak for hjælpen
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

Seneste spørgsmål Seneste aktivitet
22 min siden Ny printer, men hvilken Af mort1 i Printere
I går 19:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging