Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in

Status
Niet open voor verdere reacties.

zodiak

Gebruiker
Lid geworden
9 okt 2008
Berichten
241
Hallo,
ik heb hier een script voor beveiligde pagina, offline werkt de site volledig met de wamp server zonder ook maar 1 fout, nu heb ik hem online geplaatst en krijg ik deze fout op deze pagina:

Code:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in
hieronder de data, die zogezegt de fout genereert:

PHP:
if ($fetch = mysql_fetch_array( mysql_query("SELECT `loggedip` FROM `ipcheck` WHERE `loggedip`='$iptocheck'"))) {


$resultx = mysql_query("SELECT `failedattempts` FROM `ipcheck` WHERE `loggedip`='$iptocheck'");

Hier is de volledige code:

PHP:
session_start(); 

require('config.php');

if (($_SESSION['logged_in'])==TRUE) {

$iprecreate= $_SERVER['REMOTE_ADDR'];
$useragentrecreate=$_SERVER["HTTP_USER_AGENT"];
$signaturerecreate=$_SESSION['signature'];


$saltrecreate = substr($signaturerecreate, 0, $length_salt);


$originalhash = substr($signaturerecreate, $length_salt, 40);


$hashrecreate= sha1($saltrecreate.$iprecreate.$useragentrecreate);

if (!($hashrecreate==$originalhash)) {


header(sprintf("Location: %s", $forbidden_url));	
exit;    
}

if ((isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > $sessiontimeout)))  {

session_destroy();   
session_unset();  


$redirectback=$domain.'securelogin/';
header(sprintf("Location: %s", $redirectback));
}
$_SESSION['LAST_ACTIVITY'] = time(); 

}

$validationresults=TRUE;
$registered=TRUE;
$recaptchavalidation=TRUE;


$iptocheck= $_SERVER['REMOTE_ADDR'];
$iptocheck= mysql_real_escape_string($iptocheck);

if ($fetch = mysql_fetch_array( mysql_query("SELECT `loggedip` FROM `ipcheck` WHERE `loggedip`='$iptocheck'"))) {


$resultx = mysql_query("SELECT `failedattempts` FROM `ipcheck` WHERE `loggedip`='$iptocheck'");
$rowx = mysql_fetch_array($resultx);
$loginattempts_total = $rowx['failedattempts'];

If ($loginattempts_total>$maxfailedattempt) {
	

header(sprintf("Location: %s", $forbidden_url));	
exit;
}
}


if (!isset($_SESSION['logged_in'])) {
    $_SESSION['logged_in'] = FALSE;
}


if ((isset($_POST["pass"])) && (isset($_POST["user"])) && ($_SESSION['LAST_ACTIVITY']==FALSE)) {


function sanitize($data){
$data=trim($data);
$data=htmlspecialchars($data);
$data=mysql_real_escape_string($data);
return $data;
}

$user=sanitize($_POST["user"]);
$pass= sanitize($_POST["pass"]);

if (!($fetch = mysql_fetch_array( mysql_query("SELECT `username` FROM `authentication` WHERE `username`='$user'")))) {


$registered=FALSE;
}

if ($registered==TRUE) {

$result1 = mysql_query("SELECT `loginattempt` FROM `authentication` WHERE `username`='$user'");
$row = mysql_fetch_array($result1);
$loginattempts_username = $row['loginattempt'];

}

if(($loginattempts_username>2) || ($registered==FALSE) || ($loginattempts_total>2)) {


require_once('recaptchalib.php');
$resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
	

$recaptchavalidation=FALSE;
} else {
$recaptchavalidation=TRUE;	
}
}


