Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PhP - po odeslani infa se nic nestane ?!

dobry den , kdyz uz mam udelanou registraci v php tak sem ji chtel vyzkouset.
zadam info (jmeno , heslo, email) a odeslu .. ale pak se nic nestane
co stim ? ....
muzete to vyskouset na adrese:http://bhacks-registration.atwebpages.com/index.ph p

a zde je php kod :
.

<?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 did 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($error) > 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>
Předmět Autor Datum
Ach ty blbé uvozovky :-), pak člověk občas prohlíží program 50x a chybu nenajde :-D: <input type="s…
marekdrtic 01.09.2011 20:25
marekdrtic
ano i po oprave Php se stale nic nedeje koukni zase na http://bhacks-registration.atwebpages.com/ind…
bedar 01.09.2011 20:33
bedar
Mě se objevila po registraci prázdná stránka, což je v pořádku, nemáš tam žádný echo "Registrace OK"…
marekdrtic 01.09.2011 20:35
marekdrtic
database se jmenuje users
bedar 01.09.2011 20:37
bedar
Nech si vypsat tohle (přidej hned za mysql_query) echo mysql_error();
marekdrtic 01.09.2011 20:43
marekdrtic
JOOO! mam to ... JSI BUH mas 1* :* :DDD
bedar 01.09.2011 20:43
bedar
V čem teda byla chyba? btw označil jsem dotaz jako vyřešený.
marekdrtic 01.09.2011 20:45
marekdrtic
database byla blbe pojmenovana :) jo a jak tam mam napsane $errors = array(); if ( !$username ) { $…
bedar 01.09.2011 20:48
bedar
No já bych komplet ten systém vypisování chyb předělal, takhle mi to přijde pro tebe ne příliš strav…
marekdrtic 01.09.2011 20:53
marekdrtic
super funguje .. nemas skype. a jeste neco jak nevypisu v tabulce vubec nic tak mi to tam porad nap…
bedar 01.09.2011 20:56
bedar
Skype nemám, jen ICQ. Zkus logicky uvažovat, na tohle tě nechám přijít samotnýho, nebudu sem psát ho…
marekdrtic 01.09.2011 21:00
marekdrtic
vubec nechapu co jsi napsal :D
bedar 01.09.2011 21:01
bedar
Schválně jsem si počkal na tvoji odpověď. Sorry, ale podle toho, co si myslím, nemáš ani špetku logi…
marekdrtic 01.09.2011 21:04
marekdrtic
kdyby sis tohle to vlakno prohlizel jeste jednou , tak sem na to asi prisel : takze to : if($iserr…
bedar 02.09.2011 07:08
bedar
Néééé, pochopils to úplně blbě :-). Uvědom si, co máš v tom kódu, koukej se na ten kód (dal jsem sem…
marekdrtic 02.09.2011 07:35
marekdrtic
nevim co bych bez tebe delal :) , a dekuji za odpoved PS : HTML zvladam ... poslední
bedar 02.09.2011 11:58
bedar

Ach ty blbé uvozovky :-), pak člověk občas prohlíží program 50x a chybu nenajde :-D:

<input type="submit" value="Create User" name=submit">

Co se ti na tom nezdá?
Že by name=submit" ? Zkus to nahradit tímto:

<input type="submit" value="Create User" name="submit">

Edit: Asi by fungovala i varianta name=submit (bez uvozovek), ale zdá se mi to divné, radši používej uvozovky.

Edit2: A ještě popíšu, jak jsem na tu chybu přišel:

Nefunguje správně podmínka if ( !$_POST['submit'] ) => je formulář method=post => je, takže je problém se samotnou proměnnou submit => blbé uvozovky nalezeny :-). Trénuj tohleto programátorsko/logické myšlení, pak na spoustu chyb přijdeš i bez pomoci a bude se ti celkově programovat lépe.

A jen tak mimochodem, tak, jak to teď máš, bych dokázal (a taky každý zkušenější hacker/programátor) smazat celou tabulku pomocí SQL injection. Nastuduj si, jak se proti tomu bránit.

Mě se objevila po registraci prázdná stránka, což je v pořádku, nemáš tam žádný echo "Registrace OK"; nebo něco podobnýho, tudíž je to v pořádku.

Dej tam místo:

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

tohle:

} else {
mysql_query("INSERT INTO `users`.`user_info`
(`username`, `password`, `email`, `user_admin_level`)
VALUES ('".$username."', '".md5($password)."', '".$email."', '1') ; ") ;
echo "Registration succesfully completed.";
}

Jestli se ti nic nevkládá do tabulky, tak máš něco blbě jinde, tipoval bych, že se tvoje databáze nejmenuje users, takže SQL dotaz upravit takto:

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

database byla blbe pojmenovana :)
jo a jak tam mam napsane

