Multidesk.be » Forums » PHP » Registreer script

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door BoeMan op zondag 25 mei 2008 om 20:04:15.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Ik ben een registreer script aan het proberen samen te stellen maar ik heb mijn twijfels over een paar dingen, het is de bedoeling dat ik het later nog uitbreid met een control pannel en een mailfunctie met activation mail maar ik zou toch al graag hebben dat dit stuk werkt:D

Ik heb mijn twijfels over
het username checken, daar gaf hij een error op lijn 11
Hij geeft een error op lijn 30 (die begrijp ik helemaal niet)
En over de sha1(md5 op lijn37. Ik heb nog niet met encrypten gewerkt dus daar zou ik graag iets meer info over verkrijgen daar ik al het halve internet heb afgezocht:)

PHP
  1.  
  2. <?php
  3. $db = mysql_connect("localhost", "****", "****") or die("kan niet verbinden " . mysql_error());
  4. mysql_select_db("****", $db);
  5.  
  6. if($pass == $cpass){ //check passwords
  7. if($mail == $cmail){ // check emailadress
  8.  
  9. $sql = "SELECT FROM members WHERE nick='".$_POST['nickname']. "'" ; //check username
  10. $query = mysql_query($sql);
  11. $count = mysql_num_rows($query);
  12. if ($count==0) {
  13.  
  14. $nick= $_POST['nickname'];
  15. $real= $_POST['realname'];
  16. $gender= $_POST['Select'];
  17. $pass= $_POST['password'];
  18. $loc= $_POST['location'];
  19. $mail= $_POST['emailadress'];
  20. $day= $_POST['day'];
  21. $month= $_POST['month'];
  22. $year= $_POST['year'];
  23. $hobby= $_POST['hobby'];
  24. $birthday= "$day-$month-$year";
  25. $date= date(Y-m-d);
  26.  
  27. }else{
  28.      echo "The passwords don't match.<br><a href=\"javascript:history.back()\">Go back</a>";
  29.          }
  30. }else{
  31.      echo "The Email adresses don't match.<br> <a href=\"javascript:history.back()\"> Go back</a>";
  32.          }
  33. }else{
  34.      echo "The username '".$_POST['nickname']."' is already taken by an other user.<br> <a href=\"javascript:history.back()\">Go back</a>";
  35.          }
  36.         
  37.  mysql_query("INSERT INTO members (nickname, realname, Select, password, location, emailadress, birthday, date) VALUES'".sha1(md5(                                     $_POST['pass'])."' NOW())");
  38. ?>
  39.  
  40.  


Mvg Gijs
^ Reactie #1 geschreven door Simon op zondag 25 mei 2008 om 20:22:01.
Simon's avatar
Multiviteit: 3742
Die error op lijn 11 zal waarschijnlijk te maken hebben met een verkeerde query, maar geef je error toch eens.

Ik vermoed dat de error op lijn 30 komt doordat je strucuur niet klopt.
Je maakt 3 if-else structuren aan, maar ze zitten verkeerd in elkaar verweven. En in feite hebben die structuren geen nut want je insert-query wordt toch sowieso uitgevoerd.

Hier vind je een betere structuur. Probeer nog eens een manier te zoeken om te zorgen dat je insert-query niet altijd uitgevoerd dus, enkel dus als er geen errors zijn.
PHP
  1. <?php
  2. $db = mysql_connect("localhost", "****", "****") or die("kan niet verbinden " . mysql_error());
  3. mysql_select_db("****", $db);
  4.  
  5. if($pass == $cpass) //check passwords
  6. {
  7.         if($mail == $cmail) // check emailadress
  8.         {
  9.                $sql = "SELECT FROM members WHERE nick='".$_POST['nickname']. "'" ; //check username
  10.                 $query = mysql_query($sql);
  11.                 $count = mysql_num_rows($query);
  12.                 if ($count==0)
  13.                 {
  14.                         $nick= $_POST['nickname'];
  15.                         $real= $_POST['realname'];
  16.                         $gender= $_POST['Select'];
  17.                         $pass= $_POST['password'];
  18.                         $loc= $_POST['location'];
  19.                         $mail= $_POST['emailadress'];
  20.                         $day= $_POST['day'];
  21.                         $month= $_POST['month'];
  22.                         $year= $_POST['year'];
  23.                         $hobby= $_POST['hobby'];
  24.                         $birthday= "$day-$month-$year";
  25.                         $date= date(&#8221;Y-m-d&#8221;);
  26.  
  27.                 }
  28.                 else
  29.                 {
  30.                         echo "The username '".$_POST['nickname']."' is already taken by an other user.<br> <a href=\"javascript:history.back()\">Go back</a>";
  31.                 }
  32.  
  33.         }
  34.         else
  35.         {
  36.                 echo "The Email adresses don't match.<br> <a href=\"javascript:history.back()\"> Go back</a>";
  37.         }
  38. }
  39. else
  40. {
  41.         echo "The passwords don't match.<br><a href=\"javascript:history.back()\">Go back</a>";
  42. }
  43.      
  44. mysql_query("INSERT INTO members (nickname, realname, Select, password, location, emailadress, birthday, date) VALUES'".sha1(md5($_POST['pass'])."' NOW())");
  45.  
  46. ?>

^ Reactie #2 geschreven door SMG op zondag 25 mei 2008 om 20:29:13.
SMG's avatar
Multiviteit: 12000
Moderator
PHP
  1. <?php
  2. $sql = "SELECT FROM members WHERE nick='".$_POST['nickname']. "'" ; //check username
  3. ?>

SELECT wat van members???
Je zal hier een * of een tabel moeten ingooien, anders zal hij altijd fouten geven.

Verder, als je gegevens van gebruikers verwerkt in de databank zet je dit in een addslashes() (en bij het uitlezen doe je de slashes weg met stripcslashes();
Dit zorgt ervoor dat je geen SQL injecties krijgt in je databank.

Wat betreft je encryptie is MD5 normaal gezien al genoeg.
Deze tekst werd het laatst bewerkt voor 39.86 % door SMG op zondag 25 mei 2008 om 20:31:26.
^ Reactie #3 geschreven door BoeMan op zondag 25 mei 2008 om 22:16:57.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Hoi simon, ik heb jou code ingevoerd en ik krijg de error:
Parse error: syntax error, unexpected '}', expecting T_STRING or T_VARIABLE or '$' in /customers/underground07.be/underground07.be/httpd.www/V1/admin/register.php on line 54

PHP
  1.  
  2. <?php
  3.  
  4. $db = mysql_connect("localhost", "****", "****") or die("kan niet verbinden " . mysql_error());
  5.  
  6. mysql_select_db("****", $db);
  7.  
  8.        
  9.  
  10.       if($pass == $cpass) //check passwords
  11.  
  12.       {
  13.  
  14.               if($mail == $cmail) // check emailadress
  15.  
  16.               {
  17.  
  18.                      $sql = "SELECT FROM members WHERE nick='".$_POST['nickname']. "'" ; //check username
  19.  
  20.                       $query = mysql_query($sql);
  21.  
  22.                       $count = mysql_num_rows($query);
  23.  
  24.                       if ($count==0)
  25.  
  26.                       {
  27.  
  28.                               $nick= $_POST['nickname'];
  29.  
  30.                               $real= $_POST['realname'];
  31.  
  32.                               $gender= $_POST['Select'];
  33.  
  34.                               $pass= $_POST['password'];
  35.  
  36.                               $loc= $_POST['location'];
  37.  
  38.                               $mail= $_POST['emailadress'];
  39.  
  40.                               $day= $_POST['day'];
  41.  
  42.                               $month= $_POST['month'];
  43.  
  44.                               $year= $_POST['year'];
  45.  
  46.                               $hobby= $_POST['hobby'];
  47.  
  48.                               $birthday= "$day-$month-$year";
  49.  
  50.                               $date= date(&#8221;Y-m-d&#8221;);
  51.  
  52.        
  53.  
  54.                       }
  55.  
  56.                       else
  57.  
  58.                       {
  59.  
  60.                               echo "The username '".$_POST['nickname']."' is already taken by an other user.<br> <a href=\"javascript:history.back()\">Go back</a>";
  61.  
  62.                       }
  63.  
  64.        
  65.  
  66.               }
  67.  
  68.               else
  69.  
  70.               {
  71.  
  72.                       echo "The Email adresses don't match.<br> <a href=\"javascript:history.back()\"> Go back</a>";
  73.  
  74.               }
  75.  
  76.       }
  77.  
  78.       else
  79.  
  80.       {
  81.  
  82.               echo "The passwords don't match.<br><a href=\"javascript:history.back()\">Go back</a>";
  83.  
  84.       }
  85.  
  86.            
  87.  
  88.       mysql_query("INSERT INTO members (nickname, realname, Select, password, location, emailadress, birthday, date) VALUES'".md5($_POST['pass'])."' NOW())");
  89.  
  90.        
  91.  
  92. ?>
  93.  


@SMG, ik heb de sha1 weggedaan, maar ik had ergens gelezen dat md5 al gehackt was, kunnen jullie dat bevestigen? Of is dit gewoon een roddel?

Mvg Gijs
Deze tekst werd het laatst bewerkt voor 3.18 % door BoeMan op zondag 25 mei 2008 om 22:18:20.
^ Reactie #4 geschreven door SMG op zondag 25 mei 2008 om 22:29:58.
SMG's avatar
Multiviteit: 12000
Moderator
Je 'roddel' is dus waarheid:

Dixit

MD5 (Message Digest Algorithm 5) is een veelgebruikte cryptografische hashfunctie met een 128-bit hashwaarde. MD5 is als internetstandaard (RFC 1321) gebruikt in vele veiligheidstoepassingen en wordt ook gebruikt om de integriteit van bestanden te controleren. MD5 is ontworpen door Ronald Rivest in 1991 om de eerdere hashfunctie MD4 te vervangen. In 1996 werd er een fout in het MD5-ontwerp gevonden; hoewel het geen ernstige fout was werd het aanbevolen om andere algoritmen te gaan gebruiken zoals SHA-1 (hoewel recentelijk wordt gezegd dat ook deze fouten bevat).

In 2007 is het een groep wetenschappers gelukt om twaalf verschillende PDF-bestanden te maken met dezelfde hashcode[1]. De auteurs hebben daarmee aangetoond dat MD5 beter niet meer gebruikt kan worden als een verificatiemethode.

Bron: Wikipedia

Hiermee leer ik dus zeker iets bij ;)
Het is dus zeker niet slecht in beide technieken samen te gebruiken.
^ Reactie #5 geschreven door Martijn op maandag 26 mei 2008 om 14:58:32.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Onthou ook dat sha1(md5($string)) niet veiliger is dan sha1($string).

MD5 valt te "kraken", maar het is echter niet mogelijk om met 100% zekerheid te zeggen wat de initile waarde was waarmee de hash werd bekomen.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #6 geschreven door BoeMan op maandag 26 mei 2008 om 18:53:07.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Ik zal het dan alleen bij de sha1($string) houden. Is deze trouwens juist geplaatst?
Ik zou wel graag wat meer uitleg hebben over de NOW()) die vanonder in de query staat.
Ik krijg nog steeds de error op lijn 53

PHP
  1.  
  2. <?php
  3.  
  4. $db = mysql_connect("localhost", "**********", "*****") or die("kan niet verbinden " . mysql_error());
  5.  
  6. mysql_select_db("underground07_b", $db);
  7.  
  8.        
  9.  
  10.       if($pass == $cpass) //check passwords
  11.  
  12.       {
  13.  
  14.               if($mail == $cmail) // check emailadress
  15.  
  16.               {
  17.  
  18.                      $sql = "SELECT * FROM members WHERE nick='".$_POST['nickname']. "'" ; //check username
  19.  
  20.                       $query = mysql_query($sql);
  21.  
  22.                       $count = mysql_num_rows($query);
  23.  
  24.                       if ($count==0)
  25.  
  26.                       {
  27.  
  28.                               $nick= $_POST['nickname'];
  29.  
  30.                               $real= $_POST['realname'];
  31.  
  32.                               $gender= $_POST['Select'];
  33.  
  34.                               $pass= $_POST['password'];
  35.  
  36.                               $loc= $_POST['location'];
  37.  
  38.                               $mail= $_POST['emailadress'];
  39.  
  40.                               $day= $_POST['day'];
  41.  
  42.                               $month= $_POST['month'];
  43.  
  44.                               $year= $_POST['year'];
  45.  
  46.                               $hobby= $_POST['hobby'];
  47.  
  48.                               $birthday= "$day-$month-$year";
  49.  
  50.                               $date= date(&#8221;Y-m-d&#8221;);
  51.  
  52.        
  53.                     }
  54.  
  55.                      else
  56.  
  57.                   {
  58.  
  59.                           echo "The passwords don't match.<br><a href=\"javascript:history.back()\">Go back</a>";
  60.  
  61.              }
  62.           
  63.                    
  64.        
  65.              }
  66.  
  67.                     else
  68.  
  69.              {
  70.  
  71.                    echo "The Email adresses don't match.<br> <a href=\"javascript:history.back()\"> Go back</a>";
  72.  
  73.               }
  74.  
  75.                         }
  76.  
  77.                 else
  78.  
  79.               {
  80.  
  81.                    echo "The username '".$_POST['nickname']."' is already taken by an other user.<br> <a href=\"javascript:history.back()\">Go back</a>";
  82.  
  83.                       }
  84.  
  85.  
  86.            
  87.  
  88.       mysql_query("INSERT INTO members (nickname, realname, Select, password, location, emailadress, birthday, date) VALUES'".sha1($_POST['pass'])."' NOW())");
  89.  
  90.        
  91.  
  92. ?>
  93.  


Mvg Gijs

Opmerking van de crew

Kleine aanpassing op verzoek van BoeMan :)

Wheeldigger
Deze tekst werd het laatst bewerkt voor 0.52 % door Wheeldigger op maandag 26 mei 2008 om 21:08:06.
^ Reactie #7 geschreven door Simon op maandag 26 mei 2008 om 20:02:05.
Simon's avatar
Multiviteit: 3742
Die sha1() is juist geplaatst ja. De hash sla je gewoon op in de database zodat iemand die de database kraakt niet alle wachtwoorden heeft.
Volgens mij mist je query nog de waarden voor het emailadres, verjaardag, ...?

Die error op lijn 53 komt er door regel 50, deze mist een puntkomma omdat het laatste stuk van de regel als commentaar gezien wordt.
Vervang regel 50 eens door:
PHP
  1. <?php
  2.  
  3. $date = date('Y-m-d');
  4.  
  5. ?>
^ Reactie #8 geschreven door BoeMan op maandag 26 mei 2008 om 20:21:42.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Bedankt simon, die error is er dus uit:D
de volgende (jammer genoeg) krijg ik van regel 21
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/underground07.be/underground07.be/httpd.www/V1/admin/register.php on line 21

PHP
  1.  
  2.                      $sql = "SELECT * FROM members WHERE nick='".$_POST['nickname']. "'" ; //check username
  3.  
  4.                       $query = mysql_query($sql);
  5.  
  6.                       $count = mysql_num_rows($query);
  7.  
  8.                       if ($count==0)
  9.  
  10.                       {
  11.  


Regel 21 is $count = mysql_num_rows($query); maar ik geef maar even de hele code
Ik had deze error dachtik in het verleden ook al eens en toen veranderde ik rows door array.
Deze tekst werd het laatst bewerkt voor 21.79 % door BoeMan op maandag 26 mei 2008 om 20:27:30.
^ Reactie #9 geschreven door BoeMan op maandag 26 mei 2008 om 21:25:25.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Ik heb wat aanpassingen gedaan aan de code, vooral aan de mysql query.
Nu krijg ik geen errors meer maar de waarden worden niet in de database gestoken.
Ik post even het formulier en de myqsl query. misschien heb ik fouten in de name en value getypt

PHP
  1.  
  2.                          mysql_query("INSERT INTO members  (
  3.  
  4.                         nickname,
  5.  
  6.                         realname,
  7.  
  8.                         Select,
  9.  
  10.                         password,
  11.  
  12.                         location,
  13.  
  14.                         emailadress,
  15.                                                
  16.                                                 birthday,
  17.                                                
  18.                                                 date
  19.  
  20.                         ) VALUES (
  21.  
  22.                         '".$_POST['nick']."',
  23.                                                
  24.                                                 '".sha1($_POST['pass'])."'
  25.                                                
  26.                                                 '".addslashes(htmlspecialchars($_POST['real']))."',
  27.                                                
  28.                                                 '".addslashes(htmlspecialchars($_POST['Select']))."',
  29.                                                
  30.                                                 '".addslashes(htmlspecialchars($_POST['date']))."',
  31.                                                
  32.                                                 '".addslashes(htmlspecialchars($_POST['loc']))."',
  33.                                                
  34.                                                 '".addslashes(htmlspecialchars($_POST['birthday']))."',
  35.  
  36.                         '".addslashes(htmlspecialchars($_POST['mail']))."'
  37.  
  38.                         )");
  39.  


Mvg Gijs.
^ Reactie #10 geschreven door Martijn op dinsdag 27 mei 2008 om 10:22:01.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Zet op regel 38 achter het haakje (en voor de punt-komma) eens volgende code:

CODE
  1. or die(mysql_error())
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #11 geschreven door BoeMan op dinsdag 27 mei 2008 om 17:29:33.
BoeMan heeft nog geen avatar toegevoegd
Multiviteit: 154
Ik heb de code code aan de regel toegevoegt.
Deze error krijg ik nu.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Select, password, location' at line 7


Bijlage: mysql_table_foto.jpg

PHP
  1.  
  2.    mysql_query("INSERT INTO members  (
  3.  
  4.                         nickname,
  5.  
  6.                         realname,
  7.  
  8.                         Select,
  9.  
  10.                         password,
  11.  
  12.                         location,
  13.  
  14.                         emailadress,
  15.                                                
  16.                                                 birthday,
  17.                                                
  18.                                                 date
  19.  
  20.                         ) VALUES (
  21.  
  22.                         '".$_POST['nick']."',
  23.                                                
  24.                                                 '".sha1($_POST['pass'])."'
  25.                                                
  26.                                                 '".addslashes(htmlspecialchars($_POST['real']))."',
  27.                                                
  28.                                                 '".addslashes(htmlspecialchars($_POST['Select']))."',
  29.                                                
  30.                                                 '".addslashes(htmlspecialchars($_POST['date']))."',
  31.                                                
  32.                                                 '".addslashes(htmlspecialchars($_POST['loc']))."',
  33.                                                
  34.                                                 '".addslashes(htmlspecialchars($_POST['birthday']))."',
  35.  
  36.                         '".addslashes(htmlspecialchars($_POST['mail']))."'
  37.  
  38.                         )")or die(mysql_error());
  39.  


Mvg
Deze tekst werd het laatst bewerkt voor 0.46 % door BoeMan op dinsdag 27 mei 2008 om 17:29:57.
^ Reactie #12 geschreven door Martijn op dinsdag 27 mei 2008 om 18:32:08.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Zeker dat dit in die query is? Ik zie namelijk nergens select password, location in je query.

Kijk ook even na of je in je query select, hebt staan. Die komma vlak na select hoort daar doorgaans niet :).
Met vriendelijke groeten,
Martijn Wouters
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen