Avatar billede cheeses Nybegynder
24. marts 2007 - 17:19 Der er 15 kommentarer og
1 løsning

Array problem

Jeg har brug for lidt hjælp til et lille problem.
Når jeg prøver at opdatere indholdet i en database opdatere den ikke...
Problemet er det felt der bliver hentet fra en anden side: $_POST['ret']. Den kan jeg ikke benytte når jeg skal have sendt noget til databasen.
Jeg har prøvet forskellige løsninger men ingen virker.

Kan i hjælpe?



<?php

if( isset($_POST['ret']) && is_array($_POST['ret']))
{     $ids = array_keys($_POST['ret']);
    $select = mysql_query("select * FROM sideindhold WHERE id IN(" . join($ids) . ");");

while ($row = mysql_fetch_object ( $select ))
    {
    ?>   
    <form id="ret_undermenu" name="ret_undermenu" method="POST" action="retundermenusend.php" target="_self" onSubmit="validering();return false;">
        <table border="0" cellspacing="0" cellpadding="2" width="550">
            <tr>
                <td><b>ID:</b></td>
                <td><input name="id" type="text" id="id" value="<?php echo $row->id; ?>" size="70"></td>
            </tr>
            <tr>
                <td><b>Overskrift*:</b></td>
                <td><input name="overskrift" type="text" id="overskrift" value="<?php echo $row->overskrift; ?>" size="70"></td>
            </tr>
            <tr>
                <td><b>Tekst*:</b></td>
                <td><textarea name="tekst" id="tekst" cols="70" rows="6"><?php echo $row->tekst; ?></textarea></td>
            </tr>
            <tr>
                <td><b>Billede*:</b></td>
                <td><input name="billede" type="text" id="billede" value="<?php echo $row->billede; ?>" size="70"></td>
            </tr>
            <tr>
                <td><b>Link Navn*:</b></td>
                <td><input name="navn" type="text" id="navn" value="<?php echo $row->navn; ?>" size="70"></td>
            </tr>
            <tr>
                <td><b>Profiltekst:</b></td>
                <td><select name="placering">
                <option></option>
                <option label="Forside">Forside</option>
                <option label="Dokumentation">Dokumentation</option>
                <option label="Kontakt">Kontakt</option>
                <option label="Indstillinger">Indstillinger</option>
                <option label="Administration">Administration</option>
                </select></td>
            </tr>
            <tr>
                <td><input name="Gem Data" type="submit" id="Gem Data" value="Gem Data" /></td>
                <td><b>* Skal Udfyldes.</b></td>
            </tr>
        </table>
//--------------------- Sender data til databasen ---------               
            <?php
    if($_POST['overskrift']!= '' && $_POST['tekst']!= '' && $_POST['navn']!= '' && $_POST['placering']!= '')
        {
        if($_POST['placering'] == 'Forside')
        {
            $sql_et = "update sideindhold set overskrift='".$_POST['overskrift']."', tekst='".$_POST['tekst']."', billede='".$_POST['billede']."', navn='".$_POST['navn']."', mainid='1' where id ='".$_POST['id']."';";
            echo ' opdateret!.';
        }
       
       
    }
    else if($_POST['overskrift']== '' && $_POST['tekst']== '' && $_POST['navn']== '' && $_POST['placering']== '')
    {
    echo 'Fejl';
    }
}
}    ?>   
    </form>
Avatar billede dkfire Nybegynder
24. marts 2007 - 17:31 #1
For det første tror jeg du blandet lidt oop sammen med arrays.

Det hedder ikke $row->id, da du ikke bruger mysqli. Det hedder derimod $row['id'].
Avatar billede dkfire Nybegynder
24. marts 2007 - 17:33 #2
Jeg kan ikke helt forstå hvorfor du har puttet ind form i en while-løkke.
Det bevirker jo bare at du kan få flere forms, med de samme id's for alle felterne.
Derved kan du ikke skelne dem fra hianden når du så skal gemme dem i databasen.
Eller er der noget jeg ikke lige har forstået med din kode ???
Avatar billede cheeses Nybegynder
24. marts 2007 - 18:08 #3
Jeg har lige prøvet med $row['id']. det virkede ikke.
I første form får jeg godt nok det rigtige id skrevet ud og det er med $row->id.
Det er ikke noget problem at få det indlæst i databasen med id'et da id'et er primær nøgle i tabellen.

ellers andre forslag?
Avatar billede dkfire Nybegynder
24. marts 2007 - 18:22 #4
Jeg forstår stadig ikke hvorfor du vil have flere forms på samme side.
Avatar billede cheeses Nybegynder
24. marts 2007 - 18:29 #5
1. dataen kommer fra en anden form fra en anden side.
2. der er kun én form på denne siden og det er der hvor dataen fra tabellen bliver fremvist. Herefter skal dataen sendes tilbage til tabellen, og der er her det hele går galt. og det er ID'et som ikke kommer med. Det gør at dataen ikke bliver skrevet ned i tabellen igen.
Avatar billede scr Nybegynder
24. marts 2007 - 18:47 #6
Nu ved jeg ikke om du med vilje har udeladt dele af koden, men husker du at køre mysql_query( $sql_et );?

Dernæst synes jeg fejlbeskrivelsen er kryptisk
Hvad menes der f.eks. med:
"Problemet er det felt der bliver hentet fra en anden side: $_POST['ret']. Den kan jeg ikke benytte når jeg skal have sendt noget til databasen."?
Avatar billede cheeses Nybegynder
24. marts 2007 - 18:54 #7
mysql_query( $sql_et ); er vel egentlig ligemeget da det er data der skal sendes til databasen. så jeg kunne egentlig have skrevet f.eks:

mysql_query ("update sideindhold set overskrift='".$_POST['overskrift']."', tekst='".$_POST['tekst']."', billede='".$_POST['billede']."', navn='".$_POST['navn']."', mainid='1' where id ='".$row['id']."';");

sorry med fejlbeskrivelsen. Problemet er at jeg ikke kan sende id'et videre til databasen. og $_POST['ret'] er id'et der bliver sendt fra den anden side i et array. Herefter bliver værdien læst ud i den der hedder  $row->id. men jeg kan ikke få $row-id til at blive sendt i mysql queryen:
$sql_et = "update sideindhold set overskrift='".$_POST['overskrift']."', tekst='".$_POST['tekst']."', billede='".$_POST['billede']."', navn='".$_POST['navn']."', mainid='1' where id ='".$_POST['id']."';";
Avatar billede showsource Seniormester
25. marts 2007 - 06:46 #8
$select = mysql_query("select * FROM sideindhold WHERE id IN (". join(",", $ids) .")") or die (mysql_error());
Avatar billede cheeses Nybegynder
25. marts 2007 - 13:23 #9
Desværre det hjalp heller ikke. Den skriver stadig ikke til databasen.
Avatar billede cheeses Nybegynder
25. marts 2007 - 14:08 #10
og det er heller ikke der problemet er for jeg kan godt læse værdien ud 1gang, men når jeg skal bruge variablen nede i den anden sql query så kan jeg ikke bruge den.
Avatar billede showsource Seniormester
25. marts 2007 - 15:02 #11
Umiddelbart, er det måske ikke dit problem, men burde gi' dig et problem?
IN (13456)
virker ikke hos mig, anyway, men
IN (1,3,4,5,6)
henter de rows som findes.

At du bruger en form for hvert row kan du jo godt.
Men du kunne også lade "textid" være et array
<input name="id[]" type="hidden" value="<?php echo $row->id; ?>">

Ved opdatering,

if(isset($_POST["id"])) {
    foreach($_POST as $key => $value) {
        if(trim($value == "")) {
        echo"Fejl i indtastning!!! ( ". $key ." );
        exit;
        }
    }

udfør query
}


Og noget sikkerhed ved insert bør bruges.
+ du bør bruge htmlspecialchars()
echo htmlspecialchars($row->overskrift)
ved vising i formular.

Og en anden ting som kan være nyttig ved fejlfinding, er den simple, "Vis kode" i din webbrowser.
Avatar billede cheeses Nybegynder
25. marts 2007 - 15:25 #12
Nej der giver mig ingen problemer da det kun er 1 ID værdi der bliver sendt fra en anden side.

men vil det sige at koden så f.eks. vil se sådan ud?:

if(isset($_POST["id"])) {
    foreach($_POST as $key => $value) {
        if(trim($value == "")) {
        echo"Fejl i indtastning!!! ( ". $key ." )";
        exit;
        }
    }

            if($_POST['overskrift']!= '' && $_POST['tekst']!= '' && $_POST['navn']!= '' && $_POST['placering']!= '')
                {
                    if($_POST['placering'] == 'Forside')
                    {
                    $sql_et = "update sideindhold set overskrift='".$_POST['overskrift']."', tekst='".$_POST['tekst']."', billede='".$_POST['billede']."', navn='".$_POST['navn']."', mainid='1' where id ='".$row-id."';";
                        echo 'Undermenuen er nu opdateret1.';                       
                    }

                }
                else if($_POST['overskrift']== '' && $_POST['tekst']== '' && $_POST['navn']== '' && $_POST['placering']== '')
                {
                    echo 'Fejl';
                }
            }
    }}
Avatar billede dkfire Nybegynder
25. marts 2007 - 19:59 #13
Hvorfor er det lige du ligger ID fra den anden side ind i et array ???
f( isset($_POST['ret']) && is_array($_POST['ret']))

Hvis du alligevel kun modtager et ID, så er det vel ingen grundt til at have det i et array. Så kan du spare while() og array_keys().

