[RESOLU] Problème avec odbc_num_rows

Eléphanteau du PHP | 16 Messages

09 août 2015, 00:32

Bonsoir, tous d'abord je tiens à préciser que j'ai commencer le PHP il y a peu de temps!
J'ai donc un problème avec l'un de mes code.
Sa fonction étant de vérifier dans un premier temps l’existence d'une valeur ou non dans une table.
Puis si la valeur en question n'est pas présente, alors on l'ajoute; dans le cas contraire une erreur arrive disant "X valeur déjà présente".
Le problème est que la fonction de vérification m'affiche ceci :
odbc_num_rows() expects parameter 1 to be resource, boolean given in ..
Mon code est le suivant :

Code : Tout sélectionner

<?php // Connexion à un moteur SQL Serveur require_once('db_config.php'); // On définis les variables $joueur = isset($_POST['Joueur']) ? trim($_POST['Joueur']) : ''; $errors = array(); $success = false; if(isset($_POST) && !empty($_POST)){ require_once('db.php'); // On vérifie l'éxistance du joueur ou non $check = "SELECT Joueur FROM PS_DATABASE.dbo.Table where Joueur LIKE '.$joueur.'"; $ck = odbc_prepare($GLOBALS['dbConn'],$check); $retour = odbc_execute($ck); if(!odbc_execute($ck)) { $errors[] = "Ne peut vérifier votre inscription."; } if (odbc_num_rows($retour)==0) { echo ("Pas la"); } else { $sql = "INSERT INTO PS_DATABASE.dbo.Table (Joueur,Status) VALUES ('".$joueur."','1')"; $stmt = odbc_prepare($GLOBALS['dbConn'],$sql); if(!odbc_execute($stmt)) { $errors[] = "Erreur d'execution de la requête dans la base de données."; } else { $success = " {$joueur} est activé "; } } } // Quelques fichiers importants pour le visuel if($success === false){ require_once('register.view.php'); }else{ require_once('success.view.php'); } ?>
Si toutes choses doivent êtres changer, n'hésiter pas a me le dire!!
De plus que je ne suis absolument pas sur que cela marche ainsi ^^
J'avais essayer une autre forme mais celle-ci ne vérifiait absolument pas la présence de la valeur ou non, de se faites je pouvais ajouter la même valeur autant de fois que je le voulais...
Le code :

Code : Tout sélectionner

<?php // Connexion à un moteur SQL Serveur require_once('db_config.php'); // On définis les variables $joueur = isset($_POST['Joueur']) ? trim($_POST['Joueur']) : ''; $errors1 = array(); $errors2 = array(); $success = false; if(isset($_POST) && !empty($_POST)){ require_once('db.php'); // On vérifie l'éxistance du joueur ou non $check = "SELECT Joueur FROM PS_DATABASE.dbo.table where Joueur LIKE '.$joueur.'"; $ck = odbc_prepare($GLOBALS['dbConn'],$check); if(!odbc_execute($ck)) { $errors1[] = "Ne peut vérifier votre inscription."; } if (empty($joueur)){ $errors1[] = 'Entrez votre nom de membre'; } // Requête sql if(count($errors1) == 0){ $sql = "INSERT INTO PS_DATABASE.dbo.table (Joueur,Status) VALUES ('".$joueur."','1')"; $stmt = odbc_prepare($GLOBALS['dbConn'],$sql); if(!odbc_execute($stmt)) { $errors2[] = "Erreur d'execution de la requête dans la base de données."; } else { $success = " {$joueur} est activé "; } } } // Quelques fichiers importants pour le visuel if($success === false){ require_once('register.view.php'); }else{ require_once('success.view.php'); } ?>
Merci! :)
Apprenti PHP/VB.NET

nestecha
Invité n'ayant pas de compte PHPfrance

09 août 2015, 01:24

Cette ligne :
$check = "SELECT Joueur FROM PS_DATABASE.dbo.Table where Joueur LIKE '.$joueur.'";
Tu concatènes alors que c'est inutile avec des doubles quotes.
$check = "SELECT Joueur FROM PS_DATABASE.dbo.Table where Joueur LIKE '$joueur'";
fonctionnera.

Eléphanteau du PHP | 16 Messages

09 août 2015, 10:01

Bonjour, cela ne change absolument rien de mon erreur :
odbc_num_rows() expects parameter 1 to be resource, boolean given in ..
Merci,
Apprenti PHP/VB.NET

ynx
Mammouth du PHP | 586 Messages

10 août 2015, 10:23

Salut,

Tu as une erreur sql lors de l'exécution de ta requête, donc la fonction odbc_execute() retourne le booléen FALSE, d'où le message d'erreur sur tu obtiens.

Essaye de modifier ton code comme ceci pour voir l'erreur sql :
// On vérifie l’existence du joueur ou non
$check = "SELECT Joueur FROM PS_DATABASE.dbo.Table where Joueur LIKE '$joueur'";
$ck = odbc_prepare($GLOBALS['dbConn'],$check);
$retour = odbc_execute($ck);
if(!$retour)
{
    echo 'Erreur sql : ' . odbc_errormsg($GLOBALS['dbConn']);
}
Bonne journée

Eléphanteau du PHP | 16 Messages

10 août 2015, 12:28

Bonjour,
En ajoutant cela, mon script "remarche". Plus d'erreurs, MAIS mon but étant de vérifier si une valeur entrée est déjà présente ou non dans ma bdd. Or lors du test (bdd vierge) j'ajoute une valeur, puis une deuxièmes MÊME valeur et il l'ajoute quand même. Donc 2 rows avec 2 même valeur;

Le code est donc le suivant :
<?php
	// Connexion à un moteur SQL Serveur
	require_once('db_config.php');

	// On définis les variables
	$joueur = isset($_POST['Joueur']) ? trim($_POST['Joueur']) : '';
	$errors = array();
	$success = false;
	if(isset($_POST) && !empty($_POST)){
	require_once('db.php');
	
	// On vérifie l’existence du joueur ou non
$check = "SELECT Joueur FROM PS_DATABASE.dbo.Table where Joueur LIKE '$joueur'";
$ck = odbc_prepare($GLOBALS['dbConn'],$check);
$retour = odbc_execute($ck);
if(!$retour)
{
    echo 'Erreur sql : ' . odbc_errormsg($GLOBALS['dbConn']);
}
		elseif(count($errors)==0)
		{
		$sql = "INSERT INTO PS_DATABASE.dbo.Table
				(Joueur,Status) VALUES ('".$joueur."','1')";
				$stmt = odbc_prepare($GLOBALS['dbConn'],$sql);
				if(!odbc_execute($stmt))
				{
					$errors[] = "Erreur d'execution de la requête dans la base de données.";
				} 
				else 
				{
			$success = " {$joueur} est activé ";
			}
		}
	}
	// Quelques fichiers importants pour le visuel
	if($success === false){
	require_once('register.view.php');
	}else{
	require_once('success.view.php');
	}
?>
Merci, :)
Apprenti PHP/VB.NET

ynx
Mammouth du PHP | 586 Messages

10 août 2015, 14:57

L'utilisation de odbc_num_rows() a disparu ?

Pour vérifier l'existence du joueur, tu dois compter le nombre de résultat de ta première requête (avec odbc_num_rows) afin de savoir si le joueur est présent ou non en bdd.

Eléphanteau du PHP | 16 Messages

10 août 2015, 16:07

Sur le coup j'ai toujours
odbc_num_rows() expects parameter 1 to be resource, boolean given in..
Voici le code :

Code : Tout sélectionner

<?php // Connexion à un moteur SQL Serveur require_once('db_config.php'); // On définis les variables $joueur = isset($_POST['Joueur']) ? trim($_POST['Joueur']) : ''; $errors = array(); $success = false; if(isset($_POST) && !empty($_POST)){ require_once('db.php'); // On vérifie l’existence du joueur ou non $check = "SELECT Joueur FROM PS_DATABASE.dbo.Table where Joueur LIKE '$joueur'"; $ck = odbc_prepare($GLOBALS['dbConn'],$check); $retour = odbc_execute($ck); if(!$retour) { echo 'Erreur sql : ' . odbc_errormsg($GLOBALS['dbConn']); } elseif (odbc_num_rows($retour)==0) { $errors[] = "Pas la"; } elseif (count($errors)==0) { $sql = "INSERT INTO PS_DATABASE.dbo.Table (Joueur,Status) VALUES ('".$joueur."','1')"; $stmt = odbc_prepare($GLOBALS['dbConn'],$sql); if(!odbc_execute($stmt)) { $errors[] = "Erreur d'execution de la requête dans la base de données."; } else { $success = " {$joueur} est activé "; } } } // Quelques fichiers importants pour le visuel if($success === false){ require_once('register.view.php'); }else{ require_once('success.view.php'); } ?>
Apprenti PHP/VB.NET

ynx
Mammouth du PHP | 586 Messages

10 août 2015, 16:18

La fonction odbc_num_rows() attend en premier paramètre l'identifiant de résultat ODBC, c'est à dire le retour de la fonction odbc_prepare().
Soit :
odbc_num_rows($ck)

Eléphanteau du PHP | 16 Messages

10 août 2015, 20:59

Yes niquel sa marche merci beaucoup ynx ^^ :)
Apprenti PHP/VB.NET