Mysql/PHP Wat is hier mis mee ?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan K

Johan K

13/02/2006 15:02:00
Quote Anchor link
effe zorgen dat die banner niet in de weg komt :)

ik ben bezig met een form, ik haal bij php.net de nodige informatie.

maar dit script geeft geen errors warnings helemaal niets.

hij schijnt gewoon niets in de database te zetten...
dat mail dingetje heb ik hier ergens van gejat :), sry :)

das nog te moeilijk voor mij

mysql config
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$mysql_username
="johan_full";
$mysql_password="***********";
$mysql_database="johan";
$mysql_host="localhost";

mysql_connect($mysql_host ,$mysql_username, $mysql_password) or die (" mysql connection failed");
mysql_select_db($mysql_database) or die("Database error");
?>



dit is mijn hele process_registery.php


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
require("mysql_config_full.php");
error_reporting(E_ALL);
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Process registery</title>
</head>

<body>

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
<?php
    
  function check_mail($email){
  $email_host = explode("@",$email);
  $email_host = $email_host['1'];
  $email_domein = gethostbyname($email_host);
    
  if($email_domein !== $email_host && eregi("^[0-9a-z]([-_.~]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email)){
  $geldig = 1;
  }

  return $geldig;
 }

  
  if($_POST['password'] != $_POST['validate_password']){
  echo"The passwords are not the same.<br/>";
  echo"Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
  }

  
  else
  
  if($_POST['password'] == $_POST['validate_password']){
  $username = addslashes($_POST['nickname']);
  $sql = "SELECT * FROM `darkbrotherhood` WHERE `nickname` = '".$username."'";
  $query = mysql_query($sql);
                  
  if(mysql_num_rows($query) >= 1){
  echo "The username is already been used<br/>";
  echo "Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
  }

  
  else
  
  {
  $check = check_mail($_POST['email']);
                            
  if($check !== 1){
  echo "The e-mail adress is not correct<br/>";
  echo "Click <a href=\"javascript:history.back(-1)\">here</a> to go back.<br/>";
  }

  
  else
  
  {
  
  $username = addslashes($_POST['nickname']);
  $md5_ww = md5($_POST['password']);
  $email = addslashes($_POST['email']);
  $realname = $_POST['real_name'];
  $birthdate_day = $_POST['birthdate_day'];
  $birthdate_month = $_POST['birthdate_month'];
  $birthdate_year = $_POST['birthdate_year'];
  $rank = $_POST['site_rank'];
  
  mysql_query("INSERT INTO `darkbrotherhood` (`nickname`, `password`, `email`, `real_name`, `birthdate_day`, `birthdate_month`, `birthdate_year`, `site_rank`) VALUES ('".$username."','".$md5_ww."', '".$email."','".$realname."','".$birthdate_day."','".$birthdate_month."','".$birthdate_year."','".$rank."')");
  echo "U can now <a href=\"login.php\">login</a>.<br/>";
  }
  }
  }

  
?>
Gewijzigd op 13/02/2006 15:46:00 door Johan K
 
PHP hulp

PHP hulp

27/04/2024 12:06:19
 
Martijn B

Martijn B

13/02/2006 15:13:00
Quote Anchor link
Dit moet je ff bovenin je script zetten:

error_reporting(E_ALL);

De eerste kolom van je query heb ik al goed gedaan, nu de rest nog ;D


mysql_query("INSERT INTO `darkbrotherhood` (`nickname`, `password`, `email`, `real_name`, `birthdate_day`, `birthdate_month`, `birthdate_year`, `site_rank`) VALUES ('".$username."',"$md5_ww","$email","$realname","$birthdate_day","$birthdate_month","$birthdate_year","$rank")");


En pas op met query injections.
Gewijzigd op 13/02/2006 15:14:00 door Martijn B
 
Woopie100

Woopie100

13/02/2006 15:14:00
Quote Anchor link
Hij doet toch addslahes of is dat niet genoeg?
 
Martijn B

Martijn B

13/02/2006 15:16:00
Quote Anchor link
Met addslashes ben je er nog niet.

Haal de functies mysql_escape_string of mysql_real_escape_string nog maar over alle ingevoerde waardes.

edit:
addslashed kun je dan weg laten.
Gewijzigd op 13/02/2006 15:18:00 door Martijn B
 
Johan K

Johan K

13/02/2006 15:19:00
Quote Anchor link
^^ ik weet niet of dat wel het probleem is :)
maar ik zet het er wel effe boven.

edit:

voor dat ik gister naar bed ben gegaan het ik het helemaal verkloot :), brb effe fixen
Gewijzigd op 13/02/2006 15:23:00 door Johan K
 
Willem vp

Willem vp

13/02/2006 15:21:00
Quote Anchor link
Je gebruikt dubbele quotes om je query-string mee te definieren, en dubbele quotes om MySQL-strings mee aan te geven. Dat bijt elkaar nogal. Je kan dus beter enkele quotes gebruiken, dus zeg maar:

