Unieke ID maken in php

Status
Niet open voor verdere reacties.
Ik heb je berichten samengevoegd, je kunt gewoon je bericht aanpassen wanneer er geen reacties tussen zitten ;)

Het probleem waar je mee zit is de "function scope".

Je probeert een variabele ($link) binnen een functie te benaderen welke buiten de functie gedeclareerd is.
Verder behandel je $link op regel 12 als object terwijl het dat niet is.

Je zult dus of $link als parameter mee moeten geven, of de declaratie binnen de functie moeten doen.
Mijn voorkeur gaat uit naar het eerste:
PHP:
<?php
function RequestId($countryName, $sqlsrv)
{
    // Altijd hoofdletters
    $countryName = strtoupper($countryName);
    // Query
    $sql="SELECT COUNT(RequestID) AS countId FROM RequestDowntime WHERE RequestID=?";
    //
    if($stmt = sqlsrv_query($sqlsrv, $sql, array($countryName)) {
        sqlsrv_fetch($stmt);
        // Pak het eerst veld (countId)
        $numCountryCode = sqlsrv_get_field($stmt, 0) + 1;
        // Geeft eerste 3 letters van het land plus het getal terug
        return substr($countryName, 0, 3) + $numCountryCode;
    } else {
        // Als er een fout uit de query komt geven we false terug
        return false;
    }
}

 
// Aanroep:
$link = sqlsrv_connect( $serverName, $connectionInfo);
if( $link === false )   {
    echo "Unable to connect.";
    die( print_r( sqlsrv_errors(), true));
}

$uniqueId = RequestId($_GET['country_name'], $link);
var_dump($uniqueId);
 
Echtwaar heel erg bedankt! ik snap het nu inderdaad wat meer door de uitleg erbij!

Alleen ik krijg nu een Bool(false) terug
PHP:
	$link = sqlsrv_connect( $serverName, $connectionInfo);
	if( $link === false )
	{
		 echo "Unable to connect.</br>";
		 die( print_r( sqlsrv_errors(), true));
	}
	
function RequestId($country, $sqlsrv)
{
    // Altijd hoofdletters
    $country = strtoupper($country);
    // Query
    $sql="SELECT COUNT(RequestID) AS countId FROM RequestDowntime WHERE RequestID=?";
    //
    if($stmt = sqlsrv_query($sqlsrv, $sql, array($country))) 
	{
        sqlsrv_fetch($stmt);
        // Pak het eerst veld (countId)
        $numCountryCode = sqlsrv_get_field($stmt, 0) + 1;
        // Geeft eerste 3 letters van het land plus het getal terug
        return substr($country, 0, 3) + $numCountryCode;
    } else 
	{
        // Als er een fout uit de query komt geven we false terug
        return false;
    }
}
 
// Aanroep:
$uniqueId = $_GET['country_name'];

in index.php
PHP:
<input readonly type="text" id="request_id" name="request_id" 
						value="<?php $uniqueId = RequestId($_GET['country_name'], $link);var_dump($uniqueId);?>">

Het zou echt geweldig zijn als je me hier ook mee kan helpen!
 
Ik houd mijn regels aan qua code:

Dat je false terug krijgt gebeurd op regel 17, blijkbaar gaat regel 9 dus niet goed.
Je kunt in de else van regel 15 debug-informatie plaatsen zodat je eventueel de fout vanuit sqlsrv kunt achterhalen.
 
Dit levert dus niks op?

PHP:
<?php
function RequestId($countryName, $sqlsrv)
{
    // Altijd hoofdletters
    $countryName = strtoupper($countryName);
    // Query
    $sql="SELECT COUNT(RequestID) AS countId FROM RequestDowntime WHERE RequestID=?";
    //
    if($stmt = sqlsrv_query($sqlsrv, $sql, array($countryName)) {
        sqlsrv_fetch($stmt);
        // Pak het eerst veld (countId)
        $numCountryCode = sqlsrv_get_field($stmt, 0) + 1;
        // Geeft eerste 3 letters van het land plus het getal terug
        return substr($countryName, 0, 3) + $numCountryCode;
    } else {
        // Als er een fout uit de query komt geven we false terug
        var_dump(sqlsrv_errors());
        return false;
    }
}
 
 
// Aanroep:
$link = sqlsrv_connect( $serverName, $connectionInfo);
if( $link === false )   {
    echo "Unable to connect.";
    die( print_r( sqlsrv_errors(), true));
}
 
$uniqueId = RequestId($_GET['country_name'], $link);
var_dump($uniqueId);
 
Laatst bewerkt:
Krijg je alleen int(1) of ook bool(false)?

Het resultaat komt niet overeen met mijn verwachtingen.
Als je het script met script.php?country_name=Australia zou aanroepen moet het resultaat "string(4) AUS1" zijn of "bool(false)".

Hoe ziet je code er nu uit (zonder databasegegevens) en hoe roep je het aan?
 
Laatst bewerkt:
Ik krijg int(0) terug want had de oude naam van de database staan in query wat DowntimeRequest moest zijn.

Hier roep ik hem mee aan.<?php $uniqueId = RequestId($_GET['country_name'], $link);var_dump($uniqueId);?>
 
Ja oke, maar hoe roep je het script aan? Want die $_GET-variabele moet wel wat bevatten :)
 
Ja klopt kijk:
PHP:
<?php
							$sql = "SELECT distinct CountryName FROM Dim.Host WHERE CountryName is not null ORDER BY CountryName ";
							$stmt = sqlsrv_query( $link, $sql);
							if( $stmt === false )
							{
								 die( print_r( sqlsrv_errors(), true));
							}
						?>
						<b>Country:</b>			
							<select name="country_name" id="country_name" onchange="document.selectForm.submit()">
								<?php 
									$country = $_GET['country_name'];
									echo '<option name="country" value="">Select a Country</option>'; 
									while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC)) 
									{
										
										echo '<option name="country" value="'.$row["CountryName"].'"';
										if ( $row["CountryName"] == $country )
										{
											echo ' selected>';
										}										
										else
										{
											echo '>';
										}
										echo $row["CountryName"].'</option>';
									}
								?>								
							</select>
 
Sorry dat ik dit weekend niet nog heb gereageerd maar, zou je de oplossing hiervan weten? Want je vroeg of ik de inhoud van de GET wou laten zien, die heb ik in me vorige post gezet.
 
Wat krijg je terug als je dit laat uitvoeren:

PHP:
$uniqueId = RequestId("Internet", $link);
var_dump($uniqueId);?>

Het verwachtte resultaat is "INT1".
 
Haha, ik heb een verkeerd voorbeeld gebruikt merk ik :D
Je krijgt nu een integer "1" terug, in plaats van een string "INT1".

Ander voorbeeld:
PHP:
$uniqueId = RequestId("Computer", $link);
var_dump($uniqueId);?>

Resultaat moet zijn
Code:
string 'COM1' (length=4)
 
Dan wordt het debuggen :)
PHP:
function RequestId($countryName, $sqlsrv)
{
    var_dump($countryName);
    // Altijd hoofdletters
    $countryName = strtoupper($countryName);
    // Query
    var_dump($countryName);
    $sql="SELECT COUNT(RequestID) AS countId FROM RequestDowntime WHERE RequestID=?";
    //
    if($stmt = sqlsrv_query($sqlsrv, $sql, array($countryName)) {
        var_dump('$stmt isset');
        sqlsrv_fetch($stmt);
        // Pak het eerst veld (countId)
        $numCountryCode = sqlsrv_get_field($stmt, 0) + 1;
        var_dump('$numCountryCode = '. $numCountryCode);
        // Geeft eerste 3 letters van het land plus het getal terug
        return substr($countryName, 0, 3) + $numCountryCode;
    } else {
        // Als er een fout uit de query komt geven we false terug
        var_dump(sqlsrv_errors());
        return false;
    }
}
Wat voor output krijg je nu met deze aanroep:
PHP:
$uniqueId = RequestId("Computer", $link);
var_dump($uniqueId);
 
Dankjewel heb nu gedaan wat jij gedaan heb en dit komt eruit:

0string(8) "Computer" string(8) "COMPUTER" string(11) "$stmt isset" string(19) "$numCountryCode = 1" int(1)
 
Probeer dit eens:
PHP:
function RequestId($countryName, $sqlsrv)
{
    // Altijd hoofdletters
    $countryName = strtoupper($countryName);
    // Query
    $sql="SELECT COUNT(RequestID) AS countId FROM RequestDowntime WHERE RequestID=?";
    //
    if($stmt = sqlsrv_query($sqlsrv, $sql, array($countryName)) {
        sqlsrv_fetch($stmt);
        // Pak het eerst veld (countId)
        $numCountryCode = sqlsrv_get_field($stmt, 0) + 1;
        // Geeft eerste 3 letters van het land plus het getal terug
        return substr($countryName, 0, 3) . $numCountryCode;
    } else {
        // Als er een fout uit de query komt geven we false terug
        var_dump(sqlsrv_errors());
        return false;
    }
}
Waarschijnlijk zat ik nog teveel in Javascript-modus toen ik dit schreef. Regel 13 heb ik aangepast (een punt in plaats van een plus-teken)
 
Ik heb dit toegepast en nu krijg ik de eerste letters van een land en hij zet standaard 1 neer.
 
Dat zou alleen voor moeten komen wanneer er voor dat land nog geen zaken in de database staan.

Anders zit er een fout in de query of gaat deze regel verkeerd:
PHP:
$numCountryCode = sqlsrv_get_field($stmt, 0) + 1;

Dat zul je dus even moeten debuggen ;)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan