registratie werkt niet meer

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Niek Kasius

Niek Kasius

27/05/2014 09:55:35
Quote Anchor link
Ik heb het onderstaand script in gebruik waar ik een of 2 week geleden nog registatie mee heb gedaan.
Maar nu werkt het niet meer en ik weet niet waarom.
Zou de oorzaak misschien zou kunnen zijn aan het feit dat een paar dagen geleden per ongeluk mijn database waar dit script in stond had verwijderd uit Wamp, iets wat ik me eigelijk niet kan vorstellen, want ik heb de zelfde database weer terug gezet die ik in data.sql heb staan.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
//session_start();
include('../includes/configdb.php');
if(isset($_POST['registreer']))
{

 //controleerd of de gebruikersnaam is ingevuld
 if($_POST['username'] == '')
 {

  $_SESSION['error']['username'] = "Gebruikersnaam is verplicht.";
 }

 //controleerd of het email adres is ingevuld
 if($_POST['email'] == '')
 {

  $_SESSION['error']['email'] = "E-mail is verplicht.";
 }

 else
 {
  //conteroleerd of de indeling van de e-mail juist is
  if(preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9._-]+)+$/", $_POST['email']))
  {

   //als het het juiste formaat controleerd of de e-mail al bestaat
  $email= $_POST['email'];
   $sql1 = "SELECT * FROM user WHERE email = '$email'";
   $result1 = mysqli_query($mysqli,$sql1) or die(mysqli_error($mysqli));
   if (mysqli_num_rows($result1) > 0)
            {

    $_SESSION['error']['email'] = "Dit e-mailadres is al gebruikt.";
   }
  }

  
  //else
  {
   //Deze fout wordt ingesteld als de e-mail-formaat niet correct is
   $_SESSION['error']['email'] = "Uw e-mailadres is niet geldig.";
  }
 }

 //controleerd of het wachtwoord is ingevuld
 if($_POST['password'] == '')
 {

  $_SESSION['error']['password'] = "Wachtwoord is verplicht.";
 }

 
 //Als de fout bestaat, gaan we naar registratieformulier
 if(isset($_SESSION['error']))
 {

  header("Location: index.php");
  exit;
 }

 else
 {
  $username = $_POST['username'];
  $email = $_POST['email'];
  $password = sha1($_POST['password']);
  $com_code = md5(uniqid(rand()));

  $sql2 = "INSERT INTO user (username, email, password, com_code) VALUES ('$username', '$email', '$password', '$com_code')";
  $result2 = mysqli_query($mysqli,$sql2) or die(mysqli_error());

  if($result2)
  {

   $to = $email;
   $subject = "Biljartclub";
   $header = "Biljartclub: Bevestiging van Biljartclub";
   $message = "Hallo $username hier is een bevestiging dat jij je hebt geregistreerd op de site van onze vereniging hier onder staat een link waar je op moet klikken om je registatie te activeren.";
$message ="http://localhost/biljartstanden/members/confirm.php?passkey=$com_code";

   $sentmail = mail($to,$subject,$message,$header);

   if($sentmail)
            {

   echo "Er is een bevestiging  met acticatie-code verzonden naar uw e-mailadres.";
   }

   else
         {
    echo "Kan geen bevestigingslink naar uw e-mailadres verzenden";
   }
  }
 }
}
else
{
?>

<div id="content">
<table width="330" align="center" cellpadding="0" cellspacing="1" border="0px solid black">
  <tr>
  <form action="register.php" method="POST">
    <td>
      <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
        <tr>
          <td colspan="3"><strong><center>Registreren</center></strong></td>
        </tr>
        <tr>
          <td width="150" align="left">Gebruikersnaam</td>
          <td width="3"><b>:</b></td>
          <td width="150" align="left"><input name="username" type="text"></td>
        </tr>
        <tr>
          <td align="left">E-mailadres</td>
          <td><b>:</b></td>
          <td align="left"><input name="email" type="text"></td>
        </tr>
        <tr>
          <td align="left">Wachtwoord</td>
          <td><b>:</b></td>
          <td align="left"><input name="password" type="text"></td>
        </tr>
        <tr>
          <td colspan="3" align="left"><input type="submit" name="register" value="Aanmelden">
        </tr>
      </table>
    </td>
  </form>
  </tr>
</table>
<?php
}
?>
Gewijzigd op 27/05/2014 09:56:31 door Niek Kasius
 
PHP hulp

PHP hulp

29/01/2020 22:27:00
 
Michael -

Michael -

27/05/2014 10:01:24
Quote Anchor link
Er zijn wat dingen mis met je formulier waaronder foutafhandeling van je database query's. Het kan dus goed zijn dat er daar iets fout gaat, alleen zie jij dit nu niet. Daarom altijd foutafhandeling inbouwen!
die() is geen foutafhandeling!
Het beste kun je geen * gebruiken in je select, maar de velden invullen die je wilt hebben. Dit is in eerste instantie sneller (ja, ook als je ze allemaal alsnog invult) en ten tweede veel overzichtelijker welke velden je tot je beschikking hebt.
Je code is verder ook wat onoverzichtelijk en een formulier in een table?? Maar dat was je vraag niet :-)


foutafhandeling

Edit:

Ik zie trouwens dat je wel controleert of results1/2 true is. Krijg je wel een e-mail? Of een error?

I.p.v. de preg_match op regel 19 kun je beter filter_var gebruiken
Gewijzigd op 27/05/2014 10:07:38 door Michael -
 
- Ariën -
Beheerder

- Ariën -

27/05/2014 10:22:59
Quote Anchor link
Verder zie ik een hele sloot aan mogelijkheden tot SQL-injection!!
 
Niek Kasius

Niek Kasius

27/05/2014 11:57:30
Quote Anchor link
Nou ik heb er een paar foutafhandelingen bij gezet, Maar dat helpt geen bal.
Ik krijg niks, nada, nothing.
Ik heb de form er al uit gehaald en apart gedaan zodat die word door gestuurd naar register.php.
Maar krijg niks nadat ik op aanmelden klik gaat die terug naar de index waar die link voor registreren staat.
 
Erik Rijk
Moderator

Erik Rijk

27/05/2014 12:09:12
Quote Anchor link
Zet hier en daar wat dump informatie. echo voor en na elk if statement. Kijk of je uberhaubt iets terug krijgt en ga zo langzaamaan je gehele script door om op te sporen waar het mis gaat.
 
Ivo P

Ivo P

27/05/2014 12:33:20
Quote Anchor link
debuggen is de enige optie:

je zegt dat je script gewerkt heeft. Dus het script an sich was kennelijk goed (goed als in "deed zijn werk", niet als in "is de ideale manier van scripten, want zie boven")

Er is dus iets aan de omstandigheden waarin het script moet werken, verandert:
- server instellingen.
- database structuur
- database connectie gegevens
- tabel "vol" als in : id als tiny int. opgeslagen en je zit aan de 127 records
- etc

Je zult dus bij veel acties moeten nagaan of iets gelukt is.
En dan denk ik met name aan foutmeldingen van mysql.
Maar zet ook eens neer in je script als iets wel gelukt is, wat het antwoord was.


--
en commmenteer regel 46 eens uit.
Alles wat er aan meldingen op het scherm komt, wil je niet direct wissen door een redirect (neem even aan dat je output buffering aan hebt staan)
 
Niek Kasius

Niek Kasius

27/05/2014 14:16:30
Quote Anchor link
Ik schrijf het er maar ff bij.
Maar door die foutafhandelingen die ik er heb gezet, zijn de regel nummer veranderd.
Ik heb dit gedaan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
if($_POST['username'] == '')
   {
    echo "Query mislukt. Foutmelding: " . mysqli_error();
   }
    else
   {
 
  $_SESSION['error']['username'] = "Gebruikersnaam is verplicht.";
 }
?>

En dat overal gedaan, ook bij regel 57 = nu 68, Maar daar krijg ik op regel 59 = 70 deze foutmelding:


mysqli_error() expects exactly 1 parameter, 0 given in C:\wamp\www\biljart\members\register.php on line 71

