ugrás a tartalomhoz

A submit, a $_POST és egyebek

peter71 · 2009. Júl. 26. (V), 13.49
Sziasztok!

Az alábbi kódot farigcsáltam össze. Sajnos a $_POST végigjárásánál a submit gomb értékét is az adatbázisba szeretné szúrni. Hogyan tudom ezt a problémát megszüntetni?
Ha más probléma is van a kódomba, kérlek magyarázzátok el nekem.

Köszönöm:
Peter71

<?php
    include('post_vars.inc');
    include('includes/db_conn.php');
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">
        <link rel="stylesheet" type="text/css" href="includes/my.css">
        <title>Felvitel</title>
    </head>
    <body>
        <div class="content">
            <form action="" method="post">
                <label> Név:</label>
                <input type="text" name="wname"> <br><br>
                <label> Telefon:</label>
                <input type="text" name="wphone"> <br><br>
                <label> E-mail:</label>
                <input type="text" name="wmail"> <br><br>
                <input type="submit" name="kuld" value="Küld">
            </form>
        </div>
    </body>
</html>

<?php
    if ( isset ( $_POST['kuld'] ) && $_POST['wname'] !='' ){
        $sql='SELECT * FROM Workers WHERE worker_name="'.$_POST['wname'].'"';
        $result=mysql_query($sql);
        $workername= mysql_fetch_row($result);
        if ($workername[1]!='')
            echo "Ilyen névvel: $workername[1] már van dolgozó felvéve";
        else {
            muvelet(workers,insert);
        }
    }
    else if (isset ($_POST['kuld']) && $_POST['wname'] =='')
        echo '<script> alert("Név megadása kötelező") </script>';


    function muvelet($tabla, $muvelet) {
        $sql='SELECT column_name  FROM INFORMATION_SCHEMA.COLUMNS
                WHERE table_name = "'.$tabla.'"
                AND table_schema = "*****"';
        $res=mysql_query($sql);
        while($wtomb= mysql_fetch_assoc($res)){
            $colname.=$wtomb[column_name]. ', ';
        }
        $fieldnames = '('.substr($colname, 0, -2).')';
        foreach ($_POST as $val) {
            $str .= '"'.$val.'", ';
        }
        $values = '('.substr($str, 0,-2).')';
        switch ($muvelet) {
            case insert:
                $sql2='ISERT INTO '.$tabla. '('.$fieldnames.') VALUES '.$values;
                 mysql_query($sql2) or die(mysql_error());
                break;
            case update:
                ;
                break;
            case delete;
                ;
                break;
            default:
                break;
        }
    }

?>
 
1

Gagyibb megoldás: foreach

bendesoft · 2009. Júl. 26. (V), 17.42
Gagyibb megoldás:

foreach ($_POST as $val) {
  if($val != 'Küld'){  
    $str .= '"'.$val.'", ';  
  }
}  
Kicsit szebb:

foreach ($_POST as $index => $val) {
  if(strpos($fieldnames,$index) !== false){  
    $str .= '"'.$val.'", ';  
  }
}  
Ez csak akkor fűz egy értéket hozzá az str sztringhez, ha az index megtalálható a mezőnevek között. Ennek persze feltétele, hogy minden űrlap elemnek ugyanaz legyen a neve, mint a táblában a neki megfelelő mezőnek a neve. Tehát a wname-t át kell írni worker_name-re stb...
2

Köszönöm, a dolog jól

peter71 · 2009. Júl. 27. (H), 10.48
Köszönöm, a dolog jól működik. Még egy dolgot kellene megoldanom, minden táblában van egy ID mező, amely autoincrement kap értéket, a mezőnevek között az is felsorolásra kerül. Van-e valamilyen megoldás, arra hogy kihagyjam a $fieldname string összeállításánál? Most NULL értéket adok neki.

Kicsit olvasgattam a neten, a következő lépés, ha jól látom akkor az, hogy ellenőrzöm a $_POST értéket.

Köszönöm:
Peter71
3

while($wtomb=

bendesoft · 2009. Júl. 27. (H), 13.03

while($wtomb= mysql_fetch_assoc($res)){
  if($wtomb[column_name] != 'ID'){
    $colname.=$wtomb[column_name]. ', ';  
  }
}  
Ezt próbáld ki ;)
4

Köszönöm, ez biztosan

peter71 · 2009. Júl. 27. (H), 13.33
Köszönöm, ez biztosan működik, de a tábláimban minden ID más néven szerepel. PL: worker_ID, prod_ID, photo_ID. Van esetleg valamilyen "joker" karakter amivel az elejét tudom helyettesíteni?
6

reguláris kifejezések

gex · 2009. Júl. 27. (H), 14.56
sztringműveletekkel meg tudod oldani, de ha hatékonyan szeretnél dolgozni (a későbbiekben is), akkor google:reguláris+kifejezések vagy vegyél egy könyvet a témában.
5

Nem adsz name paramétert

Thom · 2009. Júl. 27. (H), 14.54
Ha nem adsz name paramétert a submit gombnak az űrlapban, akkor nem fogja elküldeni az értékét.
Az űrlapot így is el lehet küldeni, és még a validátor sem aggódik. Szvsz. ennél nem lehet egyszerűbben.