Tjek om data er der i forvejen

Tags:    mysqli php

Nogle der kan hjælpe, hvordan jeg får den til at tjekke om brugernavn og email er optaget? Jeg har selv arbejdet lidt på det ud fra mysql, men det virker desværre bare ikke når jeg har lavet det om til mysqli.
En der kan forklare hvorfor og hjælpe mig videre?

Fold kodeboks ind/udPHP kode 




7 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Hejsa,

Først og fremmest vil jeg personligt anbefale OOP versionen af MySQLi. Det er dog helt personligt en favorit.

Anyway - dit problemet ligger i, at mysqli_num_rows kun kan kaldes, såfremt der ligger information for hele dit statement i "bufferen". Af samme årsag virker Jespers kode, da han beder MySQLi om, at gemme resultatet af dit statement i denne buffer ($stmt -> store_result()). Du ville, såfremt du tjekkede op på dokumentationen for num_rows, også selv have fundet samme løsning, her står:

Returns the number of rows in the result set. The use of mysqli_stmt_num_rows() depends on whether or not you used mysqli_stmt_store_result() to buffer the entire result set in the statement handle.

If you use mysqli_stmt_store_result(), mysqli_stmt_num_rows() may be called immediately.


Det betyder altså, at den information som dit statement returnerer, gemmes i hukommelsen. Alternativt kunne du vælge at bruge et loop. I dette loop tæller du plus 1 til en given variabel. Herfra kan du så bruge den variabel som reference punkt.

----

Jeg anbefaler dig at gøre brug af MySQLi metoden "prepare". Den er sikkere fremfor direkte brug af variabler direkte i dit kald.
Se nedenfor (objekt-orienteret!)

Fold kodeboks ind/udPHP kode 



vh,



Indlæg senest redigeret d. 11.12.2013 01:04 af Bruger #16122
Nogle der kan hjælpe, hvordan jeg får den til at tjekke om brugernavn og email er optaget? Jeg har selv arbejdet lidt på det ud fra mysql, men det virker desværre bare ikke når jeg har lavet det om til mysqli.
En der kan forklare hvorfor og hjælpe mig videre?

Fold kodeboks ind/udPHP kode 


Prøve at kig her :

Fold kodeboks ind/udPHP kode 


jeg bruger den selv tit og den virker fint hvis du kan finde ud af sæt den op selv.



Jeg kan desværre ikke rigtig få det til at virke.
Jeg modtager hele tiden "Warning: mysqli_stmt::bind_param(): Number of variables doesn't match number of parameters in prepared statement" - og har nu prøvet at google det, men synes ikke helt jeg får svar på hvad den betyder, samt hvad fejlen kan være.?

Jeg har sporet mig ind på at det må være $data -> bind_param('s', $username); der driller. Skal det forresten ikke være POST i stedet for bare $username?

Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 15.12.2013 09:39 af Bruger #17534

Skal det forresten ikke være POST i stedet for bare $username?

du skal selvføgelig tildele din variabel $username en værdi, før du tester

men ud fra den code du viser har du tildelt en værdi allerede via post/get/request, eller sat en fast værdi

så før
if ($data = $con -> prepare("SELECT `use
skal du have noget ligne dette $username = $_POST['brugernavn'];



Først og fremmest vil jeg personligt anbefale OOP versionen af MySQLi. Det er dog helt personligt en favorit.

helt enig, OOP vertionen er også marginalt hurtigere da du ikke skal kalde wrapper functionerne mysqli_xxxxx
men for hurtigt at komme igang med mysqli er der intet ivejen for at starte med procedural style som man er vandt til fra det gamle mysql, procedural style blev netop lavet som en let overgang til mysqli
man kan godt blande OOP style og procedural style, men det er pænest at holde stilen rent

denne linje
if ($data = $con -> prepare("SELECT `username` FROM `members` WHERE `username` = '".$username."'"))
skal da se sådan ud
if ($data = $con -> prepare("SELECT `username` FROM `members` WHERE `username` = ?"))
? er en placeholder som du binder i linjen neden under.

hvis du ikke brugere placeholder har du ikke nogle gavn af bind




Beklager det sene svar, men har lige været igennem en akut operation.

Jeg har dog stadig ikke fundet ud af min fejl og er desværre blevet lidt forvirret af det sidste svar :) Nu kan jeg lige prøve at vedhæfte det hele (uden rettelser fra sidste svar) og håber en er frisk på at hjælpe mig med problemet og forståelse af det :)

Fold kodeboks ind/udPHP kode 


Jeg bliver lidt forvirret når I taler om OOP versionen af MySQLi? Er der nogle gode artikler, hvor jeg kan læse mere om det her.



Indlæg senest redigeret d. 19.12.2013 11:43 af Bruger #17534
Du kan benytte UNIQUE på username og email, så kan de kun fremkomme engang i den table i din database.

du kan kigge på http://www.w3schools.com/sql/sql_unique.asp



HJÆLP SØGES ENDNU :(...


Kenneth: Det kunne man, men "desværre" er jeg stædig nok til at ville lære dette :)

Andre der kan hjælpe lidt, hvad det er jeg gør forkert?



Indlæg senest redigeret d. 29.12.2013 19:19 af Bruger #17534
t