En asl ik daar dan $com of $sql2 of $result2 in zet dan geeft die: Undefined variable: con in C:\wamp\www\biljart\members\register.php on line 70

Ik snap het niet het heeft altijd goed gewerkt zolang ik het heb.


Quote:
Er is dus iets aan de omstandigheden waarin het script moet werken, verandert:
- server instellingen.
- database structuur
- database connectie gegevens
- tabel "vol" als in : id als tiny int. opgeslagen en je zit aan de 127 records
- etc

geen van alle naar ik weet

regel 46 moet zijn header('Refresh: 1; url=index1.php'); exit;
 
Michael -

Michael -

27/05/2014 14:22:18
Quote Anchor link
Als $con undefined is, waar is je database connectie dan?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
if($_POST['username'] == '')
   {
    echo "Query mislukt. Foutmelding: " . mysqli_error();
   }

Of een post leeg is heeft niks met een query te maken. Een query kan ook fout gaan als een post wel gevuld is.

Zoals Ivoo zei, comment alle headers e.d. want deze voorkomen dat jij de errors kunt zien. Je zou dan in ieder geval een foutmelding moeten krijgen waar je iets mee kunt.
 
Erik Rijk
Moderator

Erik Rijk

27/05/2014 14:24:32
Quote Anchor link
Hi Niek,

mysqli_error verwacht een parameter inderdaad: string mysqli_error ( mysqli $link ) : php.net/mysqli_error.

Je roept deze functie nu aan op het moment dat je eer post waarde mist en nog helemaal geen aanroep naar de database hebt gemaakt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$oObj
= mysqli_connect( [..] );

$sQuery = "Je query";
if( false == ( $rResult = myqli_query( $oObj, $sQuery ) ) )
{

    var_dump( mysqli_error( $oObj ) );
}

?>


Je fouten van de formulier velden, zal je echt op een andere manier moeten oplossen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$aErrors
= array()
if( empty( $_POST['username'] ) )
{

    $aErrors[] = 'Geen username ingevuld';
}

if( !empty( $aErrors ) )
{

    foreach( $aErrors as $sError )
    {

        echo $sError . "<br />";
    }
}

?>


o.i.d.. Succes!
 
Niek Kasius

Niek Kasius

27/05/2014 14:51:44
Quote Anchor link
Sorry!!! stom,stom.en nog eens stom, verkeerde connetie.
En die echo "Query mislukt. Foutmelding: " . mysqli_error(); bij if($_POST['username'] == '') en email zijn inderdaad nutteloos want als zij leeg zijn post die niet.
Maar wat zet ik nu bij echo "Query mislukt. Foutmelding: " . mysqli_error(); want die blijft wel zichtbaar nu, ook nu het wel werkt
 
Michael -

Michael -

27/05/2014 15:35:21
Quote Anchor link
Die 'query mislukt' plaats je in een else waar je je controle voor $result1/2 doet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
sql1 = "
SELECT
  email
FROM
  user
WHERE
  email = '"
. mysqli_real_escape_string($email) . "'
"
;
$result1 = mysqli_query($mysqli,$sql1);

if($result1) {
    if (mysqli_num_rows($result1) > 0) {
        $_SESSION['error']['email'] = "Dit e-mailadres is al gebruikt.";
      }
}
else {
    echo "Query mislukt. Foutmelding: " . mysqli_error($mysqli);
}

?>
 
Niek Kasius

Niek Kasius

27/05/2014 16:47:49
Quote Anchor link
het werk nu wel alleen de link die het verstuurd is niet goed.
http://localhost/www/biljart/members/confirm.php?passkey=$com_code";
Als ik confirm.php gewoon open dan staat er in de adres balk
http://localhost/biljart/members/confirm.php\
maar omdat de map in de www staat moet ik ook localhost/www voor een link die van buiten af komt toch.
En aks ik een Hotmail adres invoer krijg ik geen aanklikbare link wel in oulook expres.
 
Stijn Quux

Stijn Quux

27/05/2014 17:45:35
Quote Anchor link
Ik ruik SQL-injections...
 
Ivo P

Ivo P

27/05/2014 20:05:10
Quote Anchor link
en XSS
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.