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
  1. <?php  
  2.     include('post_vars.inc');  
  3.     include('includes/db_conn.php');  
  4. ?>  
  5.   
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  7. <html>  
  8.     <head>  
  9.         <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2">  
  10.         <link rel="stylesheet" type="text/css" href="includes/my.css">  
  11.         <title>Felvitel</title>  
  12.     </head>  
  13.     <body>  
  14.         <div class="content">  
  15.             <form action="" method="post">  
  16.                 <label> Név:</label>  
  17.                 <input type="text" name="wname"> <br><br>  
  18.                 <label> Telefon:</label>  
  19.                 <input type="text" name="wphone"> <br><br>  
  20.                 <label> E-mail:</label>  
  21.                 <input type="text" name="wmail"> <br><br>  
  22.                 <input type="submit" name="kuld" value="Küld">  
  23.             </form>  
  24.         </div>  
  25.     </body>  
  26. </html>  
  27.   
  28. <?php  
  29.     if ( isset ( $_POST['kuld'] ) && $_POST['wname'] !='' ){  
  30.         $sql='SELECT * FROM Workers WHERE worker_name="'.$_POST['wname'].'"';  
  31.         $result=mysql_query($sql);  
  32.         $workername= mysql_fetch_row($result);  
  33.         if ($workername[1]!='')  
  34.             echo "Ilyen névvel: $workername[1] már van dolgozó felvéve";  
  35.         else {  
  36.             muvelet(workers,insert);  
  37.         }  
  38.     }  
  39.     else if (isset ($_POST['kuld']) && $_POST['wname'] =='')  
  40.         echo '<script> alert("Név megadása kötelező") </script>';  
  41.   
  42.   
  43.     function muvelet($tabla$muvelet) {  
  44.         $sql='SELECT column_name  FROM INFORMATION_SCHEMA.COLUMNS  
  45.                 WHERE table_name = "'.$tabla.'"  
  46.                 AND table_schema = "*****"';  
  47.         $res=mysql_query($sql);  
  48.         while($wtomb= mysql_fetch_assoc($res)){  
  49.             $colname.=$wtomb[column_name]. ', ';  
  50.         }  
  51.         $fieldnames = '('.substr($colname, 0, -2).')';  
  52.         foreach ($_POST as $val) {  
  53.             $str .= '"'.$val.'", ';  
  54.         }  
  55.         $values = '('.substr($str, 0,-2).')';  
  56.         switch ($muvelet) {  
  57.             case insert:  
  58.                 $sql2='ISERT INTO '.$tabla'('.$fieldnames.') VALUES '.$values;  
  59.                  mysql_query($sql2or die(mysql_error());  
  60.                 break;  
  61.             case update:  
  62.                 ;  
  63.                 break;  
  64.             case delete;  
  65.                 ;  
  66.                 break;  
  67.             default:  
  68.                 break;  
  69.         }  
  70.     }  
  71.   
  72. ?>  
 
1

Gagyibb megoldás: foreach

bendesoft · 2009. Júl. 26. (V), 17.42
Gagyibb megoldás:
  1. foreach ($_POST as $val) {  
  2.   if($val != 'Küld'){    
  3.     $str .= '"'.$val.'", ';    
  4.   }  
  5. }    
Kicsit szebb:
  1. foreach ($_POST as $index => $val) {  
  2.   if(strpos($fieldnames,$index) !== false){    
  3.     $str .= '"'.$val.'", ';    
  4.   }  
  5. }    
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
  1. while($wtomb= mysql_fetch_assoc($res)){  
  2.   if($wtomb[column_name] != 'ID'){  
  3.     $colname.=$wtomb[column_name]. ', ';    
  4.   }  
  5. }    
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.