Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP - Parse error: syntax error, unexpected ';'

dobry den .. snazim se udelat MySQL registraci na moje stranky v PhP ale jakmile tu registraci vlozim na stranky tak mi to napise toto :

Parse error: syntax error, unexpected ';' in /www/clanteam.com/b/e/e/beethacks/htdocs/index.php on line 12

nevite co stim delat ?
Zmena predmetu, pôvodne: PhP (los)
Změna kategorie, původně: Internet (martin.developer)

Předmět Autor Datum
Někde máš asi blbě danej středník (koukej se na 11. řádek kódu), ale bez toho, abys nám sem dal obsa…
marekdrtic 31.08.2011 07:05
marekdrtic
chyba bude na 10 řádku... vždy když je to parse error se středníkem, tak ji najdeš na předchozím řád…
tomas.kulhanek 31.08.2011 08:13
tomas.kulhanek
A proto, mu poradil, aby hledal na řádku 11, když to hlásí chybu na řádku 12...
Wikan 31.08.2011 09:29
Wikan
aha, pardon, já jsem už z PHP tak zblblej jak s ním dělám denně, že jsem se překoukl :D
tomas.kulhanek 31.08.2011 15:55
tomas.kulhanek
Jak máme poradit, když neznáme kód? Takže ti jen můžeme zopakovat, co říká hláška - syntaktická chyb…
host 31.08.2011 15:01
host
Dávám to sem z vlákna vedle, co tazatel zbytečně znovu založil <?php mysql_pconnect('fdb3.runhostin…
Kráťa 01.09.2011 01:31
Kráťa
Určitě chybí dvojitá uvozovka v mysql_query . Zkus nakopírovat tohle (neodzkoušeno) : mysql_query("…
hynajs 01.09.2011 08:13
hynajs
tazatel by se měl asi naučit uvozovky :) mysql_query("INSERT INTO `users`.`user_info` (`username`,…
tomas.kulhanek 01.09.2011 08:26
tomas.kulhanek
S addslashes & htmlspecialchars souhlasím. Jenom postřeh : já jsem tam ponechal md5 z původního náv…
hynajs 01.09.2011 08:43
hynajs
já jsem začal plně využívat SQL, jelikož mé postřehy jsou že sql mi zatím pracovala vždy rychleji ja…
tomas.kulhanek 01.09.2011 08:49
tomas.kulhanek
Pokud se bavíme o MySQL tak ta nemá problém s: SELECT SHA1('test'); SELECT MD5('test'); Tudíž tyt…
martin.developer 01.09.2011 13:06
martin.developer
Nechtěl jsem zde reagovat, jelikož tazatel očividně o to nevede zájem, ale tohle mi nedalo. addslash…
martin.developer 01.09.2011 12:58
martin.developer
To heslo do SQL je verejne? :-D
virus 01.09.2011 09:37
virus
je to trochu blbé no :D
tomas.kulhanek 01.09.2011 09:44
tomas.kulhanek
Pamatuj kdyz davas otazky a zadas tam i heslo, nevis nikdy ktery blbec to zneuzije, tak si to radeji…
virus 02.09.2011 10:45
virus
dekuju vsem za odpovedi..... asi bych se mel naucit psat stredniky :)
bedar 01.09.2011 19:28
bedar
jo a jeste otazka ... kdyz tento prikaz pouziju na vebu .. tak mam tabulku s registraci vse vyplnim…
bedar 01.09.2011 19:35
bedar
A máš v souboru index.php, který je nastaven jako action formuláře také nějaké zpracování? Nebo co s…
Kráťa 01.09.2011 22:36
Kráťa
Zalezi take jak tu promennou z formulare prevezmes napriklad ve formulari bude <form action="?" met…
virus 02.09.2011 10:50
virus
takze uz je to vyreseno :) poslední
bedar 02.09.2011 11:56
bedar

Jak máme poradit, když neznáme kód? Takže ti jen můžeme zopakovat, co říká hláška - syntaktická chyba. Důvod musíš odhalit sám, když jsi autor kódu a jsi jediný, kdo jej vidí.

Radši ani nechci vidět, jak ta registrace vypadá, když tě zaskočí taková banální chybová hláška...

Dávám to sem z vlákna vedle, co tazatel zbytečně znovu založil

<?php
  mysql_pconnect('fdb3.runhosting.com', '****', '****');
?>

<html>
  <head>
    <title>PHP Tutorials</title>
   </head>
