MySqli update problém – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

MySqli update problém – PHP – Fórum – Programujte.comMySqli update problém – PHP – Fórum – Programujte.com

 

Marek
~ Anonymní uživatel
521 příspěvků
19. 8. 2016   #1
-
0
-

Ahoj, pracujem s MySQLi a potrebujem prepísať vo formulári pri úprave používateľa jeho meno, ktoré sa updatne do existujúceho záznamu do databázy... Skúste mi poradit.. Stále dostávam odpoveď z Mysqli, že " unexpected.. neviete mi s tým pomôcť? :( Neviem si už pomoct. Keď dám toto, dostanem takúto odpoveď: unexpected " a to je na konci Mysqli query...  nechápem tomu.. prosím upravte mi to, ak viete

 $nick_get = mysqli_query($con,"SELECT * FROM `Users` WHERE `UserID`='".$_SERVER['QUERY_STRING']."'") or die(mysqli_error());
$nick = mysqli_fetch_assoc($nick_get); 
              $ins = mysqli_query($con,"UPDATE `Users` SET
   `Username` = $username, 
   `Email` = $email,  
   `Fullname` = $fullname,  
   `expdate` = $expdate  
   WHERE `UserID` =  $nick['UserID']  ") 
     echo "Používateľ bol pozmenený!";  
Nahlásit jako SPAM
IP: 84.16.53.–
Kit+15
Guru
19. 8. 2016   #2
-
0
-

#1 Marek
Řetězce v SQL dotazu musí být v apostrofech. Případně můžeš použít prepared statements.

Pomůcka: Místo provedení SQL dotazu si ho nechej zobrazit.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:2006:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Marek
~ Anonymní uživatel
521 příspěvků
19. 8. 2016   #3
-
0
-

Nie, nefunguje to, stále totožná chyba.. :( 

Nahlásit jako SPAM
IP: 84.16.53.–
chita0
Newbie
19. 8. 2016   #4
-
0
-

#3 Marek 

<?php

	$nick_get = mysqli_query($con,"SELECT * FROM `Users` WHERE `UserID` = ".$_SERVER['QUERY_STRING']) or die(mysqli_error());

	$nick = mysqli_fetch_assoc($nick_get); 
              
	$ins = mysqli_query($con,"UPDATE `Users` SET
   				  `Username` = '".$username."', 
   				  `Email` = '".$email."',  
   				  `Fullname` = '".$fullname."',  
   				  `expdate` = '".$expdate."'  
   				  WHERE `UserID` = ".$nick['UserID']);

     	echo "Používateľ bol pozmenený!";  
Nahlásit jako SPAM
IP: 77.104.198.–
Marek
~ Anonymní uživatel
521 příspěvků
19. 8. 2016   #5
-
0
-

#4 chita
Ďakujem ti. Chita a mohol by si mi pomôcť? Keď tak mailom ešte ohľadom niečoho :) 

Nahlásit jako SPAM
IP: 84.16.53.–
Kit+15
Guru
19. 8. 2016   #6
-
+1
-
Zajímavé

#4 chita
Bohužel je v tom SQL Injection, takže to není použitelné.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Marek
~ Anonymní uživatel
521 příspěvků
19. 8. 2016   #7
-
0
-

#6 Kit
Ono mi to vypíše že používateľ bol poznmenený, no nezmení sa to.. :( 

Nahlásit jako SPAM
IP: 84.16.53.–
Kit+15
Guru
19. 8. 2016   #8
-
0
-

#7 Marek
Evidentně nebyla splněna podmínka 

WHERE `UserID` = ".$nick['UserID']

Podle mne je natolik nesmyslná, že ani splněna být nemohla. K čemu tam vlastně máš ten první (zcela zbytečný) SELECT?

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Marek
~ Anonymní uživatel
521 příspěvků
19. 8. 2016   #9
-
0
-

   

 <form class="login-form" method="post" action='user.php?<?php echo $nick['UserID'];?>'>                        
      Nick:<input type="text" name="username" value=<?php echo $nick['Username']; ?>><br />  
      Email:<input type="text" name="email" placeholder="E-mail" value=<?php echo $nick['Email']; ?>>                           <br />
     Meno a priezvisko<input type="text" name="fullname" placeholder="Meno a Priezvisko" value=<?php echo $nick['Fullname']; ?>>                    <br />
     Dátum expirácie: <input type="datetime-local" value="2000-01-01T00:00:00" name='expdate' />
      <button type="submit" name="update">Upraviť</button>
    </form>
    
    
                       <?php
                               if(isset($_POST['update'])){
  $username = ($_POST['username']);
  $email = ($_POST['email']);
  $fullname = ($_POST['fullname']);
  $expdate = ($_POST['expdate']);
        if($username == "" || $email == "" || $fullname == ""){
    echo "Na niečo si zabudol!";
  }elseif(strlen($username) > 45){
    echo "Meno registrovaného používateľa je príliš dlhé!";
  }elseif(strlen($email) > 45){
    echo "E-mail registrovaného používateľa je veľmi dlhý!!";
  }elseif(strlen($fullname) > 45){
    echo "Meno a priezvisko používateľa sú veľmi dlhé, prosím skráťte ich!";
  }else{
    $register1 = mysqli_query($con,"SELECT `UserID` FROM `Users` WHERE `Username`='$username'") or die(mysqli_error());
    if(mysqli_num_rows($register1) > 0){
      echo "Toto meno je už používané!";  
    }else{ $nick_get = mysqli_query($con,"SELECT * FROM `Users` WHERE `UserID` = ".$_SERVER['QUERY_STRING']) or die(mysqli_error());

	$nick = mysqli_fetch_assoc($nick_get); 
              
	$ins = mysqli_query($con,"UPDATE `Users` SET
   				  `Username` = '".$username."', 
   				  `Email` = '".$email."',  
   				  `Fullname` = '".$fullname."',  
   				  `expdate` = '".$expdate."'  
   				  WHERE `UserID` = ".$nick['UserID']);

     	echo "Používateľ bol pozmenený!";  
                  }   }}?>

Nerozumiem tomu :) skús to pochopiť z tohto všetkého... :) 

Nahlásit jako SPAM
IP: 84.16.53.–
q
~ Anonymní uživatel
219 příspěvků
21. 8. 2016   #10
-
0
-

Nepoužívej query string, dej si tam pojmenovaný parametr.

Nevkládej uživatelská data do HTML tak jak jsou. Přeformátuj je do HTML. (Co když si dám jméno "hele<img src='http://nekde/penis.jpg'/>hele" ?

Nevkládej uživatelská data do SQL tak jak jsou. Přeformátuj je do SQL. (Co když si dám jméno "pepa' or 'username'='admin" ?)

Ten poslední select k ničemu nepotřebuješ.

Takhle nějak by to snad mohlo fungovat:

<?php
	$html['userid']   = htmlspecialchars($nick['UserID']);
	$html['username'] = htmlspecialchars($nick['username']);
	$html['email']    = htmlspecialchars($nick['email']);
	$html['fullname'] = htmlspecialchars($nick['fullname']); 
?><form class="login-form" method="post" action="user.php?userid="<?php echo $html['userid'];?>">                        
Nick:<input type="text" name="username" value="<?php echo $html['username']; ?>"><br />  
Email:<input type="text" name="email" placeholder="E-mail" value="<?php echo $html['email']; ?>"><br />
Meno a priezvisko<input type="text" name="fullname" placeholder="Meno a Priezvisko" value="<?php echo $html['fullname']; ?>"><br />
Dátum expirácie: <input type="datetime-local" value="2000-01-01T00:00:00" name="expdate" />
<button type="submit" name="update">Upraviť</button>
</form>
<?php
	if(isset($_POST['update'])){
		$username = ($_POST['username']);
		$email = ($_POST['email']);
		$fullname = ($_POST['fullname']);
		$expdate = ($_POST['expdate']);
		if($username == "" || $email == "" || $fullname == ""){
			echo "Na niečo si zabudol!";
		}elseif(strlen($username) > 45){
			echo "Meno registrovaného používateľa je príliš dlhé!";
		}elseif(strlen($email) > 45){
			echo "E-mail registrovaného používateľa je veľmi dlhý!!";
		}elseif(strlen($fullname) > 45){
			echo "Meno a priezvisko používateľa sú veľmi dlhé, prosím skráťte ich!";
		}else{
			if ($isadmin){/*toto si nějak uprav*/
				$sql['userid'] = (int)$_GET['userid'];
			}else{
				$sql['userid'] = (int)$nick['UserID'];
			}

			$sql['username'] = mysqli_real_escape_string($con, $username);
			$sql['email']    = mysqli_real_escape_string($con, $email); 
			$sql['fullname'] = mysqli_real_escape_string($con, $fullname); 
			$sql['expdate']  = mysqli_real_escape_string($con, $expdate); 

			$register1 = mysqli_query($con,"SELECT `UserID` FROM `Users` WHERE `Username`='".$sql['username']."'") or die(mysqli_error());
			if(mysqli_num_rows($register1) > 0){
				echo "Toto meno je už používané!";  
			}else{
				$ins = mysqli_query($con,"UPDATE `Users` SET
				                         `Username` = '".$sql['username']."', 
				                         `Email` = '".$sql['email']."',  
				                         `Fullname` = '".$sql['fullname']."',  
				                         `expdate` = '".$sql['expdate']."'  
				                         WHERE `UserID` = ".$sql['userid']) or die(mysqli_error());
				
				echo "Používateľ bol pozmenený!";  
			}
		}
	}
?>
Nahlásit jako SPAM
IP: 213.211.51.–
q
~ Anonymní uživatel
219 příspěvků
21. 8. 2016   #11
-
0
-

Mám tam nějaké chyby, to najdeš :-)

Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 22 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý