upgraden naar PHP 7 - Mysqli

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Theo Huitema

Theo Huitema

29/05/2018 18:51:35
Quote Anchor link
Jaren terug was ik actiever in programmeren en heb ik mijn hobby stamboom via PHP en mysql op internet gezet.
Eigenlijk leende ik scrips en bewerkte die en leerde op die manier PHP en mysql
Nu wil mijn hosting provider dat ik upgrade naar PHP 7. Op zich logisch, maar ja, wel weer een hele puzzel.

Het onderstaande registreer script werkt niet.
Zelf het idee dat het aan $dbid = htmlspecialchars($rij->id); ligt ... maar weet het gewoon niet wat hier aan mankeert.

Ik weet dat MD5 ook niet een geweldige veilige manier is, maar daar moet ik later mag naar kijken. Tenzij iemand hier advies heeft.

Weten jullie waarom dit script niet werkt?

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
117
118
119
120
121
122
123
<?

include("config.php");

 if(isset($_POST['submit'])) {

  // Uitvoeren
  // Velden controleren

  if($_POST['user'] != "" AND $_POST['pass1'] != "" AND $_POST['pass2'] != "" AND $_POST['email'] != "") {

   // Gebuikersnaamcheck
   $sql = "SELECT id FROM gebruikers WHERE naam='".$_POST['user']."'";
   $result = mysqli_query($connection, $sql);
   $tellen = mysqli_num_rows($result);
   if($tellen == 0) {

    // E-mailcheck
    if(preg_match("/^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,6}$/i", $_POST['email'])) {

    // Controle of beide ingewoerde email adressen gelijk zijn
     if($_POST['pass1'] == $_POST['pass2']) {
      $actcode = mt_srand((double)microtime()*100000);
       while(strlen($actcode) <= 10) {
       $i = chr(mt_rand (0,255));
       if(eregi("^[a-z0-9]$", $i)) {
        $actcode = $actcode.$i;
       }
      }
  // einde while loop

      $md5pass = md5($_POST['pass1']);
      $sql = "INSERT INTO gebruikers (username, password, email, status, aktief, actcode) VALUES ('".$_POST['user']."','".$md5pass."','".$_POST['email']."',0,'"."',0,'".$actcode."')";
      $result= = mysqli_query($connection, $sql);

      if($result == TRUE) {
       $sql = "SELECT id FROM gebruikers WHERE naam='".$_POST['user']."'";
       $result = mysqli_query($connection, $sql);
       $rij = mysqli_fetch_object($result);
       $dbid = htmlspecialchars($rij->id);

       $bericht = "Activeer link";
       $mail = mail($_POST['email'],"Registratie ".$sitenaam,$bericht,"From: ".$sitenaam." <".$sitemail.">");

       if($mail == TRUE) {
        echo "Je bent succesvol geregistreerd! Zodra je de link in de mail hebt bezocht kun je inloggen.<br />\n<a href=\"home.php\">&laquo; Naar de inlogpagina</a>";
       }
else{
        echo "Fout opgetreden tijdens verzenden van e-mail. Neem contact op met <a href=\"mailto:".$sitemail."\">".$sitemail."</a>.";
       }

      }
else{
       echo "Er is een fout opgetreden tijdens het toevoegen van je account. Probeer het later nog eens.<br />\n<a href=\"javascript:history.back()\">&laquo; Ga terug</a>";
      }

     }
else{
      echo "De door jou opgegeven wachtwoorden komen niet overeen.<br />\n<a href=\"javascript:history.back()\">&laquo; Ga terug</a>";
     }

    }
else{
     echo "Het e-mailadres dat jij opgaf, komt niet overeen met hoe een e-mailadres eruit zou moeten zien (gebruiker@domain.ext).<br />\n<a href=\"javascript:history.back()\">&laquo; Ga terug</a>";
    }

   }
else{
    echo "De gebruikersnaam '".$_POST['user']."' is reeds in gebruik. Probeer een andere gebruikersnaam.<br />\n<a href=\"javascript:history.back()\">&laquo; Ga terug</a>";
   }

  }
else{
   echo "Je bent vergeten één of meerdere velden in te vullen.<br />\n<a href=\"javascript:history.back()\">&laquo; Ga terug</a>";
  }

 }
