Hey,

In mijn vorige topic probeerde ik te checken of een record al bestaat in een tabel.
Dit was me na veel uren proberen niet gelukt. Ik heb het een beetje aangepast en krijg nu een nieuwe error.

<?php
$username="root";
$password="********";
$database="Wizzardz";

mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");


$result = mysql_query("INSERT INTO account (Nickname) VALUES ('pipooo')");

$num_rows = mysql_num_rows($result);
echo "$num_rows";

mysql_close();
?>

Hierna komt natuurlijk nog het stukje waarin staat dat dat het aantal rijen niet groter mag zijn dan 0, want in dat geval bestaat er al een account met die naam. Nu krijg ik deze error:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\WizzardzAccountCreateCode.php on line 19


Hij zegt dus dat het een boolean is terwijl het een int moet zijn. Wat doe ik fout?

Heel erg bedankt alvast! ^^
Bram unknown op 25/01/2011 11:53:28

Ozzy sorry jouw comment probeerde ik als tweede. xD
Daarmee heb ik dit gemaakt: en volgens mij werkt het!


Uiteraard werkt het ;-)
Haha heel erg bedankt!

Jij ook kris! Jij deed eigenlijk veel meer moeite.

Het enige probleem is volgens mij dat num_rows ipv affected_rows alle tabellen geeft en niet alleen met die value.
Hoewel het kan zijn dat het wel lukt als je SELECT gebruikt.

Igg heel erg bedankt allemaal!
Je kunt je niet voorstellen hoe blij ik ben na al die uren proberen x'D
Het punt is: num_rows kan uitgelezen worden uit de resource die wordt teruggegeven door mysql_query.

Je kan 20 query's uitvoeren, die je in 20 verschillende resource variabelen zet.
Achteraf kan je van die resource met num_rows zien hoeveel rijen er zijn. Je hebt daar geen verbinding met de database meer voor nodig.

Met INSERT lukt dat niet.
mysql_affected_rows Zal je enkel vertellen wat de laatste actie was van mysql. Dit moet dan ook gebeuren onmiddellijk na het uitvoeren van de query.
Dit vergt ook een verbinding met de database.
Oh oke ik begrijp het.
Het zou wel fijn zijn als ik deze manier kan gebruiken. Ook vanwege wat andere redenen.

Ik weet dat ik een zeurpiet ben maar zou je me misschien net iets verder kunnen helpen daar mee want ik krijg het niet voor elkaar.

[size=xsmall]Toevoeging op 25/01/2011 14:24:43:[/size]

Dit is zo ver als ik kom, maar ik weet niet hoe ik nu nog het aantal rijen met die ene nickname kan zien.

<?php
$username="root";
$password="";
$database="Wizzardz";

$link = mysql_connect(localhost,$username,$password);
@mysql_select_db($database) or die( "Unable to select database");

$sql = mysql_query("SELECT Nickname FROM account") or die("Cant find nickname table");
$res = mysql_num_rows($sql);

echo "$res";
?>
Ik heb het in je vorige topic gezegd, ik heb het tegen je in de pm gezegd, wat is er nou zo ontzettend moeilijk aan de hendleiding lezen en wat ik zei?
PM hier en daar

Re: Dubbele gegevens in mysql

Gelezen op: 25.01.2011 00:11:43
Ontvanger: Bram unknown

Dat is nogal wiedes hé dat dat niet werkt.
Ik zei dat je moest kijken wat mysql_query teruggaf. En testen wat mysql_error / mysql_errno teruggaf.

> Hey,
>
> Nog even over die dubbele gegevens in mysql.
> Ik wilde kijken of een username al bestond in de database.
>
> De manier die jij vertelde was volgens mij met try en catch.
>
> Hoe werkt dit precies? want dit:
>
>
Quote:
try {
> $sql = "INSERT INTO account (Nickname) VALUES ('lalala')";
> }
> catch(Exception $e) {
> echo $e->getMessage();
> }

>
> Werkt blijkbaar niet.
>
> Alvast bedankt!

Waarom ga je dan nog steeds die onzin doen?

<?php
// Configuratie
$db_user = 'root';
$db_password = '';
$db_server = 'localhost';
$db_database = 'Wizzardz'; // Lekker dubbelzinnige naam

$link = mysq_connect($db_server, $db_user, $db_password); // Dit is een resource
if($link) // on the fly type cating van php
{
	// We hebben verbinding
	if(mysql_select_db($db_database, $link))
	{
		// We kunnen een database selecteren
		$query = "INSERT INTO account (Nickname) VALUES ('pipooo')"; // Values met mysql_real_escape_string erin stoppen als ze van de gebruiker vandaan komen en met sprintf
		if(mysql_query($query, $link)) // Het is een insert dus of true of false
		{
			echo 'Insert is gelukt!'; // Afhandelen via template parser
		}
		else
		{
			echo 'Insert is mislukt!';
			var_dump(mysql_error($link), mysql_errno($link)); // Dit is alleen voor testen. Kijk wat je hieruit krijgt. Daarmee kan je checks doen.
// TOON NOOIT (my)sql FOUTEN OF PHP FOUTEN AAN DE GEBRUIKER!
		}
	}
	else
	{
		echo 'Db selecteren was niet mogelijk. Nu doen we nette foutafhandeling, dus geen die';
	}
	mysql_close($link); // Altijd net
}
else
{
	echo 'Help, we kunnen niks. Maar weer geen die';
}
?>

Dit tik ik zo uit mijn hoofd, terwijl ik nooit mysql functies gebruik. Alle informatie kan je zo vinden op de php pagina's. Dat zijn dus die linkies in dat script hierboven. Als je daar op klikt dan kom je op php.net uit. Dat is de handleiding. Het mooie aan de handleiding is dat je ook voorbeelden hebt. Zie ze. Vergelijk dit script met dat.
Het enige wat jij dus nu moet doen is kijken wat voor mysql error je krijgt.
@Karl karl

Gast sorry voor mijn gezeik van eerder ik kon het gewoon niet voor elkaar krijgen en wilde niet meer verder janken.
Iig, ik kan je echt niet genoeg bedanken want hij werkt nu perfect.

Echt fck erg bedankt! ^^
Om te checken of een record al bestaat, werkt het volgens mij het beste als je je veld de UNIQUE eigenschap meegeeft. Als je dan probeert te inserten in je tabel, en hij werkt niet omdat een UNIQUE-error optreedt (omdat er al eenzelfde record bestaat), weet je genoeg. Maar gelukkig werkt ie al, zie ik :).
Stephan G op 07/02/2011 00:58:11

Om te checken of een record al bestaat, werkt het volgens mij het beste als je je veld de UNIQUE eigenschap meegeeft. Als je dan probeert te inserten in je tabel, en hij werkt niet omdat een UNIQUE-error optreedt (omdat er al eenzelfde record bestaat), weet je genoeg. Maar gelukkig werkt ie al, zie ik :).


Het script hierboven, van mij, gaat er ook inderdaad vanuit dat in de database het veld UNIQUE of primair is.

Reageren