if ($registered==TRUE) {
	

$result = mysql_query("SELECT `password` FROM `authentication` WHERE `username`='$user'");
$row = mysql_fetch_array($result);
$correctpassword = $row['password'];
$salt = substr($correctpassword, 0, 64);
$correcthash = substr($correctpassword, 64, 64);
$userhash = hash("sha256", $salt . $pass);
}
if ((!($userhash == $correcthash)) || ($registered==FALSE) || ($recaptchavalidation==FALSE)) {


$validationresults=FALSE;


if ($registered==TRUE) {
$loginattempts_username= $loginattempts_username + 1;
$loginattempts_username=intval($loginattempts_username);

mysql_query("UPDATE `authentication` SET `loginattempt` = '$loginattempts_username' WHERE `username` = '$user'");


if (!($fetch = mysql_fetch_array( mysql_query("SELECT `loggedip` FROM `ipcheck` WHERE `loggedip`='$iptocheck'")))) {
	

$loginattempts_total=1;
$loginattempts_total=intval($loginattempts_total);
mysql_query("INSERT INTO `ipcheck` (`loggedip`, `failedattempts`) VALUES ('$iptocheck', '$loginattempts_total')");	
} else {
	

$loginattempts_total= $loginattempts_total + 1;
mysql_query("UPDATE `ipcheck` SET `failedattempts` = '$loginattempts_total' WHERE `loggedip` = '$iptocheck'");
}
}


if ($registered==FALSE) {
if (!($fetch = mysql_fetch_array( mysql_query("SELECT `loggedip` FROM `ipcheck` WHERE `loggedip`='$iptocheck'")))) {


$loginattempts_total=1;
$loginattempts_total=intval($loginattempts_total);
mysql_query("INSERT INTO `ipcheck` (`loggedip`, `failedattempts`) VALUES ('$iptocheck', '$loginattempts_total')");	
} else {

$loginattempts_total= $loginattempts_total + 1;
mysql_query("UPDATE `ipcheck` SET `failedattempts` = '$loginattempts_total' WHERE `loggedip` = '$iptocheck'");
}
}
} else {

$loginattempts_username=0;
$loginattempts_total=0;
$loginattempts_username=intval($loginattempts_username);
$loginattempts_total=intval($loginattempts_total);
mysql_query("UPDATE `authentication` SET `loginattempt` = '$loginattempts_username' WHERE `username` = '$user'");
mysql_query("UPDATE `ipcheck` SET `failedattempts` = '$loginattempts_total' WHERE `loggedip` = '$iptocheck'");

function genRandomString() {

    $length = 50;
    $characters = "0123456789abcdef";      
    for ($p = 0; $p < $length ; $p++) {
        $string .= $characters[mt_rand(0, strlen($characters))];
    }
    
    return $string;
}
$random=genRandomString();
$salt_ip= substr($random, 0, $length_salt);

$useragent=$_SERVER["HTTP_USER_AGENT"];
$hash_user= sha1($salt_ip.$iptocheck.$useragent);


$signature= $salt_ip.$hash_user;


session_regenerate_id();


$_SESSION['signature'] = $signature;
$_SESSION['logged_in'] = TRUE;
$_SESSION['LAST_ACTIVITY'] = time(); 
}
} 

if (!$_SESSION['logged_in']): 

?>
iemand een idee wat ik heb fout gedaan.
 
Volgens mij krijg je "false" terug op een mysql_query als de query mislukt. dat zou verklaren waarom je een "boolean" error krijgt.
 
je kunt even een print_r of iets dergelijks over je query gooien. bestaat $iptocheck wel en heeft die een waarde? en wordt die correct vervangen in je query? geen typefout in je tabelnaam?
 
ik ga da eens nakijken maar zal voor morgen avond zijn. sebiet gaan werken :(
 
Dat is een van de redenen om queries over meerdere variabelen te verspreiden, dan kun je die apart debuggen :)

PHP:
$query = "SELECT `loggedip` FROM `ipcheck` WHERE `loggedip`='$iptocheck'";
$result = mysql_query($query);

if($result) {
  while($row = mysql_fetch_assoc($result) {
    print_r($row);
  }
} else {
  echo 'The query "'. $query .'" resulted in an error: '. mysql_error();
}
 
Op de plek waar het nu verkeerd gaat lijkt mij :)
 
moet ik dat er gewoon bij zetten of op die 1 lijn waar hij op reklameert en die lijn wegdoen?
 
Ja, je kunt de huidige regel ook gewoon commentaar maken ipv deleten, houd je code de juiste structuur later.
 
oei, nu krijg ik Parse error: syntax error, unexpected '{' op de lijn waar de while staat :(
 
Dit heb ik dus gedaan, mss verkeerd?
PHP:
// if ($fetch = mysql_fetch_array( mysql_query("SELECT `loggedip` FROM `ipcheck` WHERE `loggedip`='$iptocheck'"))) {

// tijdelijke debug
$query = "SELECT `loggedip` FROM `ipcheck` WHERE `loggedip`='$iptocheck'";
$result = mysql_query($query);
 
if($result) {
  while($row = mysql_fetch_assoc($result) {
    print_r($row);
  }
} else {
  echo 'The query "'. $query .'" resulted in an error: '. mysql_error();
}

// end tijdelijke debug

//$resultx = mysql_query("SELECT `failedattempts` FROM `ipcheck` WHERE `loggedip`='$iptocheck'");

//$rowx = mysql_fetch_array($resultx);
//$loginattempts_total = $rowx['failedattempts'];

//If ($loginattempts_total>$maxfailedattempt) {
	

//header(sprintf("Location: %s", $forbidden_url));	
//exit;
//}
//}
 
Hey, bedankt, zo een domme fout van mij en tot twee keer toe slecht gekeken.

de fout zat hem in het feit dat ik als veldnaam logddip had gezet en in de code staat loggedip, heb dit gewijzigt en nu werkt het.

Nog is bedankt :thumb:
 
ik ga dit stukje code bewaren ergens, wat zijn de zaken die ik dan telkens moet aan passen?
 
Alleen de query eigenlijk. Je kunt deze code ook in productie gebruiken. Ik zou dan alleen de ELSE vervangen met een DIE("database error"). Niets mis mee om een paar extra regels te gebruiken om het leesbaar te houden :)
 
Ok, kga kijken om dat te gebruiken voor elke querie of bestaat er ergens iets dat ik bv volldeig mijn website door op 1 plaats bv een 0 te wijzigen naar 1 wanneer het in debug mode moet staan? een tutorial of zo? maar kzal ondertussen als eens zoeken op google.
nog is bedankt
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan