hoi iedereen,

heb een paar kleine foutje waar ik na 2 dagen debuggen nog steeds uit kom.
dit zijn de warnings die ik krijg:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in E:\8.5\root\bsw\login\index.php on line 55

Warning: mysql_query() expects parameter 1 to be string, resource given in E:\8.5\root\bsw\login\index.php on line 62

Warning: mysql_affected_rows(): 4 is not a valid MySQL-Link resource in E:\8.5\root\bsw\login\index.php on line 68

<?php
include ('../include/config.php');

// debugger
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit

# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}

if (isset($_POST['formsubmitted'])) {
$error = array(); // maak een array voor error opslag

// naam
if (!isset($_POST['name'])) { // wanneer er geen naam is ingevoerd
$error[] = 'Voer een naam in aub. '; // voeg toe aan array errors
} else {
$name =mysql_real_escape_string($_POST['name']); //wanneer een naam is ingevuld koppel deze aan een variabele
}

//email
if (!isset($_POST['e-mail'])) {
$error[] = 'voer uw email in aub. '; // voeg toe aan array errors
} else {
if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", // controle op tekens in het email adres.
$_POST['e-mail'])) {
$Email = mysql_real_escape_string($_POST['e-mail']);
} else {
$error[] = 'uw email adres is ongeldig.';
}

}
// password
if (!isset($_POST['password'])) {
$error[] = 'vul aub uw wachtwoord in.';
} else {
if(!isset($_POST['password1'])){
$error[]='herhaal uw wachtwoord aub.';
}else{

if($_POST['password']== $_POST['password1']){
$Password = md5(mysql_real_escape_string($_POST['password']));
} else {
$error[]=' Wachtwoorden komen niet overeen.';
}
}
}
if (empty($error)){ //wanneer er geen errors zijn gaat dit naar de database

// controle of email adres niet al in gebruik is.
$query_verify_email = "SELECT * FROM members WHERE Email =".$Email;
$result_verify_email = mysql_query($query_verify_email);


//als de query mislukt ,vergelijkbaar met: if($result_verify_email==false)
if ($result_verify_email) {
echo ' er heeft een fout plaatsgevonden in de database ';
}

// als het email adres nog niet geregistreerd is .
if (mysql_num_rows(mysql_query($result_verify_email) == 0) {

// Creeër een unieke activatie code
$activation = md5(uniqid(rand(), true));

$query_insert_user ="INSERT INTO `members` ( `Username`, `Email`, `Password`, `Activation`) VALUES ( '$name', '$Email', '$Password', '$activation')";

$result_insert_user = mysql_query($query_insert_user);
if (!$result_insert_user) {
echo 'Registreren mislukt excusses voor de overlast.';
}

//als de query gelukt is.
if (mysql_affected_rows($link) == 1) {

// verstuur de email:
$message = " Om uw account te activeren klik alstublieft op deze link:\n\n";
$message .= WEBSITE_URL . '/activate.php?email=' . urlencode($Email) . "&key=$activation";
mail($Email, 'Registration Confirmation', $message, 'From:'.EMAIL);

// Flush the buffered output.

// maak deze pagina compleet:
echo '<div class="success">Bedankt voor het registreren. Een conformatie email is verzondern naar ' . $Email .' klik alstublieft op de link in de email om uw account te activeren</div>';

} else {
//als t niet goed ging.
echo '<div id="sysError" class="errormsgbox">U heeft zich niet kunnen registreren. Excusses voor het ongemak.
</div>';
}
// het email adres is niet beschikbaar.
} else {
echo '<div class="errormsgbox" >Het email adres is al geregistreerd.</div>';
}

//als de error[] fouten bevat toon deze
} else {
echo '<div class="errormsgbox"> <ol>';
foreach ($error as $key => $values) {

echo '<li>' . $values . '</li>';

}
echo '</ol></div>';
}}
?>

met vriendelijke groet
Ralph van der Tang
krijg nu :Parse error: syntax error, unexpected '{' in E:\8.5\root\bsw\login\index.php on line 75

script geupdate boven.
Haakjes tellen.
Kijk eens bij elke mysql-functie wat de functie verwacht (als input) in de parameters en wat de functie terug geeft.

---

