Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno MySQL - How to?

Zdravím, programujem svoj web, a snažím sa dajako urobiť login / register systém. Nepíše mi to nikde žiadnu chybu, skrátka to nevytvára nových užívateľov do databáze,

Kód


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	<title>Admin Panel &copy; <?php $date = date("Y"); echo "$date"; ?></title>
	<!-- BOOTSTRAP STYLES-->
	<link href="assets/css/bootstrap.css" rel="stylesheet" />
	<!-- FONTAWESOME STYLES-->
	<link href="assets/css/font-awesome.css" rel="stylesheet" />
	<!-- CUSTOM STYLES-->
	<link href="assets/css/custom.css" rel="stylesheet" />
	<!-- GOOGLE FONTS-->
	<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css' />
</head>
<body>
	<div id="wrapper">
		<div class="navbar navbar-inverse navbar-fixed-top">
			<div class="adjust-nav">
				<div class="navbar-header">
					<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".sidebar-collapse">
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
					</button>
				</div>
				
				<span class="logout-spn" >
					<a href="#" style="color:#fff;">PRIHLÁSIŤ SA</a>  
				</span>
			</div>
		</div>
		<!-- /. NAV TOP  -->
		<nav class="navbar-default navbar-side" role="navigation">
			<div class="sidebar-collapse">
				<ul class="nav" id="main-menu">
					
					<li>
						<a href="login.php">Prihlásiť sa</a>
					</li>
					
					<li class="active-link">
						<a href="register.php">Registrácia</a>
					</li>
				</ul>
			</div>
		</nav>
		<!-- /. NAV SIDE  -->
		<div id="page-wrapper" >
			<div id="page-inner">
				<div class="row">
					<div class="col-md-12">
						<h2>ZAREGISTROVAŤ SA</h2>   
					</div>
				</div>              
				<!-- /. ROW  -->
				<hr />
				<center>
					<form action="#" method="post">
						Nickname: <sup style="color: #FF0000;">Required!</sup> <input type="text" name="nickname" pattern="[a-zA-Z0-9]+" class="form-control" required=""><br><br>

						Heslo: <sup style="color: #FF0000;">Required!</sup> <input type="password" name="pwd1" class="form-control" required=""><br><br>

						Heslo znovu: <sup style="color: #FF0000;">Required!</sup> <input type="password" name="pwd2" class="form-control" required=""><br><br>

						E-mail: <sup style="color: #FF0000;">Required!</sup> <input type="email" name="email" class="form-control" required=""><br><br>

						ANTI-SPAM <sup style="color: #FF0000;">Zadajte aktuálny rok</sup> <input type="text" name="rok" pattern="[0-9]+" required=""><br><br>

						<input type="submit" value="Vytvoriť účet" name="submitForm" class="btn btn-success"><br><br>

						<?php
							$rok = date("Y");
							$nickname = $_POST['nickname'];
							$pwd1 = md5($_POST['pwd1']);
							$pwd2 = md5($_POST['pwd2']);
							$mail = $_POST['email'];
							$antispam = $_POST['rok'];
							$submit = $_POST['submitForm'];
							$existujen = mysql_query('SELECT COUNT(*) FROM users WHERE nickname=? LIMIT 1', $_POST['nickname']);
							$existujem = mysql_query('SELECT COUNT(*) FROM users WHERE email=? LIMIT 1', $_POST['email']);

							if (isset($submit)) {
								$mysql_server = "localhost";
								$mysql_user = "root";
								$mysql_password = "Nemusíš Vedieť :)";
								$mysql_db = "newdbtest";
								$mysqli = new mysqli($mysql_server, $mysql_user, $mysql_password, $mysql_db);
								if ($mysqli->connect_errno) {
									printf("Connection failed: %s \n", $mysqli->connect_error);
									exit();
								}
								$mysqli->set_charset("utf8");

								if ($pwd1 == $pwd2) {
									if ($antispam == $rok) {
										if ($existujen) {
											echo "Užívateľ s týmto nick-om už existuje!";
										} else {
											if ($existujem) {
												echo "Užívateľ s týmto e-mail-om už existuje!";
											} else {
												mysql_query('INSERT INTO users (nickname, password, mail) VALUES ($nickname, $pwd1, $mail)');
												$_SESSION['nickname'] = $nickname;
												echo "Váš účet bol vytvorený! Môžete sa <a href=\"login.php\">prihlásiť</a>.";
											}
										}
									} else {
										echo "CHYBA: Zle vyplnený anti-spam!";
										header("refresh:3; url=register.php");
									}
								} else {
									echo "CHYBA: Heslá nesúhlasia!";
									header("refresh:3; url=register.php");
								}
							}
						?>
					</form>
				</center>
				<!-- /. ROW  -->           
			</div>
			<!-- /. PAGE INNER  -->
		</div>
		<!-- /. PAGE WRAPPER  -->
	</div>
	<div class="footer">
		
		<div class="row">
			<div id="col-lg-12">
				&copy; <?php echo "$date"; ?> By RayCodeUwU | Všetky práva vyhradené!
			</div>
		</div>
	</div>
	
	<!-- /. WRAPPER  -->
	<!-- SCRIPTS -AT THE BOTOM TO REDUCE THE LOAD TIME-->
	<!-- JQUERY SCRIPTS -->
	<script src="assets/js/jquery-1.10.2.js"></script>
	<!-- BOOTSTRAP SCRIPTS -->
	<script src="assets/js/bootstrap.min.js"></script>
	<!-- CUSTOM SCRIPTS -->
	<script src="assets/js/custom.js"></script>
