1. Nelíbí se ti reklamy? Zaregistruj se a přihlaš se na fóru!

Dotaz Whitelist - webový formulář

Vlákno v 'Obecná diskuze' založil Jdinaparek 15. ledna 2013.

  1. Jdinaparek

    Jdinaparek Registered

    Offline
    Registrován:
    22. ledna 2012
    Zdravím,
    na našem serveru máme zapnutý whitelist (nicky jsou uložené v MySQL databázi). Potřeboval bych poradit, jak vytvořit formulář, kde by bylo cca 10 otázek, které když by hráč vyplnil správně, automaticky by ho tento formulář přidal do MySQL databáze (v podstatě stejný formulář jak je na majncraft.cz). Web i MySQL běží na stejném stroji. Na internetu jsem nenašel žádné "free" formuláře (pouze jeden, ale ten byl dělán pro servery na fakaheda.eu a já nejsem v PHP tak zdatný, abych ho upravil). Tímto bych Vás tedy chtěl poprosit, jestli by jste mi neporadili, kde nějaký takový formulář najdu, nebo jak ho udělat přes PHP. Předem děkuji za odpověď
     
  2.  
  3. Amunak

    Amunak Worldedit Trollmasta

    Offline
    Registrován:
    11. února 2011
    Bojím se, že si formulář budeš muset napsat sám (nebo někomu zaplatit ať ti ho napíše). Pro nejjednodušší formulář můžeš mít něco jako:

    HTML:
    <form method="post" action="pridat.php">
      <input type="text" name="nick">
     
      <fieldset>
      <legend>Otázka jedna</legend>
    	<label><input type="radio" name="o[1]" value="1">Odpověď 1</label>
    	<label><input type="radio" name="o[1]" value="2">Odpověď 2 (správná)</label>
    	<label><input type="radio" name="o[1]" value="3">Odpověď 3</label>
      </fieldset>
      <fieldset>
      <legend>Otázka dva</legend>
    	<label><input type="radio" name="o[2]" value="1">Odpověď 1 (správná)</label>
    	<label><input type="radio" name="o[2]" value="2">Odpověď 2</label>
    	<label><input type="radio" name="o[2]" value="3">Odpověď 3</label>
      </fieldset>
      <fieldset>
      <legend>Otázka tři</legend>
    	<label><input type="radio" name="o[3]" value="1">Odpověď 1</label>
    	<label><input type="radio" name="o[3]" value="2">Odpověď 2 (správná)</label>
    	<label><input type="radio" name="o[3]" value="3">Odpověď 3</label>
      </fieldset>
     
      <input type="submit" value="Odeslat test" name="submit">
    </form>
    a v pridat.php bys pak měl něco jako tohle (pro přípojení k databázi používám dibi):

    PHP:
    <?php
    /* nastavení */
    $spravneOdpovedi = array(
      
    => 2,
      
    => 1,
      
    => 2,
    );
    define('minimumProPridani'3);
     
    $dibiOptions = array(
        
    'driver'  => 'mysql',
        
    'host'    => 'localhost',
        
    'username' => 'minecraft',
        
    'password' => '***',
        
    'database' => 'minecraft',
    );
     
    /* níže neupravovat */
    require 'dibi.php';
    $spravnychOdpovedi 0;
     
    if(isset(
    $_POST['nick']) && haspaid($_POST['nick']) && isset($_POST['submit']))
    {
      foreach(
    $_POST['o'] as $cisloOtazky => $odpoved)
      {
        if(
    $spravneOdpovedi[$cisloOtazky] === $odpoved)
          
    $spravnychOdpovedi++;
      }
      if(
    $spravnychOdpovedi >= minimumProPridani)
      {
        
    dibi::connect($dibiOptions);
        
    dibi::query('INSERT INTO [whitelist]', array('nick'=>$_POST['nick]));
      }
    }
    Dibi stáhneš na dibiphp.com.

    Dibi se postará o escapování a všechno týkající se databáze. Další otázky vytvoříš jen nakopírováním a zvednutím čísla otázky (u odpovědí to o[cislo]) a musíš pak taky přidat číslo správně odpovědi do odpovědí. Tady je jen problém v tom, že nejsou náhodně ani otázky ani odpovědi, takže když ti někdo někam napíše výsledky, jsi v háji. Ale odpovědi by šlo snadno randomizovat ( ikdyž by to pak stejně nebylo stroprocentní, ale na oko ano), ale kdybys to chtěl tak složité jako to máme u nás, tak to je na mnohem delší kód.

    Jo a funkce haspaid() je hypotetická funkce která kontroluje, jestli je uživatel premium. Pokud máš online-mode=true, tak je to jedno, ale předejde to spamům.
     
    • Líbí Líbí x 1

Sdílej tuto stránku