<body>
  <?php
    if ( !$_POST['submit'] ) {
  ?>
    <form action="index.php" method="post">
      <table border="1">
        <tr>
          <td>
            Username:
           </td>
          <td>
            <input type="text" name="username">
           </td>
         </tr>
        <tr>
          <td>
            Password:
           </td>
          <td>
            <input type="password" name="password">
           </td>
         </tr>
        <tr>
          <td>
            Password (Confrim):
           </td>
          <td>
            <input type="password" name="passwordconf">
           </td>
         </tr>
      <tr>
        <td>
          Email:
         </td>
        <td>
          <input type="text" name="email">
         </td>
       </tr>
      <tr>
        <td colspan="2" aling="center">
          <input type="submit" value="Create User" name=submit">
         </td>
       </tr>
     </table>
   </form>
<?php
  } else {
    $username = $_POST ['username'];
    $password = $_POST ['password'];
    $paswordconf = $_POST['passwordconf'];
    $email = $_POST['email'];   
     
    $errors = array ();
    
    if ( !$username ) {
      $errors[1] = "You dud not enter a username.";
    } 
    
    if ( !$pasword ) {
      $errors[2] = "You did not enter a password.";
    }    
    
    if ( !$paswordcofn ) {
      $errors[3] = "You did not enter a password confirmation.";
    }
      
    if ( !$email ) {
      $errors[4] = "You did not enter email.";
    }
      
    if ( !$password != $passwordconf ) {
      $errors[5] = "The passwords you entered did not match.";
    }    
    
    if ( count($errors) > 0 ) {
      foreach ( $errors as $error ) { 
        echo "$error<br>";
      }    
    } else {
      mysql_query("INSERT INTO `users`.`user_info`
          (`username`, `password`, `email`, `user_admin_level`)
          VALUES ('".$username."', '".md5($password)."', '".$email."', '1')';');
    }
   }     
 ?> 
</body>
</html>
     

Odstránené meno a heslo. (los)

Určitě chybí dvojitá uvozovka v mysql_query . Zkus nakopírovat tohle (neodzkoušeno) :

mysql_query("INSERT INTO `users`.`user_info`
          (`username`, `password`, `email`, `user_admin_level`)
          VALUES ('".$username."', '".md5($password)."', '".$email."', '1') ; ") ;

tazatel by se měl asi naučit uvozovky :)

mysql_query("INSERT INTO `users`.`user_info` (`username`, `password`, `email`, `user_admin_level`) VALUES ('$username', MD5('$password'), '$email', '1');");

ovšem osobně bych to ještě ošetřil proti injection aspol...
při zápisu do DB všechny hodnoty ošetřit addslashes a při výpisu je ošetřovat pomocí htmlspecialchars

a ještě by mne zajímalo co využívá tazatel za program v kterém skripty píše... doporučuji pspad, či až budeš dělat velké projekty pročti toto

já jsem začal plně využívat SQL, jelikož mé postřehy jsou že sql mi zatím pracovala vždy rychleji jak php...
zkus si udělat 2 skripty s tisícovkami záznamů a tam dej i md5 a porovnej.. php používám pro hash hesla následovně

sha1(md5($username.sha1($password)).$username) 

jelikož nevím jak to sesmolit v SQL :D

je to složitějšší, ale na bezpečnost údajů si potrpím.. když už uživateli někdo ukradne heslo, tak to není moje vina.. ale jeho.. odposlech? ukradnutá cookie? chápeš? :)

Pokud se bavíme o MySQL tak ta nemá problém s:

SELECT SHA1('test');
SELECT MD5('test');

Tudíž tyto funkce podporuje.

BTW: Na můj vkus mi to hashování hesla přijde zbytečné.
Copak nestačí heslo a troška soli?

<?php
$password = "hele254";
$salt = "nejaky-staticky-retezec-pro-cely-web-ktery-bude-pouzit-jako-sul"; //případně username, ale při jeho změně se musí vygenerovat nové heslo
$passwordHash = hash_hmac('sha256', $password, $salt);

Pokud jste paranoidní (bez urážky), můžete používat třeba ripemd320 algoritmus. Solení hesel pomáhá proti rainbow tabulkám, nemá smysl dělat takové velké hashe, které jsou na jednu stranu osolené, ale i tak zbytečně "přehashované". Proti brute-force je Vám to prd platné.

Nechtěl jsem zde reagovat, jelikož tazatel očividně o to nevede zájem, ale tohle mi nedalo.
addslashes() NE! NE! (včetně stripslashes()).

Proměnné se mají escapovat podle daného kontextu. Tzn. pokud se jedná o textová data tak do databáze ukládat a prohánět přes například mysql_real_escape_string(). Pokud třeba o celá čísla tak přes intval(), či pro čísla s plovou des. čárkou floatval() (případně pomocí přetypování (int) (float) ...).

A htmlspecialchars() používat až ve Viewu/šabloně při výpisu z databáze.

Případně používat jiné filtry na daný kontext - třeba pro url rawurlencode() a tak dále.
Každopádně na addslashes() a stripslashes() zapomenout.

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