Avatar billede Morten Nybegynder
13. juli 2007 - 02:23 Der er 16 kommentarer

Form submit

HJÆLP... ;O)

Jeg har en form med en del Dropdown bokse. Nogle af disse har værdier som er afhængige af værdier i andre bokse så derfor gør jeg så'n med dem:

                <td>
                    <select name="selskab" onchange="this.form.submit()">
                        <option value="">Vælg Selskab</option>
                        <?php while($sels = mysql_fetch_array($ope_query)){
                                    if($_POST['selskab'] == $sels['id']){ ?>
                                            <option value="<?php echo $sels['id']; ?>" selected="selected">
                                                <?php echo $sels['navn']; ?>
                                            </option>
                                <?php }else{ ?>
                                            <option value="<?php echo $sels['id']; ?>">
                                                <?php echo $sels['navn']; ?>
                                            </option>
                                <?php }
                                    } ?>
                    </select>
                </td>
            </tr>
            <tr>
                <td>
                    Abn.
                </td>
                <td>
                    <select name="abonnement">
                        <option>Vælg Abn.</option>
                        <?php if($_POST['selskab']){
                                $abn_sql = "SELECT * FROM sgdb WHERE oper_id = ".$_POST['selskab']."";
                                $abn_query = mysql_query($abn_sql) or die(mysql_error());

                                while($abnno = mysql_fetch_array($abn_query)){
                                    if($_POST['abonnement'] == $abnno['id']){ ?>
                                        <option value="<?php echo $abnno['id']; ?>" selected="selected">
                                            <?php echo $abnno['abonnement']; ?>
                                        </option>
                                    <?php }else{ ?>
                                        <option value="<?php echo $abnno['id']; ?>">
                                            <?php echo $abnno['abonnement']; ?>
                                        </option>
                                    <?php }
                                        }
                                    }
                                ?>
                    </select>
                </td>

Jeg gemmer i DB så'n her:

    // If the form was submitted...
    if($_POST['action'] == 'Opret')
    {
   
    // To get a datetime stamp in the
    // date_added column
    //$_POST['date_added'] = 'DATESTAMP';
   
    // Add values to my_tbl
    if(!$SQL->AddToDB('sgdb_telefoni'))
      die( $SQL->GetError() );
   

    $_POST['action']="ABSOLUT NOTHING";

}
Som i kan se tjekker jeg på værdien af submit knappen, problemet opstår hvis brugeren klikker refresh i sin browser for så bliver der gemt i DB'en - hvorfor det? det undre mig at det ikke sker når jeg submitter formen via valg i mine dropdown bokse?

Som I også kan se forsøger jeg at ændre værdien af knappen men det er vel håbløst når så knappen senere bliver genereret:
<input name="action" type="submit" value="Opret">

for så får den jo værdien opret eller?

Nogen der kan give et hint...?
Avatar billede kimg Nybegynder
13. juli 2007 - 02:46 #1
En mulighed kunne være at indsætte en checkbox ved siden af din submit knap, og så checke på den i stedet for.

Kim
Avatar billede Morten Nybegynder
13. juli 2007 - 02:48 #2
Så man skal sætte et hak før end der kan submittes -- ahhh... det synes jeg er en dårlig løsning... det må da kunne lade sig gøre - kan man ikke styre formens action for så kan jeg bare flytte mit Gem til en anden side ....?
Avatar billede jakobdo Ekspert
13. juli 2007 - 11:08 #3
Avatar billede olebole Juniormester
13. juli 2007 - 14:11 #4
<ole>

At kalde et form-element for 'action' er en rigtig skidt idé, når formen har en attribut/property, som hedder det samme. Den bør du døbe om.

Derudover kan jeg ikke se, hvordan der skulle blive postet noget ved tryk på F5 - med mindre brugeren allerede inden har postet formen. Noget mere kode/forklaring vil hjælpe  =)

/mvh
</bole>
Avatar billede jakobdo Ekspert
13. juli 2007 - 14:18 #5
Jeg har prøvet at lave noget slamkode, og nu Olebole er med på side linien, så bliver er min kode dødsdømt fra start! :o)

Men se her: http://www.codebreaker.dk/exp/787350exp.php
Avatar billede jakobdo Ekspert
13. juli 2007 - 14:19 #6
Og det er bestemt ikke færdigt.
Avatar billede olebole Juniormester
13. juli 2007 - 14:22 #7
Ja, prototype.js er et rigtig skidt library ... og i øvrigt inkompatibelt med XHTML  =)
Avatar billede jakobdo Ekspert
13. juli 2007 - 14:34 #8
Olebole - offtopic: Hvorfor er det et skidt lib?
Avatar billede Morten Nybegynder
13. juli 2007 - 14:52 #9
Hej Ole .. nej du har ret - det der er til det (hvor er jeg dårlig til at forklare mig første gang ;O) er at man indtaster lad os kalde varelinier, en ad gangen, dvs. for hver varelinie submittes data og indsættes i tabel og du har helt ret - problemet opstår ikke før end der har været gemt en gang - og det må være fordi $_post variablerne så stadig har værdi... eller???

Måske er det hele opbygningen jeg skal ændre på - ville gerne gemme data i db via en ekstern side... men så er jeg nød til på en eller anden måde, først at tildele action i form elementet når der trykkes på submit knappen... for ellers vil der også blive submitted hver gang der vælges i dropdown boksene.... hmmmmmmm.. nogle gode forslag?