("... VALUES ('$username', '$md5_ww', etc, '$rank')");

Addslashes oid is het probleem niet. Het probleem is dat je steeds de string beëindigt, de variabele print en vervolgens de string weer opent. MySQL krijgt dan waardes zonder quotes eromheen, en als het geen integer-waardes zijn gaat dat fout. En eigenlijk gaat het aan elkaar plakken van die string-fragmenten en de variabelen ook niet goed, omdat er geen concatenatie-operator tussen staat. Oftewel, de parser kan er geen kaas meer van maken ;-)
Gewijzigd op 13/02/2006 15:26:00 door Willem vp
 
Erik Rijk

Erik Rijk

13/02/2006 15:24:00
Quote Anchor link
mysql_real_escape_string();

(PHP 4 >= 4.3.0, PHP 5)

geen backtics gebruiken in je query, zo leer je jezelf een foute manier aan.
stelt je in staat "gereserveerde" mysql woorden te gebruiken en dat is meestal niet goed.

@ Woopie

htmlentities() zou ik zeker niet vergeten
 
Johan K

Johan K

13/02/2006 15:29:00
Quote Anchor link
mm me fout zit hem dus in de quotes.. daar ben ik overgens nooit goed in geweest :)

*/ ik ben hier een week mee bezig geweest om het zelf te doen, maar het begint me uit de keel te hangen :P /*

@ martijn!


Notice: Undefined index: site_rank in C:\Program Files\hosting\xampp\xampp\htdocs\process_registery.php on line 66

probleem opgelost, maar alsnog zet hij niets in de database
Gewijzigd op 13/02/2006 15:39:00 door Johan K
 
Woopie100

Woopie100

13/02/2006 15:39:00
Quote Anchor link
jah htmlentities doe ik er ook nog altijd bij....
 
Johan K

Johan K

13/02/2006 16:18:00
Quote Anchor link
hoe vaker ik er overheen kijk, hoe gekker ik wordt, ik zie echt helemaal geen fouten, maar ze zitten er. :S
 
Niels Beckers

Niels Beckers

13/02/2006 16:58:00
Quote Anchor link
laat eens zien hoe je het nu hebt
 
Willem vp

Willem vp

13/02/2006 17:31:00
Quote Anchor link
Die undefined index site_rank kan nog roet in het eten gooien.

Ik zou gaan voor:

$rank = $_POST['site_rank'] ? $_POST['site_rank'] : '';

Dit zorgt ervoor dat $rank op z'n minst een lege string bevat. Eigenlijk zou je iets dergelijks ook voor de andere variabelen moeten doen, zodat je script niet bokt als een van de parameters niet wordt meegegeven in de URL.
 
Niels Beckers

Niels Beckers

13/02/2006 17:44:00
Quote Anchor link
willem waarvoor staat dat ? er eiglijk?
 
Willem vp

Willem vp

13/02/2006 17:59:00
Quote Anchor link
De constructie met ?: is een conditionele expressie; een soort if-then-else. Je kan het vraagteken vergelijken met een 'then' en de dubbele punt met een 'else'. Stel dat je de volgende coderegel hebt:

$var = $a ? $b : $c;

$a is hierbij de conditie. Dat kan alles zijn, als het maar iets oplevert wat door PHP wordt gezien als true of false.

Als de conditie $a true is, is het resultaat van de expressie $b. Is $a false, dan is het resultaat van de expressie (en dus de waarde van $var) $c.

De coderegel uit mijn vorige post is dus eigenlijk een korte versie van

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
if ($_POST['site_rank'])
{

   $rank = ? $_POST['site_rank'];
}

else
{
   $rank = '';
}

?>


Doordat het maar 1 regel is, vind ik het een stuk leesbaarder dan wanneer je de if-then-else uit zou schrijven (en al helemaal als je hetzelfde moet doen voor 10 andere variabelen).

Dit is een constructie die afkomstig is uit C (of misschien zelfs daarvoor) en die best vaak wordt gebruikt in talen als C of Perl (en afgeleiden daarvan, zoals PHP).

Voor meer informatie, klik hier en zoek naar het kopje "Ternary Operator".
Gewijzigd op 13/02/2006 18:03:00 door Willem vp
 
Niels Beckers

Niels Beckers

13/02/2006 18:01:00
Quote Anchor link
bedankt willem voor de zeer goede uitleg
 
Lissy Pixel

Lissy Pixel

13/02/2006 18:59:00
Quote Anchor link
Geweldig deze uitleg want ik kwam hem met het maken van de cms ook tegen en ben eigenlijk vergeten te vragen wat dit betekende. Onder andere deze:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$inhoud_id
    = isset($_GET['inhoud_id']) ? $_GET['inhoud_id'] : "";
?>


BEDANKT voor de hele heldere uitleg!!
 



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.