Hvis jeg var dig ville jeg lægge min insætning til databasen uden for den første if-sætning.
Avatar billede cheeses Nybegynder
25. marts 2007 - 21:28 #14
jeg ligger id'et ind i et array da der kan være flere forskellige indlæg i databasen.
Men koden til den første side hvor dataen bliver sendt fra ser sådan ud:
<table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td><h1> Administrations Område </h1></td>
            </tr>
            <tr>
                <td>
                <div> Ret Undermenu</div><br />
                <table border="0" width="200px">
                    <form action="retundermenu.php"  method="post" target="_self">
                        <tr>
                            <td>Placering:</td>
                            <td><select name="placering">
                            <option></option>
                            <option label="Forside">Forside</option>
                            <option label="Dokumentation">Dokumentation</option>
                            <option label="Kontakt">Kontakt</option>
                            <option label="Indstillinger">Indstillinger</option>
                            <option label="Administration">Administration</option>
                            </select></td>
                        </tr>
                        <tr>
                            <td><input type="submit" name="Søg" value="Søg"></td>
                        </tr>
                    </form>
                </table>
                <?php
                if ($_POST['placering'] !='')
                {
                    if($_POST['placering'] == 'Forside')
                    {       
                        $select_sql = "SELECT * FROM `sideindhold` WHERE mainid = '1'; ";
                    }
                    if($_POST['placering'] == 'Dokumentation')
                    {       
                        $select_sql = "SELECT * FROM `sideindhold` WHERE mainid = '2'; ";
                    }
                    if($_POST['placering'] == 'Kontakt')
                    {       
                        $select_sql = "SELECT * FROM `sideindhold` WHERE mainid = '3'; ";
                    }
                    if($_POST['placering'] == 'Indstillinger')
                    {       
                        $select_sql = "SELECT * FROM `sideindhold` WHERE mainid = '4'; ";
                    }
                    if($_POST['placering'] == 'Administration')
                    {       
                        $select_sql = "SELECT * FROM `sideindhold` WHERE mainid = '5'; ";
                    }
                }
                            echo '<form id="retundermenuen" name="retundermenuen" method="POST" action="retundermenusend.php">';
                            echo '<table border="0" align="center" style="border:1px solid #000000"; width="100%" cellpadding="0">';
                            echo '    <tr>';
                            echo '        <td width="30px"><b>ID:</b></td>';
                            echo '        <td width="100px"><b>Overskrift:</b></td>';
                            echo '        <td width="100px"><b>Tekst:</b></td>';
                            echo '        <td width="100px"><b>Billede:</b></td>';
                            echo '        <td width="100px"><b>Link Navn:</b></td>';
                            echo '        <td width="150px"><b>Placering:</b></td>';
                            echo '    </tr>';
                    $result = mysql_query( $select_sql );
                    while ( $row = mysql_fetch_object ( $result ) )
                    {
                            echo '<tr ><td colspan="8"><hr size="1" color="#000000"></td></tr>';
                            echo '    <tr>';
                            echo '        <td>'. $row->id .'</td>';
                            echo '        <td>'. $row->overskrift. '&nbsp</td>';
                            echo '        <td>'. $row->tekst.'&nbsp</td>';
                            echo '        <td>'. $row->billede.'</td>';
                            echo '        <td>'.$row->navn.'</td>';
                            if($row->mainid ==1){
                            echo '        <td>Forside</td>';
                            }
                            if($row->mainid ==2){
                            echo '        <td>Dokumentation</td>';
                            }
                            if($row->mainid ==3){
                            echo '        <td>Kontakt</td>';
                            }
                            if($row->mainid ==4){
                            echo '        <td>Indstillinger</td>';
                            }
                                if($row->mainid ==5){
                            echo '        <td>Administration</td>';
                            }
                            echo '        <td><input name="ret['.$row->id.']" type="submit" value="Ret Undermenu" ></td>';
                            echo '    </tr>';
                    }
                    echo '</table>';
        //            echo '<input name="retundermenu" type="submit" id="retundermenu" value="Ret Undermenu" />';
                    echo '</form>';
                   
                ?>
                </td>
            </tr>
        </table>
Avatar billede dkfire Nybegynder
25. marts 2007 - 22:32 #15
Lige ved først øjekast kan jeg se at din option mangler en value
<option value="enværdi">noget tekst</option>

Så vidt jeg kan se, så er det kun muligt at rette en side af gangen ?
Så kunne du lave din form om så istedet for at have mange forskellige submit kanpper, så bare have en button ala
<input type="button" name="Ret" value="Ret Undermenu" onclick="window.location.href='retundermenusend.php?Id=$row->id'">

Skal nok rettes lidt til, men det er bare en ide.
Du skal så bare lige tilpasse din anden side til at modtage $_GET['Id'].
Så slipper du for at det array når du alligevel kun sender en værdi videre.
Avatar billede cheeses Nybegynder
24. april 2007 - 14:58 #16
løsning fundet et andet sted. lukker nu.
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