else{
//                 formulier
  ?>



<head>
<title>genealogie</title>
<link rel="stylesheet" type="text/css" href="famtree.css">
</head>
<body style="background: #D3D3D3; margin: 0px;">

<table width=100%>
<tr><td class="subTitle"><b>Registreren</b></td></tr>
</table>

<br>
Vul het registratie formulier hieronder in  <br><br>

  <form method="post" action="registreer.php">
   <table>
    <tr>
     <td class="menu2Title">Gebruikersnaam:</td>
     <td class="menu2Title"><input type="text" name="user" maxlength="50" /></td>
    </tr>

    <tr>
     <td class="menu2Title">Wachtwoord:</td>
     <td class="menu2Title"><input type="password" name="pass1" /></td>
    </tr>

    <tr>
     <td class="menu2Title">Herhaal:</td>
     <td class="menu2Title"><input type="password" name="pass2" /></td>
    </tr>

    <tr>
     <td class="menu2Title">E-mail:</td>
     <td class="menu2Title"><input type="text" name="email" maxlength="100"  /></td>
    </tr>

    <tr>
     <td></td>
     <td class="menu2Title"><input type="submit" name="submit" value="Registreer" /></td>
    </tr>

   </table>
  </form>

  <small>Na de registratie zal er een e-mail naar uw e-mailadres gestuurd worden ter activatie. Tot die tijd kunt u nog niet inloggen.<br>  </small>
</body>
  <?
 }

?>

[/quote]
 
PHP hulp

PHP hulp

08/05/2021 12:27:36
 
Rob Doemaarwat

Rob Doemaarwat

29/05/2018 19:07:36
Quote Anchor link
Om foutmeldingen in beeld te krijgen gebruik je (bovenaan - alleen tijdens debuggen!):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
ini_set('display_errors',true);
error_reporting(E_ALL);

Wat me aan bovenstaande opvalt:
- short tags: gebruik "< ?php" ipv "< ?" (maar dan zonder spatie tussen "<" en "?", maar anders ging de opmaak brak)
- op regel 32 staat een dubbele "="
Gewijzigd op 29/05/2018 19:08:49 door Rob Doemaarwat
 
Thomas van den Heuvel

Thomas van den Heuvel

29/05/2018 19:35:20
Quote Anchor link
$_POST-variabelen, of wat voor variabelen dan ook, rechtstreeks in queries gooien is ook vragen om ongelukken.

Gebruik escaping-functionaliteit voor DATA in je SQL. En gebruik dit altijd in combinatie met quotes. Het een is niet veilig zonder het ander.

Escape ook pas zaken (ook in HTML) wanneer dit pas nodig is, dit is doorgaans vlak voor gebruik. Om ergens op voorhand htmlspecialchars() omheen te gooien lijkt mij niet verstandig.

Misschien is dit ook een uitgelezen moment om je eens te verdiepen in character encoderingen, want functies als htmlspecialchars() maar ook database-escaping-functies zijn hier sterk afhankelijk van. Daarnaast is over de PHP-versies stilzwijgend de default character encoding die htmlspecialchars() gebruikt veranderd. Mogelijk wijkt deze af van de character encoding die je verder binnen je website gebruikt... Ook is het zaak dat je expliciet een character encoding instelt bij het maken van een database-verbinding zodat MySQL ook weet in welk format deze informatie ontvangt en in welk format deze informatie dient te retourneren.

Je zult ons ook wat meer moeten helpen dan enkel met een "het werkt niet". Wat gaat er mis, en waar blijkt dit uit. De code-snippet hierboven van @Rob kan je mogelijk helpen bij het lokaliseren van fouten.
 
Theo Huitema

Theo Huitema

29/05/2018 20:06:46
Quote Anchor link
De foutmelding met Rob zijn srukje code zijn:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in registreer.php on line 14

Fatal error: Uncaught Error: Call to undefined function eregi() in registreer.php:25 Stack trace: #0 {main} thrown in registreer.php on line 25
 
Rob Doemaarwat

Rob Doemaarwat

29/05/2018 20:20:41
Quote Anchor link
@1: De query is mislukt. De SQL ziet er goed uit (als je tenminste geen quootjes in je "user" gebruikt ...). Bestaat je $connection wel?

@2: Die functie bestaat niet meer. Het is nu preg_match(), maar dan moet je wel een delimiter toevoegen.

Maar wat Thomas ook al aangaf: Dit moet je zo niet meer live willen zetten. Het is een paradijsje voor een hacker ...
 
Theo Huitema

Theo Huitema

29/05/2018 20:52:04
Quote Anchor link
Oke Rob, je hebt gelijk ik wil een website waar de privacy goed is.
Zeker met die nieuwe privacy wet moet je extra voorzichtig zijn.

Ik heb zelf niet genoeg kennis om een veiliger iets te maken. En de scripts online zijn vaak verouderd.
Denk dat ik het maar offline houd.
Gewijzigd op 29/05/2018 21:32:15 door Theo Huitema
 



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.