</body>
</html>

Viem, že pre niektoré oči tento kód nie je najlepšie napísaný, ale zamerajme sa prosím na hlavný problém -> Teda, prečo nefunguje tvorba users do databáze.

Předmět Autor Datum
Asi málokomu se bude chtít procházet celý kód... Příčin, proč to nefunguje, může být spousta, nevíme…
host 28.06.2020 17:36
host
Myslím si, že chyba by mala byť niekde v tejto časti nie? mysql_query('INSERT INTO users (nickname…
RayCodeUwU 28.06.2020 17:47
RayCodeUwU
mysql_query je removed https://www.php.net/supported-versions.php https://www.php.net/manual/en/func…
kacikac 28.06.2020 17:49
kacikac
Tak som to vyriešil. Chyba bola v jednoduchých úvodzovkách ( ' ' ). Ale je tu ďalší problém. Keď vyt…
RayCodeUwU 28.06.2020 18:50
RayCodeUwU
Chyba bola v jednoduchých úvodzovkách ( ' ' ). Nepíše mi to nikde žiadnu chybu Tomu se mi skoro ne…
host 28.06.2020 19:38
host
Keď si prečítaš dokumentáciu k mysqli_query, tak uvidíš, že táto funkcia vráti hodnotu podľa toho, č…
los 28.06.2020 19:56
los
Tak som teda vyskúšal čo ste mi poradili (los a host), a z polovice je to už funkčné. Keď som chcel…
RayCodeUwU 28.06.2020 21:25
RayCodeUwU
Zapomněl jsi zmínit i mě, protože kdybys neaplikoval to co jsem napsal, tak bys tam měl furt toho ko…
kacikac 28.06.2020 21:47
kacikac
žiaľ, nič som nenašiel.
RayCodeUwU 28.06.2020 21:57
RayCodeUwU
Google mi hned na prvním místě dal odpověď: https://stackoverflow.com/questions/22252904/how-to-chec…
kacikac 28.06.2020 22:06
kacikac
Pretože nekontroluješ návratovú hodnotu funkcie mysqli_query. Doplň kontrolu a zistíš, prečo to nefu…
los 28.06.2020 22:23
los
Ako?
RayCodeUwU 28.06.2020 22:30
RayCodeUwU
Dal jsem ti odkaz, v něm je co chceš, tak co furt řešíš???
kacikac 28.06.2020 22:38
kacikac
if (mysqli->query(...) === FALSE) { die mysqli->error; }
los 29.06.2020 07:28
los
Tak som teda hodil celý kód do jedného "online checker-u". Ten vypísal tieto chyby: PHP Notice: Un…
RayCodeUwU 28.06.2020 22:43
RayCodeUwU
A znova. Dal jsem ti odkaz, v něm je co chceš, tak co furt řešíš???
kacikac 28.06.2020 22:49
kacikac
Takéto chyby by ti mal vypisovat aj tvoj server, na ktorom tú aplikáciu testuješ. Nastav si poriadne…
los 29.06.2020 07:43
los
Tak som popozeral rôzne návody na internete, aj na YouTube, aj stránky ako je táto (https://mujskrip…
RayCodeUwU 28.06.2020 23:44
RayCodeUwU
Toto fakt už není možné. Ty to sem chceš zkopírovat??? Takže ctrl+c a ctrl+v z toho odkazu, co jsem…
kacikac 28.06.2020 23:52
kacikac
Nech sa páči -> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="…
RayCodeUwU 29.06.2020 00:04
RayCodeUwU
Tak si ten tvůj kód projdi několikrát a pokud budeš u toho i myslet, tak na to přijdeš, proč ti to n…
kacikac 29.06.2020 00:23
kacikac
Budeš taký dobrý a napíšeš kde je chyba? Konkrétne?
RayCodeUwU 29.06.2020 00:31
RayCodeUwU
Těch chyb tam bude mraky, ale ta, co řešíme teď (ověření jestli existuje mail/nickname) tak to podle…
kacikac 29.06.2020 00:34
kacikac
Funguje, ďakujem :). poslední
RayCodeUwU 29.06.2020 12:52
RayCodeUwU

Tak som to vyriešil. Chyba bola v jednoduchých úvodzovkách ( ' ' ). Ale je tu ďalší problém. Keď vytvorím užívateľa, a chcem vytvoriť znova toho istého, tak ho vytvorí, aj keď som naprogramoval, že ho vytvoriť nemá (ak už existuje) a aj tak ho vytvorí.

mysql_query som zmenil na mysqli_query.

Chyba bola v jednoduchých úvodzovkách ( ' ' ).

Nepíše mi to nikde žiadnu chybu

Tomu se mi skoro nechce věřit.

$existujen = mysql_query('SELECT COUNT(*) FROM users WHERE nickname=? LIMIT 1', $_POST['nickname']);

Tohle ti funguje? Když si echem vypíšeš proměnnou $existujen, obsahuje něco?

Keď si prečítaš dokumentáciu k mysqli_query, tak uvidíš, že táto funkcia vráti hodnotu podľa toho, či prebehla úspešne:

Return Values
Returns FALSE on failure.

Túto návratovú hodnotu by si mal testovať pri každom volaní mysqli_query. Ku presnej chybe sa potom dostaneš pomocou funkcie mysqli_error.

Aby ti nevznikali duplicitní používatelia v databáze, tak si pridaj UNIQUE constraint do MySQL tabuľky, pretože toto by si mal mať ošetrené hlavne v databáze, a až potom v PHP aplikácii.

Tak som teda vyskúšal čo ste mi poradili (los a host), a z polovice je to už funkčné.

Keď som chcel vypísať $existujen, nič to nevypísalo.
Nastavil som v databázi UNIQUE, a teraz už to nevytvorí užívateľa s tým istým nickom. Lenže ďalší problém je ten, že aj keď to už síce funguje ako má, po kliknutí na tlačítko zaregistrovať sa mi to napíše aj tak "účet bol vytvorený..." ako mám docieliť, aby mi to napísalo to, čo tam mám? Teda "Uživ. s tímto nick-om existuje" a "Užív. s týmto mailom už existuje..."?

Tak som teda hodil celý kód do jedného "online checker-u". Ten vypísal tieto chyby:


PHP Notice:  Undefined index: nickname in /home/cg/root/7710831/main.php on line 73
PHP Notice:  Undefined index: pwd1 in /home/cg/root/7710831/main.php on line 74
PHP Notice:  Undefined index: pwd2 in /home/cg/root/7710831/main.php on line 75
PHP Notice:  Undefined index: email in /home/cg/root/7710831/main.php on line 76
PHP Notice:  Undefined index: rok in /home/cg/root/7710831/main.php on line 77
PHP Notice:  Undefined index: submitForm in /home/cg/root/7710831/main.php on line 78
PHP Notice:  Undefined variable: mysqli in /home/cg/root/7710831/main.php on line 79
PHP Notice:  Undefined index: nickname in /home/cg/root/7710831/main.php on line 79
PHP Warning:  mysqli_query() expects parameter 1 to be mysqli, null given in /home/cg/root/7710831/main.php on line 79
PHP Notice:  Undefined variable: mysqli in /home/cg/root/7710831/main.php on line 80
PHP Notice:  Undefined index: email in /home/cg/root/7710831/main.php on line 80
PHP Warning:  mysqli_query() expects parameter 1 to be mysqli, null given in /home/cg/root/7710831/main.php on line 80

Nič viac. A STÁLE NECHÁPEM, PREČO MI NEUKAZUJE SPRÁVNY TEXT, KTORÝ UKAZOVAŤ MÁ (Uživ. už existuje... atď...)

Takéto chyby by ti mal vypisovat aj tvoj server, na ktorom tú aplikáciu testuješ. Nastav si poriadne error reporting.

Toto je chyba, kvôli ktorej ti to nefunguje. Naštuduj si, ako sa používa mysqli:

mysqli_query() expects parameter 1 to be mysqli, null given

Objektový prístup ti bude asi vyhovovať viac, t.j. $mysqli->query namiesto mysqli_query.

Chyba, ktorú celý čas riešiš, je spôsobená tým, že nesprávne posielaš parametre do SQL príkazu. V jednom prípade tam máš bezpečnostnú dieru typu SQL injection, a v druhom prípade si dal SQL parametre ako argumenty do mysqli_query funkcie, tak sa to ale nerobí.

Toto fakt už není možné.
Ty to sem chceš zkopírovat???
Takže ctrl+c a ctrl+v z toho odkazu, co jsem tu dal:

$query = mysqli_query($con, "SELECT * FROM emails WHERE email='".$email."'");

if (!$query)
    {
        die('Error: ' . mysqli_error($con));
    }

if(mysqli_num_rows($query) > 0){

    echo "email already exists";

}else{

    // do something

}

Nech sa páči ->


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	<title>Admin Panel &copy; <?php $date = date("Y"); echo "$date"; ?></title>
	<!-- BOOTSTRAP STYLES-->
	<link href="assets/css/bootstrap.css" rel="stylesheet" />
	<!-- FONTAWESOME STYLES-->
	<link href="assets/css/font-awesome.css" rel="stylesheet" />
	<!-- CUSTOM STYLES-->
	<link href="assets/css/custom.css" rel="stylesheet" />
	<!-- GOOGLE FONTS-->
	<link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css' />
</head>
<body>
	<div id="wrapper">
		<div class="navbar navbar-inverse navbar-fixed-top">
			<div class="adjust-nav">
				<div class="navbar-header">
					<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".sidebar-collapse">
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
						<span class="icon-bar"></span>
					</button>
				</div>
				
				<span class="logout-spn" >
					<a href="#" style="color:#fff;">PRIHLÁSIŤ SA</a>  
				</span>
			</div>
		</div>
		<!-- /. NAV TOP  -->
		<nav class="navbar-default navbar-side" role="navigation">
			<div class="sidebar-collapse">
				<ul class="nav" id="main-menu">
					
					<li>
						<a href="login.php">Prihlásiť sa</a>
					</li>
					
					<li class="active-link">
						<a href="register.php">Registrácia</a>
					</li>
				</ul>
			</div>
		</nav>
		<!-- /. NAV SIDE  -->
		<div id="page-wrapper" >
			<div id="page-inner">
				<div class="row">
					<div class="col-md-12">
						<h2>ZAREGISTROVAŤ SA</h2>   
					</div>
				</div>              
				<!-- /. ROW  -->
				<hr />
				<center>
					<form action="#" method="post">
						Username: <sup style="color: #FF0000;">Required!</sup> <input type="text" name="nickname" pattern="[a-zA-Z0-9]+" class="form-control" required=""><br>

						Heslo: <sup style="color: #FF0000;">Required!</sup> <input type="password" name="pwd1" class="form-control" required=""><br>

						Heslo znovu: <sup style="color: #FF0000;">Required!</sup> <input type="password" name="pwd2" class="form-control" required=""><br>

						E-mail: <sup style="color: #FF0000;">Required!</sup> <input type="email" name="email" class="form-control" required=""><br>

						ANTI-SPAM <sup style="color: #FF0000;">Zadajte aktuálny rok</sup> <input type="text" name="rok" pattern="[0-9]+" class="form-control" required=""><br>

						<input type="submit" value="Vytvoriť účet" name="submitForm" class="btn btn-success"><br><br>

						<?php
							$nickname = $_POST['nickname'];
							$pwd1 = md5($_POST['pwd1']);
							$pwd2 = md5($_POST['pwd2']);
							$mail = $_POST['email'];
							$antispam = $_POST['rok'];
							$submit = $_POST['submitForm'];
							
							$existujen = mysqli_query($mysqli, "SELECT * FROM users WHERE nickname='".$nickname."'");

							if (isset($submit)) {
								$mysql_server = "localhost";
								$mysql_user = "root";
								$mysql_password = "NoNE";
								$mysql_db = "newdb";
								$mysqli = new mysqli($mysql_server, $mysql_user, $mysql_password, $mysql_db);
								if ($mysqli->connect_errno) {
									printf("Connection failed: %s \n", $mysqli->connect_error);
									exit();
								}
								$mysqli->set_charset("utf8");

								if ($pwd1 == $pwd2) {
									if ($antispam == date("Y")) {
										if (mysqli_num_rows($existujen) > 0) {
											echo "Užívateľ s týmto nick-om už existuje!";
										} else {
											if ($existujem) {
												echo "Užívateľ s týmto e-mail-om už existuje!";
											} else {
												mysqli_query($mysqli, "INSERT INTO users (nickname, password, mail) VALUES ('$nickname', '$pwd1', '$mail')");
												$_SESSION['nickname'] = $nickname;
												echo "Váš účet bol vytvorený! Môžete sa <a href=\"login.php\">prihlásiť</a>.";
												header("refresh:3; url=register.php");
											}
										}
									} else {
										echo "CHYBA: Zle vyplnený anti-spam!";
										header("refresh:3; url=register.php");
									}
								} else {
									echo "CHYBA: Heslá nesúhlasia!";
									header("refresh:3; url=register.php");
								}
							}
						?>
					</form>
				</center>
				<!-- /. ROW  -->           
			</div>
			<!-- /. PAGE INNER  -->
		</div>
		<!-- /. PAGE WRAPPER  -->
	</div>
	<div class="footer">
		
		<div class="row">
			<div id="col-lg-12">
				&copy; <?php echo "$date"; ?> By RayCodeUwU | Všetky práva vyhradené!
			</div>
		</div>
	</div>
	
	<!-- /. WRAPPER  -->
	<!-- SCRIPTS -AT THE BOTOM TO REDUCE THE LOAD TIME-->
	<!-- JQUERY SCRIPTS -->
	<script src="assets/js/jquery-1.10.2.js"></script>
	<!-- BOOTSTRAP SCRIPTS -->
	<script src="assets/js/bootstrap.min.js"></script>
	<!-- CUSTOM SCRIPTS -->
	<script src="assets/js/custom.js"></script>
</body>
</html>

Vyskúšaj si to skopírovať do svojho .php súboru, a pokiaľ ti to pôjde bez problémov, tak mám asi pokazené VPS... Lebo mne to skrátka stále nejde.

Těch chyb tam bude mraky, ale ta, co řešíme teď (ověření jestli existuje mail/nickname) tak to podle mě v první řadě nefunguje proto, protože nejdřív máš dotaz na databázi (query) a teprve potom jsi vytvořil připojení $mysqli a ve druhé řadě být tebou tak se mrknu jak se připojuje do databáze (mysqli objektově vs mysqli procedurálně) a ve třetí řadě co to je ks**** za kód, proč nezkopneš nějaký už udělaný z netu?

Zpět do poradny Odpovědět na původní otázku Nahoru