bv. lijn 74-75
<?php
// als het email adres nog niet geregistreerd is .
if (mysql_num_rows(mysql_query($result_verify_email) == 0) {
?>

* Zie hier eens: http://php.net/manual/en/function.mysql-num-rows.php

mysql_num_rows verwacht een resource; een result van een mysql_query
in jouw geval dus $result_verify_email


* http://php.net/manual/en/function.mysql-query.php
mysql_query verwacht dan weer een SQL-string. Je weet wel, iets als "SELECT username, email FROM ..."
en mysql_query geeft een resource terug.

mysql_query($result_verify_email) is dus pure nonsens.


dus ... dit moet worden
<?php
// als het email adres nog niet geregistreerd is .
if (mysql_num_rows($result_verify_email) == 0) {
?>

En dit controleer je dus even voor alle mysql-functies
krijg query was empty dat klopt maar hoe kan je dan verder gaan script werkt niet door terwijl het dat juist wel zou moeten
Wel ja, dus lijn 75:
<?php
if (mysql_num_rows($result_verify_email) === 0) {
?>
// geen == maar === . Anders wordt een false ook doorgelaten en heb je dus niets aan de if.

----

Lijn 65:
<?php
$query_verify_email = "SELECT * FROM members WHERE Email='" . $Email . "' ";
?>
Je bent de ' vergeten

-----

mysql_affected_rows():
Je mag de parameter weglaten, ofwel zet je daar de return van mysql_connect.

dus, ergens in config.php heb je

$link = mysql_connect(...);
...
mysql_affected_rows($link);

En toon zelf nog eens hoe je code er nu uitziet.
de errors die ik krijg zijn de volgende:


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in G:\8.5\root\bsw\login\index.php on line 70

dit komt waarschijnlijk door de null die gegeven wordt door : $result_verify_email = mysql_query($query_verify_email);

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in G:\8.5\root\bsw\login\index.php on line 79

<?php
include ('../include/config.php');

// begin debugging
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);

# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit

# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}

// einde debugging

if (isset($_POST['formsubmitted']))
{
$error = array(); // maak een array voor error opslag

// naam
if (!isset($_POST['name'])) { // wanneer er geen naam is ingevoerd
$error[] = 'Voer een naam in aub. '; // voeg toe aan array errors
} else {
$name =mysql_real_escape_string($_POST['name']); //wanneer een naam is ingevuld koppel deze aan een variabele
}

//email
if (!isset($_POST['e-mail'])) {
$error[] = 'voer uw email in aub. '; // voeg toe aan array errors
} else {
if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", // controle op tekens in het email adres.
$_POST['e-mail'])) {
$Email = mysql_real_escape_string($_POST['e-mail']);
} else {
$error[] = 'uw email adres is ongeldig.';
}

}
// password
if (!isset($_POST['password'])) {
$error[] = 'vul aub uw wachtwoord in.';
} else {
if(!isset($_POST['password1'])){
$error[]='herhaal uw wachtwoord aub.';
}else{

if($_POST['password']=== $_POST['password1']){
$Password = md5(mysql_real_escape_string($_POST['password']));
} else {
$error[]=' Wachtwoorden komen niet overeen.';
}
}
}
if (empty($error)){ //wanneer er geen errors zijn gaat dit naar de database

// controle of email adres niet al in gebruik is.
$query_verify_email = "SELECT * FROM members WHERE Email =".$Email;
$result_verify_email = mysql_query($query_verify_email);
$array_verify_email= mysql_fetch_array($result_verify_email);


//als de query mislukt ,vergelijkbaar met: if($result_verify_email==false)
if ($result_verify_email) {
echo ' er heeft een fout plaatsgevonden in de database ';
}

// als het email adres nog niet geregistreerd is .
if (mysql_num_rows($result_verify_email) === 0) {

// Creeër een unieke activatie code
$activation = md5(uniqid(rand(), true));

// insert member query.
$query_insert_user ="INSERT INTO `members` ( `Username`, `Email`, `Password`, `Activation`) VALUES ( '$name', '$Email', '$Password', '$activation')";
$result_insert_user = mysql_query($query_insert_user);
if (!$result_insert_user) {
echo 'Registreren mislukt excusses voor de overlast.';
}

//als de query gelukt is.
if (mysql_affected_rows($link) == 1) {

// verstuur de email:
$message = " Om uw account te activeren klik alstublieft op deze link:\n\n";
$message .= WEBSITE_URL . '/activate.php?email=' . urlencode($Email) . "&key=$activation";
mail($Email, 'Registration Confirmation', $message, 'From:'.EMAIL);

// Flush the buffered output.

// maak deze pagina compleet:
echo '<div class="success">Bedankt voor het registreren. Een conformatie email is verzondern naar ' . $Email .' klik alstublieft op de link in de email om uw account te activeren</div>';

} else {
//als t niet goed ging.
echo '<div id="sysError" class="errormsgbox">U heeft zich niet kunnen registreren. Excusses voor het ongemak.</div>';
}
// het email adres is niet beschikbaar.
} else {
echo '<div class="errormsgbox" >Het email adres is al geregistreerd.</div>';
}

//als de error[] fouten bevat toon deze
} else {
echo '<div class="errormsgbox"> <ol>';
foreach ($error as $key => $values) {

echo '<li>' . $values . '</li>';

}
echo '</ol></div>';
}
}
mysql_close($link); //sluit de database verbinding
?>
Ralph van der Tang op 09/10/2012 10:34:36

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in G:\8.5\root\bsw\login\index.php on line 70



Je snapt toch wat daar op je scherm staat?
Als je query string niet klopt, zal mysql_query niet werken en zullen alle andere mysql_functies ook fouten geven.

Dan zal je uiteraard niet kunnen berekenen hoeveel records er zijn, zal je niet kunnen fetchen, ...

Ik heb je al gezegd dat die query string fout is en hoe ze te verbeteren.

blijf hangen in een stukje script
op de een of andere manier werkt mijn insert query niet
de error die ik krijg is de volgende:
Error: 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 '@test.nl, 0ab19c1

de query is:
$query_insert_user ="INSERT INTO `members` ( `Username`, `Email`, `Password`, `Activation`) VALUES ( ".$Name.",".$Email.", ".$Password.", ".$Activation.")";

alle variabelen hebben een waarde

alvast bedankt
Ralph

Doe de quotes is andersom


<?php
$query_insert_user ="INSERT INTO members ( Username, Email, Password, Activation) VALUES ( '".$Name."','".$Email."', '".$Password."', '".$Activation."')";
?>

Reageren