Hallo,

Ik heb onderstaand script omgezet van mysql naar sqlsrv, hier gaat het fout, het script in mysql werkte!

Het script is voor het aanmaken van een gebruiker en controleert of er een bestaande gebruiker is.

De volgende foutmelding krijg ik: sqlsrv_fetch_array() expects parameter 2 to be long, string given in .... on line 13.

line 13 is onstaand gedeelte:

$userchecker = sqlsrv_fetch_array($stmt, sqlsrv_fetch_assoc);


hieronder het sql gedeelte van het script:


<?php
error_reporting(E_ALL & ~E_NOTICE);
 

	session_start();
	include'../connectdb.php';
	if(isset($_GET['add'])) {
		echo $_POST['gebruikersnaam'];	
	if (isset($_POST['voegtoe'])) {
		if($_POST['gebruikersnaam'] && $_POST['wachtwoord'] && $_POST['hwachtwoord']){
			$usernamecheck = "SELECT * FROM Customer WHERE EMail='$_POST[gebruikersnaam]'";
			$stmt = sqlsrv_query( $dbhandle, $usernamecheck );
			$userchecker = sqlsrv_fetch_array($stmt, sqlsrv_fetch_assoc);
			if ($_POST['gebruikersnaam'] != $userchecker['gebruikersnaam']){
				if ($_POST['wachtwoord']==$_POST['hwachtwoord']){
					$passwordHash = sha1 ($_POST['wachtwoord']);
		

			
					$query = "INSERT INTO Customer (CustomerID, CustomerNo, CustomerName, CurrencyID, EMail, Password, Rechten)
								VALUES((SELECT NextCustomerID FROM CustCtl), (SELECT NextCustomerNo FROM CustCtl), '$_POST[naam]',
								1, '$_POST[gebruikersnaam]', '$passwordHash', 2)";
					if (!($result = @ sqlsrv_query($query, $dbhandle))) {
						die( print_r( sqlsrv_errors(), true) );
						}
				}
					else {
						echo "De opgegeven wachtwoorden komen niet overeen";
					}
			}
				else{
					echo "Het opgegeven gebruikersnaam bestaat al!";
				
				}
		}
		
		else {
			echo "Vul alle velden in!";
		}
?>


Alvast bedankt voor de oplossing :)
Wijzig sqlsrv_fetch_assoc eens naar SQLSRV_FETCH_ASSOC op regel 13
Bedankt, die foutmelding is nu weg, nu houd ik deze nog alleen over:


[email protected] ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [code] => -14 [2] => An invalid parameter was passed to sqlsrv_query. [message] => An invalid parameter was passed to sqlsrv_query. ) ) 
Wat krijg je met
<?php
echo $query;
?>

tussen regel 22 en 23?

Je zou daar zeker prepared statements moeten gebruiken. zo is het echt onveilig om direct $_POST variabelen in je database te knallen.
dit:

[email protected] INTO Customer (CustomerID, CustomerNo, CustomerName, CurrencyID, EMail, Password, Rechten) VALUES((SELECT NextCustomerID FROM CustCtl), (SELECT NextCustomerNo FROM CustCtl), 'd', 1, '[email protected]', 'a94a8fe5ccb19ba61c4c0873d391e987982fbbd3', 2)Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -14 [code] => -14 [2] => An invalid parameter was passed to sqlsrv_query. [message] => An invalid parameter was passed to sqlsrv_query. ) )
Op regel 23 heb je de parameters omgedraait. Je moet eerst de connectie en dan de query opgeven.

[size=xsmall]Toevoeging op 02/01/2015 16:12:48:[/size]

Waarom staat er een @ voor ?
die @ is een echo van het email adres, en die wordt gelijk voor de sql instructie getoond.

[size=xsmall]Toevoeging op 02/01/2015 16:18:21:[/size]

Maar het werkt, nadat ik de parameters omgedraait had. Dat daar de fouten al in kunnen zitten... Uren opgezocht. Maar het werkt. Hartstikke bedankt!!!

[size=xsmall]Toevoeging op 02/01/2015 16:21:44:[/size]

Ben er net achtergekomen, dat ie nog steeds niet goed werkt. Hij insert wel. Alleen als ik nog een keer hetzelfde mail adres invoer, krijg ik geen error maar wordt de insert gewoon uitgevoerd.

Dit is dus nog niet goed, waar kan dit aan liggen?

Nogmaals alvast bedankt!
:p kijken en nog eens kijken he

die @ is om foutmeldingen te onderdrukken. Lijkt me niet handig..

<?php
$result = @ sqlsrv_query($query, $dbhandle))
?>

Haal die @ maar weg
Ow die @ :p.. Weggehaald, maar ik krijg geen foutmelding. die query mag niet uitgevoerd worden als het email adres al bestaat

[size=xsmall]Toevoeging op 02/01/2015 16:28:02:[/size]

laat maar, probleem al gevonden. Ik had mijn nieuwe sql code vervangen, en vergeten de database aan te passen

if ($_POST['gebruikersnaam'] != $userchecker['gebruikersnaam']){

moest zijn if ($_POST['gebruikersnaam'] != $userchecker['EMail']){

[size=xsmall]Toevoeging op 02/01/2015 16:28:24:[/size]

Maar alsnog hartstikke bedankt!

Reageren