jakobdo... jeg når ikke at kigge på dine eksempler før engang i weekenden, men skal nok vende tilbage....
Avatar billede Morten Nybegynder
13. juli 2007 - 15:31 #10
Hej Jacob - det ser meget interessant ud (nåede lige at kigge lidt..) men... kan du ikke lave et eksempel (gerne simplet hvis det kan lade sig gøre lol) hvor du i dropdown bokene indlæser fra en mysql db, en kolonne som værdi i dropdown-boksen og en anden kolonne som beskrivelsen brugeren ser i dropdown boksen?
Avatar billede jakobdo Ekspert
14. juli 2007 - 07:35 #11
Min kode er bygget op over arrays.
http://www.codebreaker.dk/exp/787350exp.phps

Så du kan rette:

<?php
                if(is_array($menu[0]) && count($menu[0])>0)
                {
                    echo '<div id="divMenu1">';
                    echo '<select id="menu1" name="menu1" onchange="loadMenu(this,\'2\')">';
                    echo '<option value="0">V&aelig;lg menu</option>';
                    foreach($menu[0] AS $id => $value)
                    {
                        echo '<option value="'.$id.'">'.$value.'</option>';
                    }
                    echo '</select>';
                    echo '</div>';
                    echo '<div id="divMenu2"></div>';
                    echo '<div id="divMenu3"></div>';
                }
            ?>

til:

<?php
$query = mysql_query('SELECT id, navn FROM tabel ORDER BY navn');
if(mysql_num_rows($query)>0)
{
    echo '<div id="divMenu1">';
    echo '<select id="menu1" name="menu1" onchange="loadMenu(this,\'2\')">';
    echo '<option value="0">V&aelig;lg menu</option>';
    while($row = mysql_fetch_assoc($query))
    {
        echo '<option value="'.$row['id'].'">'.$row['navn'].'</option>';
    }
    echo '</select>';
    echo '</div>';
    echo '<div id="divMenu2"></div>';
    echo '<div id="divMenu3"></div>';
}
?>
Avatar billede Morten Nybegynder
14. juli 2007 - 08:14 #12
Tak!!

Hvor er sql udtrækket til menu 2 ?

Hos mig kommer fyldet til box 1 fra en tabel og fyldet til box 2 kommer fra en anden tabel hvor id = valg fra box 1.... er det hvad der sker i eksemplet?

Jeg prøver lige om jeg kan fedte det ind
Avatar billede Morten Nybegynder
14. juli 2007 - 08:18 #13
måske det ville være nemmere for en JS spasser som mig hvis du brugte mine så her er de to sql udtrækt:

1:     $pro_sql = "SELECT * FROM sgdb_telefoni_producent ORDER BY id ASC";
    $pro_query = mysql_query($pro_sql) or die(mysql_error());

                    <select name="producent" onchange="this.form.submit()">
                        <option value="">Vælg Producent</option>
                        <?php while($teleProd = mysql_fetch_array($pro_query)){
                            if($_POST['producent'] == $teleProd['id']){ ?>
                                <option value="<?php echo $teleProd['id'];?>" selected="selected">
                                    <?php echo $teleProd['navn']; ?>
                                </option>
                            <?php }else{ ?>
                                <option value="<?php echo $teleProd['id'];?>">
                                    <?php echo $teleProd['navn']; ?>
                                </option>
                            <?php }
                            } ?>
                    </select>
                       
                    <select name="model">
                        <option>Vælg Telefon</option>
                        <?php if($_POST['producent']){
                                $tlf_sql = "SELECT * FROM sgdb_telefoni_model WHERE producent = ".$_POST['producent']."";
                                $tlf_query = mysql_query($tlf_sql) or die(mysql_error());

                                while($telefon = mysql_fetch_array($tlf_query)){
                                    if($_POST['model'] == $telefon['id']){ ?>
                                        <option value="<?php echo $telefon['id']; ?>" selected="selected">
                                            <?php echo $telefon['model']; ?>
                                        </option>
                                    <?php }else{ ?>
                                        <option value="<?php echo $telefon['id']; ?>">
                                            <?php echo $telefon['model']; ?>
                                        </option>
                                    <?php }
                                        }
                                    }
                                ?>
                    </select>
Avatar billede jakobdo Ekspert
15. juli 2007 - 11:36 #14
cddk: Der er kun en måde at lære det på! :o)
Avatar billede olebole Juniormester
22. juli 2007 - 16:12 #15
jakobdo >> Undskyld, men der er igen problemer med E's mail-udsending  :o|

Prototype.js bruger bunker af elendig kode. Nu har jeg ikke testet den seneste version, men tidligere leakede den store mængder hukommelse i IE (faktisk er Google's kodere nogle af de meget få, der overhovedet adresserer IE's dårlige garbage-collection - med deraf følgende memory-leaks).

Derudover har det intet med AJAX at gøre, når man HTML-formaterer på serveren. Data bør returneres til klienten i XML- eller JSON-format og indsættes i dokumentet med DOM.
Al brug af innerHTML (til andet end en hurtig cowboy-test) burde forlængst være bandlyst af enhver seriøs koder ... i _alle_ sammenhænge.

InnerHTML har aldrig været valid i nogen somhelst standard og bliver det heller aldrig. Den overskriver dokumentfragmenter, hvorfor programmatiske referencer til og fra fragmentet går tabt - og så er innerHTML buggy i FF, når den aflæses.

Når XHTML engang bliver brugbart på WWW og browserne begynder at understøtte det, vil din browser endda gå ned med et drøn og en XML-fejl, hvis du prøver at bruge innerHTML. Den er komplet inkompatibel med X(HT)ML  ;o)
Avatar billede jakobdo Ekspert
22. juli 2007 - 16:19 #16
Olebole: Jeg siger tak for info. Kender du andre libs som er værdige at bruge? Eller skal man "bare" kode det hele fra bunden selv?

cddk: Undskyld jeg spammer din tråd.
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