ugrás a tartalomhoz

Apró pici baki...nade mi?

superman · 2010. Júl. 16. (P), 20.45
Több órája csinálom, és már kifolyik a szemem. Mi a hiba? 99%, hogy az $sql változóval van baj.
  1. $nick = $_POST['nick'];  
  2.             $email = $_POST['email'];  
  3.             $password = md5($_POST['password1']);  
  4.             $gender = $_POST['gender'];  
  5.             $regdate = date('Y-m-d');  
  6.             $sql = "INSERT INTO pets (id, nick, email, password, gender, money, regdate, status)  
  7.             VALUES('''$nick''$email''$password''$gender''''$regdate''')";  
  8.             $query = mysql_query($sqlor die("Hiba történt az adatok küldése közben!");  
  9.             print("Sikeres regisztráció!");  
A program ezzel tér vissza: Hiba történt az adatok küldése közben!
 
1

Biztonság

Poetro · 2010. Júl. 16. (P), 22.11
Azért legalább minimális biztonságot rakj bele, ha már nem ellenőrzöd, hogy amit megadott gender, vagy email az valid-e, akkor is legalább kódold megfelelően adatbázisba vitelkor.
  1. <?php  
  2. $parameterek = array(  
  3.   'nick'     => $_POST['nick'],  
  4.   'email'    => $_POST['email'],  
  5.   'password' => md5($_POST['password1']),  
  6.   'gender'   =>  $_POST['gender'],  
  7.   'regdate'  => date('Y-m-d'),  
  8. );  
  9.   
  10. $sql = call_user_func_array('sprintf'array_merge(  
  11.   array("INSERT INTO pets (id, nick, email, password, gender, money, regdate, status)    
  12.           VALUES ('''%s''%s''%s''%s', 0, '%s', 1)"),  
  13.   array_map('mysql_real_escape_string'$parameterek)  
  14. ));  
  15.   
  16. $query = mysql_query($sqlor die("Hiba történt az adatok küldése közben!");  
  17. print "Sikeres regisztráció!";   
  18. ?>  
2

Előtte ezekkel ellenőrzöm az

superman · 2010. Júl. 16. (P), 22.23
Előtte ezekkel ellenőrzöm az adatokat:
  1. if($_POST['nick'] == "" | $_POST['email'] == "" | $_POST['password1'] == "")  
  2.         {  
  3.             die("Minden mező kitöltése kötelező!");  
  4.         }  
  5.         elseif(strlen($_POST['nick']) < 3)  
  6.         {  
  7.             die("A nicknek minimum 3 karakterből kell állnia!");  
  8.         }  
  9.         elseif(strlen($_POST['nick']) > 15)  
  10.         {  
  11.             die("A nick maximum 15 karakterből állhat!");  
  12.         }  
  13.         elseif(!eregi("@."$_POST['email']))  
  14.         {  
  15.             die("Mindenképpen létező email címet adj meg!");  
  16.         }  
  17.         elseif($_POST['password1'] != $_POST['password2'])  
  18.         {  
  19.             die("A két jelszó nem egyezik!");  
  20.         }  
  21.         elseif(strlen($_POST['password1']) < 5)  
  22.         {  
  23.             die("A jelszónak minimum 5 karakterből kell állnia!");  
  24.         }  
  25.         elseif(strlen($_POST['password1']) > 12)  
  26.         {  
  27.             die("A jelszó maximum 12 karakterből állhat!");  
  28.         }  
  29.         elseif(mysql_num_rows(mysql_query("SELECT nick FROM pets WHERE (nick='".$_POST['nick']."')")) > 0)  
  30.         {  
  31.             die("Ez a név már foglalt!");  
  32.         }  
  33.         elseif(mysql_num_rows(mysql_query("SELECT email FROM pets WHERE (email='".$_POST['email']."')")) > 0)  
  34.         {  
  35.             die("Ezzel az email címmel már regisztráltak!");  
  36.         }  
  37.         elseif($_POST['rules'] == false)  
  38.         {  
  39.             die("A regisztrációhoz el kell fogadni a Felhasználási Feltételeket!");  
  40.         }  
És így is ugyan azt a hibát kapom.
3

Ellenőrzés

Poetro · 2010. Júl. 16. (P), 22.26
Most nem fogom kritizálni az ellenőrzést, pedig lehetne, inkább megnézném, hogy az adatbázis táblázatom létezik-e, ebben a formában, megfelelőek-e a mezőnevek, azok típusa, valamit hogy van-e adatbáziskapcsolat, valamint, hogy milyen hibát is ad vissza a MySQL.
4

Query ellenőrzés

Schmidi · 2010. Júl. 16. (P), 22.28
A $sql tartalmát a mysql_query futtatása előtt írasd ki a képernyőre, ott meglátod mit állított össze. Ha látszólag helyes, akkor copy-paste egy phpMyAdmin vagy MySQL konzolba, futtasd le, és megmondja mi a baj a query-vel.

Biztos passzol minden mezőnév? Nincs elírva semmi sem a queryben sem a táblában?

Esetleg ha végképp nem megy, másolj ide egy táblaszerkezet dumpot, hogy meg tudjuk nézni.
5

Itt

superman · 2010. Júl. 16. (P), 23.28
Importált SQL:
  1. -- phpMyAdmin SQL Dump  
  2. -- version 2.11.4-rc1  
  3. -- http://www.phpmyadmin.net  
  4. --  
  5. -- Hoszt: sql4.ultraweb.hu:3306  
  6. -- Létrehozás ideje: 2010. Júl 16. 23:31  
  7. -- Szerver verzió: 4.1.22  
  8. -- PHP Verzió: 5.2.6  
  9.   
  10. SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";  
  11.   
  12. --  
  13. -- Adatbázis: `woodoocaudron`  
  14. --  
  15.   
  16. -- --------------------------------------------------------  
  17.   
  18. --  
  19. -- Tábla szerkezet: `pets`  
  20. --  
  21.   
  22. CREATE TABLE IF NOT EXISTS `pets` (  
  23.   `id` int(11) NOT NULL auto_increment,  
  24.   `nick` varchar(15) collate latin2_hungarian_ci NOT NULL default '',  
  25.   `email` varchar(35) collate latin2_hungarian_ci NOT NULL default '',  
  26.   `passwordvarchar(50) collate latin2_hungarian_ci NOT NULL default '',  
  27.   `gender` varchar(6) collate latin2_hungarian_ci NOT NULL default '',  
  28.   `money` int(11) NOT NULL default '2000',  
  29.   `regtime` date NOT NULL default '0000-00-00',  
  30.   `status` varchar(7) collate latin2_hungarian_ci NOT NULL default 'BASIC',  
  31.   PRIMARY KEY  (`id`)  
  32. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 COLLATE=latin2_hungarian_ci AUTO_INCREMENT=1 ;  
  33.   
  34. --  
  35. -- Tábla adatok: `pets`  
  36. --  
newteen.php (egész)
  1. <?php  
  2. session_start();  
  3. include("includes/config.php");  
  4. $connection = mysql_connect($dbHost$dbUser$dbPass);   
  5. mysql_select_db($dbName);  
  6. ?>  
  7. <html>  
  8. <head>  
  9. </head>  
  10. <body>  
  11. <?php  
  12. if($_SESSION['id'] == true)  
  13. {  
  14.     Header("Location: mypet.php");  
  15. }  
  16. else  
  17. {  
  18.     ?>  
  19.     <form method="post">  
  20.         <table>  
  21.             <tr>  
  22.                 <td>  
  23.                     Nick  
  24.                 </td>  
  25.                 <td>  
  26.                     <input type="name" name="nick"/>  
  27.                 </td>  
  28.             </tr>  
  29.             <tr>  
  30.                 <td>  
  31.                     Email cím  
  32.                 </td>  
  33.                 <td>  
  34.                     <input type="name" name="email"/>  
  35.                 </td>  
  36.             </tr>  
  37.             <tr>  
  38.                 <td>  
  39.                     Jelszó  
  40.                 </td>  
  41.                 <td>  
  42.                     <input type="password" name="password1"/>  
  43.                 </td>  
  44.             </tr>  
  45.             <tr>  
  46.                 <td>  
  47.                     Jelszó újra  
  48.                 </td>  
  49.                 <td>  
  50.                     <input type="password" name="password2"/>  
  51.                 </td>  
  52.             </tr>  
  53.             <tr>  
  54.                 <td>  
  55.                     Nem  
  56.                 </td>  
  57.                 <td>  
  58.                     <select name="gender">  
  59.                     <option value="MALE">Fiú</option>  
  60.                     <option value="FEMALE">Lány</option>  
  61.                     </select>  
  62.                 </td>  
  63.             </tr>  
  64.         </table>  
  65.         <table>  
  66.             <tr>  
  67.                 <td>  
  68.                     <textarea readonly="disabled" cols="45" rows="10">Felhasználási Feltételek</textarea>  
  69.                 </td>  
  70.             </tr>  
  71.             <tr>  
  72.                 <td>  
  73.                     <input type="checkbox" name="rules" value="true"/> Kijelentem, hogy elolvastam, és elfogadom a Felhasználási Feltételeket  
  74.                 </td>  
  75.             </tr>  
  76.             <tr>  
  77.                 <td>  
  78.                     <input type="submit" name="getmynewpet"value="Regisztráció"/>  
  79.                 </td>  
  80.             </tr>  
  81.         </table>  
  82.     </form>  
  83.     <?php  
  84.     if(isset($_POST['getmynewpet']))  
  85.     {  
  86.         if($_POST['nick'] == "" | $_POST['email'] == "" | $_POST['password1'] == "")  
  87.         {  
  88.             die("Minden mező kitöltése kötelező!");  
  89.         }  
  90.         elseif(strlen($_POST['nick']) < 3)  
  91.         {  
  92.             die("A nicknek minimum 3 karakterből kell állnia!");  
  93.         }  
  94.         elseif(strlen($_POST['nick']) > 15)  
  95.         {  
  96.             die("A nick maximum 15 karakterből állhat!");  
  97.         }  
  98.         elseif(!eregi("@."$_POST['email']))  
  99.         {  
  100.             die("Mindenképpen létező email címet adj meg!");  
  101.         }  
  102.         elseif($_POST['password1'] != $_POST['password2'])  
  103.         {  
  104.             die("A két jelszó nem egyezik!");  
  105.         }  
  106.         elseif(strlen($_POST['password1']) < 5)  
  107.         {  
  108.             die("A jelszónak minimum 5 karakterből kell állnia!");  
  109.         }  
  110.         elseif(strlen($_POST['password1']) > 12)  
  111.         {  
  112.             die("A jelszó maximum 12 karakterből állhat!");  
  113.         }  
  114.         elseif(mysql_num_rows(mysql_query("SELECT nick FROM pets WHERE (nick='".$_POST['nick']."')")) > 0)  
  115.         {  
  116.             die("Ez a név már foglalt!");  
  117.         }  
  118.         elseif(mysql_num_rows(mysql_query("SELECT email FROM pets WHERE (email='".$_POST['email']."')")) > 0)  
  119.         {  
  120.             die("Ezzel az email címmel már regisztráltak!");  
  121.         }  
  122.         elseif($_POST['rules'] == false)  
  123.         {  
  124.             die("A regisztrációhoz el kell fogadni a Felhasználási Feltételeket!");  
  125.         }  
  126.         else  
  127.         {  
  128.             $nick = $_POST['nick'];    
  129.             $email = $_POST['email'];    
  130.             $password = md5($_POST['password1']);    
  131.             $gender = $_POST['gender'];    
  132.             $regdate = date('Y-m-d');    
  133.             $sql = "INSERT INTO pets (id, nick, email, password, gender, money, regdate, status)    
  134.             VALUES('''$nick''$email''$password''$gender''''$regdate''')";    
  135.             $query = mysql_query($sqlor die("Hiba történt az adatok küldése közben!");    
  136.             print("Sikeres regisztráció!");    
  137.         }  
  138.     }  
  139. }  
  140. ?>  
  141. </body>  
  142. </html>  
Bocs, hogy bemásolok ide csak úgy mindent "ömlesztve", de már nincs ötletem.
6

Jajj megvaaan!!! Bocsi... nah

superman · 2010. Júl. 17. (Szo), 00.12
Jajj megvaaan!!! Bocsi... nah viszont ötleteket várok még, hogy mivel lehetne biztonságosabbá tenni. mysql_real_escape_stringet hova csempésszek be?:S
7

user

csman007 · 2010. Júl. 17. (Szo), 20.56
Az összes olyan mezőhöz aminél a kedves user adja be az adatokat, meg egy kis xss védelem sem ártana. A másik dolog, a php 5.3 az eregit nem nagyon szereti(deprecated). php 6-tól meg meg is szűnik.
8

id nem lehet ures string

dOMiNiS · 2010. Júl. 18. (V), 23.05
  1. $sql = "INSERT INTO pets (nick, email, password, gender, money, regdate, status)      
  2.             VALUES('$nick''$email''$password''$gender''''$regdate''')";  
9

vagy NULL

plip · 2010. Júl. 19. (H), 04.56
Vagy id-nak adj meg NULL értéket ha auto_increment-es