$errors = array();
    
    if ( !$username ) {
      $errors[1] = "You did 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($error) > 0 ) {
        foreach ( $errors as $error ) {
          echo "$error<br>";

tak to jsou chyby ze ?
no a jak nejakou chybu udelam tak se nic nestane .. nevis co stim ?

PS:SQL funguje :)

No já bych komplet ten systém vypisování chyb předělal, takhle mi to přijde pro tebe ne příliš stravitelné, raději snad pro začátečníka takto:

$iserror = 0;
    
    if ( $username=='' ) { // if(!$username) znamena ze pokud promenna vubec neexistuje, tak vypise tu chybu, ale promenna EXISTUJE - definujes ji nahore, plati pro vsechny pripady
      echo "You did not enter a username.<br>";
      $iserror=1;
    } 
    
    if ( $password=='' ) { //tady jsi mel $pasword misto $password
      echo "You did not enter a password.<br>";
      $iserror=1;
    }    
    
    if ( $paswordcofn=='' ) {
      echo "You did not enter a password confirmation.<br>";
      $iserror=1;
    }
      
    if ( $email=='' ) {
      echo "You did not enter email.<br>";
      $iserror=1;
    }
      
    if ( $password != $passwordconf ) {
      echo "The passwords you entered did not match.<br>";
      $iserror=1;
    }

if($iserror==0) { // a tady to mysql_query atd.
    

Ještě bych tam dal za sebe kontrolu správně zadaného emailu pomocí PCRE (regulární výrazy), ale to je na tebe asi zatím moc, spíš se soustřeď na to, abys nedělal začátečnický chyby, pak můžeš začít dělat pořádný věci :-).

Skype nemám, jen ICQ. Zkus logicky uvažovat, na tohle tě nechám přijít samotnýho, nebudu sem psát hotovej kód jako na zlatým podnose, musíš být samostatný (stejnak po dopsání tohohle příspěvku vypínám PC) - pokud je nějaká chyba, je v proměnné $iserror uložena jednička. Máš tam podmínku, že pokud je $iserror jednička (nula), nesmí se respektive smí se požadavek do SQL vykonat?

Schválně jsem si počkal na tvoji odpověď. Sorry, ale podle toho, co si myslím, nemáš ani špetku logického myšlení a to prostě potřebuješ mít. Přečti si to ještě jednou, potom třeba ještě jednou, slovo po slovu. Tak ještě jednou - pokud se stane nějaká chyba, uloží se do proměnné $iserror hodnota 1. Máš někde ošetřeno, že pokud hodnota $iserror je rovna jedničce, nesmí se SQL dotaz vykonat? Pokud ne, přidělej tam podmínku. A teď už definitivně padám, dobrou noc (snad ji neprobdíš nad tím, žes nepochopil co jsem napsal ;-)).

kdyby sis tohle to vlakno prohlizel jeste jednou , tak sem na to asi prisel
:

takze to :

if($iserror==0){mysql_query("INSERT INTO `831659_users`.`user_info`
          (`username`, `password`, `email`, `user_admin_level`)
          VALUES ('".$username."', '".md5($password)."', '".$email."', '1') ; ") ;

znamena ze pokud nenastane zadna chyba
tak se to posle
ale jestly nastane chyba :

$iserror = 0;

tak mi vyskoci echo : " " .

Pochopil jsem to spravne ? :)

Jo a prosimte mi to jeste 1 zkontroluj neco tam mam blbe ,protoze jak to dam na web tak se nic nedeje ... :D

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

<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'];   
     
   $iserror = 0;
    
    if ( $username=='' ) { // if(!$username) znamena ze pokud promenna vubec neexistuje, tak vypise tu chybu, ale promenna EXISTUJE - definujes ji nahore, plati pro vsechny pripady
      echo "You did not enter a username.<br>";
      $iserror=1;
    } 
    
    if ( $password=='' ) { //tady jsi mel $pasword misto $password
      echo "You did not enter a password.<br>";
      $iserror=1;
    }    
    
    if ( $paswordcofn=='' ) {
      echo "You did not enter a password confirmation.<br>";
      $iserror=1;
    }
      
    if ( $email=='' ) {
      echo "You did not enter email.<br>";
      $iserror=1;
    }
      
    if ( $password != $passwordconf ) {
      echo "The passwords you entered did not match.<br>";
      $iserror=1;
    }

		if($iserror==0) {mysql_query ();("INSERT INTO `831659_users`.`user_info`
          (`username`, `password`, `email`, `user_admin_level`)
          VALUES ('".$username."', '".md5($password)."', '".$email."', '1') ; ") ;
      }
    }
  ?>
  </body>
  </html>

A mockrat ti dekuji ze sis na me udelal cas ..

Néééé, pochopils to úplně blbě :-). Uvědom si, co máš v tom kódu, koukej se na ten kód (dal jsem sem pouze ústřižek):

$iserror = 0;
....
....
....
    if ( $password=='' ) { //tady jsi mel $pasword misto $password
      echo "You did not enter a password.<br>";
      $iserror=1;
    }   

Když nenastane chyba, máš v proměnné $iserror nulu, pokud chyba nastane, máš v proměnné $iserror jedničku a z toho musíš vycházet. Ano, dobře udělal jsi tam tu podmínku if($iserror==0), ale co to je dál za blbost? Co to je

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

Proč tam máš to (); ? Snad to má vypadat takto ne?

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

Hele, poradím ti jednu věc, na tohle se vyflákni a začni hned od začátku. Já začínal podle tohoto tutoriálu (možná není nejlepší, ale je to tam vysvětleno jak pro blbé:
php
Hezky od jedničky až do stovky (101. díl pak pro pobavení :-D), zabere ti to třeba půl roku, ale pak budeš PHP umět možná líp než já. Hlavně nevynechávej, neuděláš další lekce bez dokonalé znalosti předchozích!! A pokud není ani HTML tvá silná stránka, pak doporučím www.jakpsatweb.cz (tam najdeš i základy CSS javascriptu, což budeš taky potřebovat, zvlášť v budoucích pokročilých projektech).

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