probleem met nieuwsbrief systeem (db)
Ik zit met het volgende.
Ik heb een nieuwsbrief systeem met Mysql. Het is een bestaand script, maar wil deze verder aanpassen. Ik heb al extra rijen toegevoegd etc.
In de database 'email' staat momenteel:
CREATE TABLE IF NOT EXISTS `emails` (
`id` int(11) NOT NULL auto_increment,
`email` text NOT NULL,
`naam` text NOT NULL,
`kinderen` text NOT NULL,
`groep` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$toevoegquery = "INSERT INTO emails (naam, email, kinderen, groep) VALUES ('" . mysql_real_escape_string($_GET['naam']) . "', '" . mysql_real_escape_string($_GET['email']) . "')"; //De query om het emailadres in de database op te slaan
if(mysql_query($toevoegquery)){ //Query gelukt? bericht laten zien
echo "Beste " . htmlentities($_GET['naam'], ENT_QUOTES) . " uw e-mail adres: " . htmlentities($_GET['email'], ENT_QUOTES) . " is toegevoegd aan de database.";
?>
$toevoegquery = "INSERT INTO emails (naam, email, kinderen, groep) VALUES ('" . mysql_real_escape_string($_GET['naam']) . "', '" . mysql_real_escape_string($_GET['email']) . "')"; //De query om het emailadres in de database op te slaan
if(mysql_query($toevoegquery)){ //Query gelukt? bericht laten zien
echo "Beste " . htmlentities($_GET['naam'], ENT_QUOTES) . " uw e-mail adres: " . htmlentities($_GET['email'], ENT_QUOTES) . " is toegevoegd aan de database.";
?>
Wanneer ik het email adres wil bevestigen krijg ik de volgende melding:
Er is een fout opgetreden tijdens het toevoegen. De query was: INSERT INTO emails (naam, email, kinderen, groep) VALUES ('Leon', '[email protected]')
De error van mysql: Column count doesn't match value count at row 1
Wie weet waar het probeelm kan zitten? Mochten jullie meer info willen hoor ik het graag.
Alvast bedankt voor jullie hulp.
je zegt dat je 4 rijen wilt toevoegen maar je geeft maar 2 inhouden
Ik heb deze error nog nooit gehad, maar als ik de error lees komt het omdat je 4 columns aangeeft en 2 values. beide moeten dezelfde aantal zijn..
gewoon 4 waardes in de query doen
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
// hier zit het probleem
('" . mysql_real_escape_string($_GET['naam']) . "', '" . mysql_real_escape_string($_GET['email']) . "')";
// het moet het volgende worden volgens mij
('" . mysql_real_escape_string($_GET['naam']) . "', '" . mysql_real_escape_string($_GET['email']) . "', '" . mysql_real_escape_string($_GET['kinderen']) . "', '" . mysql_real_escape_string($_GET['groep']) . "')";
?>
// hier zit het probleem
('" . mysql_real_escape_string($_GET['naam']) . "', '" . mysql_real_escape_string($_GET['email']) . "')";
// het moet het volgende worden volgens mij
('" . mysql_real_escape_string($_GET['naam']) . "', '" . mysql_real_escape_string($_GET['email']) . "', '" . mysql_real_escape_string($_GET['kinderen']) . "', '" . mysql_real_escape_string($_GET['groep']) . "')";
?>
Klopt dit of heb ik het fout?
zou je even moeten proberen
Heeft iemand idee hoe dit probleem opgelost kan worden? Mochten er meer info nodig zijn hoor ik het wel.
Gewijzigd op 08/12/2010 18:23:37 door Leon den H
Laat je hele code nog eens zien wat je nu hebt
Code (php)
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
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
<?php
include ("config.php"); //De config laden
include ("connect.php"); //Connectie maken met database
include ("class.phpmailer.php"); //PHP mailer includen
function checkmail($mail)
{
// explode het e-mail adres op een @
$email_host = explode("@", $mail);
// pak alles na de @
$email_host = $email_host['1'];
// zet een var met de (eventuele) DNS van de domein
$email_resolved = gethostbyname($email_host);
// kijk of er een DNS aan zit en of alles voor en na het e-mail adres klopt
if ($email_resolved != $email_host && eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$",$mail))
$valid = 1;
// wanneer het geldig is, is $valid = 1, zo niet, dan geeft hij geen result (NULL)
return $valid;
}
if (checkmail($_GET['email']))
{
if(isset($_GET['email']) and isset($_GET['naam']))
{
$email = $_GET['email'];
$naam = $_GET['naam'];
$check = mysql_query("SELECT email FROM emails WHERE email = '$email'") //Kijken of de email al bestaat
or die(mysql_error()); //Checken lukt niet? Mysql error!
$check2 = mysql_num_rows($check); //Checken
if ($check2 != 0) { // Bestaat hij al?
die('Sorry, het e-mail adres '.$_POST['email'].' staat al in ons systeem.'); //Bericht weergeven
}
$toevoegquery = "INSERT INTO emails (naam, email, kinderen, groep) VALUES ('" . mysql_real_escape_string($_GET['naam']) . "', '" . mysql_real_escape_string($_GET['email']) . "', '" . mysql_real_escape_string($_GET['kinderen']) . "', '" . mysql_real_escape_string($_GET['groep']) . "')";
//De query om het emailadres in de database op te slaan
if(mysql_query($toevoegquery)){ //Query gelukt? bericht laten zien
echo "Beste " . htmlentities($_GET['naam'], ENT_QUOTES) . " uw e-mail adres: " . htmlentities($_GET['email'], ENT_QUOTES) . " is toegevoegd aan de database.";
$onderwerp = "Bedankt voor uw aanmelding voor de digitale nieuwsbrief";
$bericht = "Beste " . htmlentities($_GET['naam'], ENT_QUOTES) . "<br />
<br>Bedankt voor uw aanmelding voor de digitale nieuwsbrief.<br />
<br>Uw account is nu geactiveerd. Vanaf nu zult u op dit e-mail adres de nieuwsbrieven ontvangen.<br /><br />
Met vriendelijke groet,
<br>
";
$mail = new PHPMailer();
$mail->From = $email_verzender;
$mail->FromName = $naam_verzender;
$mail->Subject = $onderwerp;
$mail->AltBody = "Om deze mail te bekijken heb je een HTML email reader nodig!";
$mail->MsgHTML($bericht);
$mail->AddAddress($email);
$mail->AddAttachment($bijlage);
if(!$mail->Send())
{
echo "Het bericht kon niet worden verstuurd. <p>";
echo "Error: " . $mail->ErrorInfo;
exit;
}
}else{
echo "Er is een fout opgetreden tijdens het toevoegen. De query was: " . $toevoegquery; //Anders de query laten zien
echo "<br />De error van mysql: " . mysql_error(); //En de error die mysql gaf
}
}else {
echo'Hacking!';
}
}
else
{
echo ("Sorry maar dat is geen geldig e-mail adres");
echo ("<br>");
echo ("<br>");
echo ("<a href=\"#\" onClick=\"history.back()\">Klik hier om terug te keren</a>");
}
?>
include ("config.php"); //De config laden
include ("connect.php"); //Connectie maken met database
include ("class.phpmailer.php"); //PHP mailer includen
function checkmail($mail)
{
// explode het e-mail adres op een @
$email_host = explode("@", $mail);
// pak alles na de @
$email_host = $email_host['1'];
// zet een var met de (eventuele) DNS van de domein
$email_resolved = gethostbyname($email_host);
// kijk of er een DNS aan zit en of alles voor en na het e-mail adres klopt
if ($email_resolved != $email_host && eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$",$mail))
$valid = 1;
// wanneer het geldig is, is $valid = 1, zo niet, dan geeft hij geen result (NULL)
return $valid;
}
if (checkmail($_GET['email']))
{
if(isset($_GET['email']) and isset($_GET['naam']))
{
$email = $_GET['email'];
$naam = $_GET['naam'];
$check = mysql_query("SELECT email FROM emails WHERE email = '$email'") //Kijken of de email al bestaat
or die(mysql_error()); //Checken lukt niet? Mysql error!
$check2 = mysql_num_rows($check); //Checken
if ($check2 != 0) { // Bestaat hij al?
die('Sorry, het e-mail adres '.$_POST['email'].' staat al in ons systeem.'); //Bericht weergeven
}
$toevoegquery = "INSERT INTO emails (naam, email, kinderen, groep) VALUES ('" . mysql_real_escape_string($_GET['naam']) . "', '" . mysql_real_escape_string($_GET['email']) . "', '" . mysql_real_escape_string($_GET['kinderen']) . "', '" . mysql_real_escape_string($_GET['groep']) . "')";
//De query om het emailadres in de database op te slaan
if(mysql_query($toevoegquery)){ //Query gelukt? bericht laten zien
echo "Beste " . htmlentities($_GET['naam'], ENT_QUOTES) . " uw e-mail adres: " . htmlentities($_GET['email'], ENT_QUOTES) . " is toegevoegd aan de database.";
$onderwerp = "Bedankt voor uw aanmelding voor de digitale nieuwsbrief";
$bericht = "Beste " . htmlentities($_GET['naam'], ENT_QUOTES) . "<br />
<br>Bedankt voor uw aanmelding voor de digitale nieuwsbrief.<br />
<br>Uw account is nu geactiveerd. Vanaf nu zult u op dit e-mail adres de nieuwsbrieven ontvangen.<br /><br />
Met vriendelijke groet,
<br>
";
$mail = new PHPMailer();
$mail->From = $email_verzender;
$mail->FromName = $naam_verzender;
$mail->Subject = $onderwerp;
$mail->AltBody = "Om deze mail te bekijken heb je een HTML email reader nodig!";
$mail->MsgHTML($bericht);
$mail->AddAddress($email);
$mail->AddAttachment($bijlage);
if(!$mail->Send())
{
echo "Het bericht kon niet worden verstuurd. <p>";
echo "Error: " . $mail->ErrorInfo;
exit;
}
}else{
echo "Er is een fout opgetreden tijdens het toevoegen. De query was: " . $toevoegquery; //Anders de query laten zien
echo "<br />De error van mysql: " . mysql_error(); //En de error die mysql gaf
}
}else {
echo'Hacking!';
}
}
else
{
echo ("Sorry maar dat is geen geldig e-mail adres");
echo ("<br>");
echo ("<br>");
echo ("<a href=\"#\" onClick=\"history.back()\">Klik hier om terug te keren</a>");
}
?>
</td>
</tr>
</table>
?>
bestaan $_GET['kinderen'] en $_GET['groep'] wel?
Zou het dan goed zijn, of moet ik nog meer aanpassen in verschillende .php files?
Komen alle gegevens die je wilt hebben uit formulier of uit de url?
Code (php)
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
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
<?php
<script language="javascript" type="text/javascript">
function check(formulier)
{
if (formulier.email.value=="")
{
alert("Vul uw email in.");
return false;
}
else if (formulier.email.value=="Email")
{
alert("Vul uw email in!");
return false;
}
else if (formulier.naam.value=="")
{
alert("Vul uw naam in.");
return false;
}
else if (formulier.naam.value=="Naam")
{
alert("Vul uw naam in!");
return false;
}
}
else if (formulier.kinderen.value=="")
{
alert("Vul de namen van uw kinderen in.");
return false;
}
else if (formulier.kinderen.value=="kinderen")
{
alert("Vul uw namen van de kinderen in");
return false;
}
}
else if (formulier.groep.value=="")
{
alert("Vul de groep van uw oudste kind in.");
return false;
}
else if (formulier.groep.value=="groep")
{
alert("Vul de naam van groep in van uw oudste kind!");
return false;
}
}
</script>
?>
<script language="javascript" type="text/javascript">
function check(formulier)
{
if (formulier.email.value=="")
{
alert("Vul uw email in.");
return false;
}
else if (formulier.email.value=="Email")
{
alert("Vul uw email in!");
return false;
}
else if (formulier.naam.value=="")
{
alert("Vul uw naam in.");
return false;
}
else if (formulier.naam.value=="Naam")
{
alert("Vul uw naam in!");
return false;
}
}
else if (formulier.kinderen.value=="")
{
alert("Vul de namen van uw kinderen in.");
return false;
}
else if (formulier.kinderen.value=="kinderen")
{
alert("Vul uw namen van de kinderen in");
return false;
}
}
else if (formulier.groep.value=="")
{
alert("Vul de groep van uw oudste kind in.");
return false;
}
else if (formulier.groep.value=="groep")
{
alert("Vul de naam van groep in van uw oudste kind!");
return false;
}
}
</script>
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
echo ("<br>");
echo ("<form id=\"formulier\" onSubmit=\"return check(this)\" method=\"POST\" action=\"inschrijven.php\">");
echo ("<input size=\"25\" maxlength=\"35\" type=\"text\" name=\"naam\" value=\"Uw voor- en achternaam\" style=\"font-weight:normal;\">");
echo ("<br>");
echo ("<br>");
echo ("<input size=\"25\" maxlength=\"35\" type=\"text\" name=\"email\" value=\"Uw email\" style=\"font-weight:normal;\">");
echo ("<br>");
echo ("<br>");
echo ("<input size=\"25\" maxlength=\"40\" type=\"text\" name=\"kinderen\" value=\"Naam van uw kinderen\" style=\"font-weight:normal;\">");
echo ("<br>");
echo ("<br>");
echo ("<input size=\"25\" maxlength=\"35\" type=\"text\" name=\"groep\" value=\"Groep oudste kind\" style=\"font-weight:normal;\">");
echo ("<br>");
echo ("<br>");
echo ("<input type=\"submit\" value=\"Inschrijven\" style=\"font-weight:normal; center;\">");
echo ("</form>");
?>
echo ("<br>");
echo ("<form id=\"formulier\" onSubmit=\"return check(this)\" method=\"POST\" action=\"inschrijven.php\">");
echo ("<input size=\"25\" maxlength=\"35\" type=\"text\" name=\"naam\" value=\"Uw voor- en achternaam\" style=\"font-weight:normal;\">");
echo ("<br>");
echo ("<br>");
echo ("<input size=\"25\" maxlength=\"35\" type=\"text\" name=\"email\" value=\"Uw email\" style=\"font-weight:normal;\">");
echo ("<br>");
echo ("<br>");
echo ("<input size=\"25\" maxlength=\"40\" type=\"text\" name=\"kinderen\" value=\"Naam van uw kinderen\" style=\"font-weight:normal;\">");
echo ("<br>");
echo ("<br>");
echo ("<input size=\"25\" maxlength=\"35\" type=\"text\" name=\"groep\" value=\"Groep oudste kind\" style=\"font-weight:normal;\">");
echo ("<br>");
echo ("<br>");
echo ("<input type=\"submit\" value=\"Inschrijven\" style=\"font-weight:normal; center;\">");
echo ("</form>");
?>
dan moet je ook $_POST gebruiken, je moet ook in je php nog een keer checken of alles goed is, javascript kan altijd uit staan