ugrás a tartalomhoz

lefut az if igaz és hamis ága is

rigidirambo · 2015. Dec. 19. (Szo), 23.41
if($message==""){
			$db_h = mysqli_connect();
					
			if($db_h){
					$statement="SELECT * FROM users WHERE username=".$uname." OR email=".$email;
					$result=mysqli_query($db_h, $statement);
					if(!($result['num_rows']>0)){
						$code="";
						for($i=0;$i<10;$i++){
							$shit=rand(0, strlen($valid_chars)-4);
							$code.=$valid_chars[$shit];
						}
						$insert_statement="INSERT INTO users(username,password,email,code) VALUES 
							('".$uname."','".$pword."','".$email."','".$code."')";
						$insert_result=mysqli_query($db_h, $insert_statement);
						if($insert_result){
							$levelszoveg="Regisztráció történt ezzel az e-mail címmel a creativerecycling.pe.hu weboldalon. Regisztrációját megerősítő kódja: ".$code.". Ha úgy gondolja, más regisztrált az e-mail címével, hagyja figyelmen kívül ezt az e-mailt.";
							$header="From: noreply##kukac##creativerecycling.pe.hu";
							mail($email, "Regisztráció megerősítése", $levelszoveg, $header);
							header("/validate.php");
						}else{
							$message.="Hiba történt az adatbázisba vitelkor.<br>";
						}
					}else{
					$message.="A felhasználónév vagy e-mail cím már foglalt.<br>";
					}
					mysqli_close($db_h);
				}else{
					$message.="Adatbázis nem található vagy kapcsolódási hiba.<br>";
				}
			}
Üdv! Egy regisztrációs formot szeretnék készíteni. A mezőkből kiszűröm az sql veszélyes karaktereket, és a hibaüzeneteket a $message-be rakom. Ha üres a $message, kezdem az adatbázis kezelését. Kapcsolat létrejön, magkapom az e-mailt, és az adatbázisba is bekerülnek a megfelelő rekordok. Viszont a végén megkapom a $message-be, hogy hiba az adatbázisba vitelkor. Kezdő vagyok, de irreálisnak tűnik, hogy az adatbázisba beszúrás után lefut az $insert_result-ot vizsgáló if igaz és hamis ága is. Arra gondolok, hogy a mysqli_query eredményét akarom én naivan igaz/hamisként értékelni, sajnos a hivatalos dokumentáción nem tudok eligazodni. Kis változtatással orvosolható, vagy alapjaiban rossz a gondolatmenetem?
 
1

Viszont a végén megkapom a

Poetro · 2015. Dec. 20. (V), 00.32
Viszont a végén megkapom a $message-be, hogy hiba az adatbázisba vitelkor. Kezdő vagyok, de irreálisnak tűnik, hogy az adatbázisba beszúrás után lefut az $insert_result-ot vizsgáló if igaz és hamis ága is.

Miből gondolod, hogy lefut, az igaz és hamis ága is?
2

onnan, hogy az e-mailt is

rigidirambo · 2015. Dec. 20. (V), 00.36
onnan, hogy az e-mailt is megkapom, be is teszi az adatbázisba az adatokat, aztán a legvégén az oldalon kiíratom a $message értékét is, amibe belekerül a "Hiba az adatbázisba vitelkor" szöveg. az pedig már az else ágban van.
3

próbálgattam, és az az

rigidirambo · 2015. Dec. 20. (V), 00.47
próbálgattam, és az az érdekes számomra, hogy ha a mail()-t kihagyom, akkor nincs ez a misztérikus hibaüzenet a $message-ben...
4

header

T.G · 2015. Dec. 20. (V), 01.22
Nem közvetlen a kérdéshez kapcsolódik, de valamelyest mégis, az a header utasítás ott nem oké: http://php.net/manual/en/function.header.php
És mivel ez pont a kérdéses résznél van, ezért érdemes lenne javítani.
5

Egyáltalán nem irreális, sőt

pp · 2015. Dec. 20. (V), 08.03
"Kezdő vagyok, de irreálisnak tűnik, hogy az adatbázisba beszúrás után lefut az $insert_result-ot vizsgáló if igaz és hamis ága is."

Nem az a kérdés, hogy lehet-e, hanem az, hogy hogyan.

Kétszer kerül rá a vezérlés erre a kódra. Ennyi.

"A mezőkből kiszűröm az sql veszélyes karaktereket"
Mondjuk az érdekelne, hogy honnan tudod, hogy mellyek ezek a karakterek, meg azt is, hogy miért kéne kiszűrni, amikor escapelni szokták. :)

pp
7

Őszintén szólva engem nagyon

kuka · 2015. Dec. 20. (V), 16.07
Őszintén szólva engem nagyon meglep, hogy egyáltalán elér oda a végrehajtás. Én arra tippeltem volna, hogy az alább idézett két adatbázis utasítás közül minimum az egyik kiakad:

$statement="SELECT * FROM users WHERE username=".$uname." OR email=".$email;  

$insert_statement="INSERT INTO users(username,password,email,code) VALUES   
                            ('".$uname."','".$pword."','".$email."','".$code."')";
Az insertnél teszel az értékek köré felsővesszőt, a selectnél pedig nem. Hacsak nem numerikusak a $uname és $email értékei, nem bírom felfogni hogyan működhet ennyire is.
8

Köszönöm a segítségeket, az

rigidirambo · 2015. Dec. 24. (Cs), 13.16
Köszönöm a segítségeket, az építő hozzászólásokat, a header-rel volt a baj, és javascripttel megoldva már működik is amit szerettem volna.