Javascript Kullanma Veritabanı güncelleniyor

3 Cevap php

Umarım bu ben bu konuda sormak gerekiyor son soru olacak .. lol .. Ben (lol. Hopefully.) çok çalışma çözümün olamaz. Bu soruya referans olarak:

Pass data to database using javascript Onclick

Ben veritabanı kullanarak javascript bir değer geçmek için çalışıyorum. Aşağıda ben kullanıyorum kodudur. Ve sadece görsel yardım için, Ive bu çıktılar ne bir ekran dahil. Umarım o da başarmak için çalışıyoruz im ne açıklamaya yardımcı olacaktır. Olan sorun im javascript "Oy" bağlantısını hemen hemen hiçbir şey yok olduğunu ... lol ... u tıklayın, ve hiçbir şey olmuyor. Tercihen ben sadece değiştirmek için bağlantılar metni istiyorum "Siz oy!" link tıklandığında olmuştur ve veri ve aldıkları / gönderilen, ancak bir uyarı sürece ben bu veritabanını çalışmak ve güncellemek için almak gibi, iyi olacak bir kere.

Herkese teşekkürler :)

    <?php if(isset($_POST['score'])) {

mysql_query("INSERT INTO score (score_count) VALUES ($_POST[score])");
    }    			$user_id = uid();
        		$m = mysql_query("SELECT * FROM friends WHERE friend_user_id1 = '$user_id' AND friend_status != '0' LIMIT 15");
        		while ($t = mysql_fetch_array($m))
        		{
        				$fid = $t[friend_user_id2];
        				$f = mysql_query("SELECT * FROM users WHERE user_status != '' AND user_status_date != '0' AND user_id = '$fid' ORDER BY user_status_date ASC LIMIT 15") or die(mysql_error());

        				while ($rows = mysql_fetch_array($f))
        				{
    $date = parse_date($rows[user_status_date]);
        						echo "<div style='margin: 5px;'><table><tr><td valign='top' style='width:55px;'><a href='page.php?id=$rows[user_username]'>";
        						_photo($rows[user_id]);
        						echo '</a></td><td valign="top"> <a href="page.php?id='.$rows[user_username].'" class="blue"><b>'.$rows[user_username].'</b></a> - <span style="font-size:7pt;">'.$date.'</span><span style="font-size:7pt;"> - <a href="javascript:(void);" onclick="updateScore(this, correct)" class="blue">Vote</a></span>
    <br />'.$rows[user_status].'</td><td valign="top"></td></tr></table></div>';
        				}
        		}
     ?>

    <script type="text/javascript">
    function updateScore(answer, correct) {
      if (answer == correct) {
    $.get('index.php', {'score': '1'}, function(d) {
        alert('Vote Accepted: ' + d);
    });

      }
    }

    </script>

Çıkışlar:

alt text

3 Cevap

Vay be, ben başlarım. Tamam, ben kodunuzu kadar sabit. İşte değişikliklerin bir listesi

  1. Okunabilirliği için biçimlendirilmiş kodu (burada bazı ciddi disiplin gerekir)
  2. Sorgularda onları kullanmadan önce dezenfekte girdiler (SQL enjeksiyonu önler)
  3. Ilişkisel dizi anahtarı aramalarını ilave dize sınırlayıcı (E_NOTICE hatalarını önler)
  4. HTML olarak yazdırmadan önce tehlikeli değerleri kaçtı (XSS engeller)
  5. Kaldırılan garip echo tablolar ve büyük çıkış dizeleri yerine HTML moduna değiştirildi
  6. Eğer script üstündeki $_POST dizi okunan beri javascript $.post() yerine $.get() kullanımı güncellendi.

İşte kod:

<?php

if ( isset( $_POST['score'] ) )
{
    $result = mysql_query( "INSERT INTO score (score_count) VALUES (" . mysq_real_escape_string( $_POST['score'] ) . " )" );
    echo $result ? 'Vote Succeeded' : 'Vote Failed: ' . mysql_error();
    exit;
}

$user_id = mysql_real_escape_string( uid() );
$m = mysql_query( "SELECT * FROM friends WHERE friend_user_id1 = '$user_id' AND friend_status != '0' LIMIT 15" );

while ( $t = mysql_fetch_array( $m ) )
{
    $fid = mysql_real_escape_string( $t['friend_user_id2'] );
    $f = mysql_query( "SELECT * FROM users WHERE user_status != '' AND user_status_date != '0' AND user_id = '$fid' ORDER BY user_status_date ASC LIMIT 15" ) or die ( mysql_error() );

    while ( $rows = mysql_fetch_array( $f ) )
    {
        $date = parse_date( $rows['user_status_date'] );
        ?>
        <div style="margin: 5px;">
            <table>
                <tr>
                    <td valign="top" style="width:55px;">
                        <a href="page.php?id=<?php echo escapeForHtml( $rows['user_username'] ); ?>">
                            <?php _photo( $rows['user_id'] ); ?>
                        </a>
                    </td>
                    <td valign="top">
                        <a href="page.php?id=<?php echo escapeForHtml( $rows['user_username'] ); ?>" class="blue">
                            <b><?php echo escapeForHtml( $rows['user_username'] )?></b>
                        </a> - <span style="font-size:7pt;"><?php echo escapeForHtml( $date )?></span>
                        <span style="font-size:7pt;"> - <a href="javascript:;" onclick="updateScore(this)" class="blue">Vote</a></span>
                        <br /><?php echo escapeForHtml( $rows['user_status'] ); ?></td><td valign="top">
                    </td>
                </tr>
            </table>
        </div>
        <?php 
    }
}

function escapeForHtml( $value )
{
    return htmlspecialchars( $value, ENT_COMPAT, 'UTF-8' );
}

?>

<script type="text/javascript">

function updateScore(answer, correct)
{
    if (answer == correct)
    {
        $.post('index.php', {'score': '1'}, function(d)
        {
            alert('Vote Accepted: ' + d);
        });
    }
}

</script>

Ben bütün bu bitti sonra, ben sonra açıkça aslında gerçekleşecek POST için başarı durumu benim için bilinmeyen olduğunu görebiliyordu. Sen answer correct karşılaştırmak ama bu kod parçacığı correct nereden geldiğini görmeme izin vermez. Bir kez updateScore() işlev içinde bunu görebiliyorum answer tıklanan HTMLAnchorElement bir referans - ama correct içine gönderilen değeri için kaynak nedir?

Spesifik olmak gerekirse, ben burada bu kalın bölümü hakkında alıyorum

onclick = "updateScore (bu, correct)"

Edit!

Başarılı bir oylamadan sonra bağlantıyı güncellemeleri sizin fonksiyonunun bir sürümü için bu deneyin

<script type="text/javascript">

function updateScore( answer )
{
    if ( confirm( "Are you sure?" ) )
    {
        $.post('index.php', {'score': '1'}, function(d)
        {
            alert('Vote Accepted: ' + d);
            $(answer).after("<span>You Voted!</span>").remove();
        });
    }
}

</script>

Ilk şey, JavaScript kodu size $.get ile Ajax isteği yapıyoruz, fark ve PHP kodu, beklediğiniz bir POST değişkeni if(isset($_POST['score'])).

Eğer sunucu tarafında POST değişkenleri kullanırsanız Yani, $.post istemci tarafında kullanmanız gerekir.

Sen girişleri sterilize değiliz. Herkes, sizin app veya kullanarak, size bir "puan" gönderebilir, ve kaygısızca kendi veritabanında koyacağım. "; Burada bazı saldırı; skoru (score_count) değerleri (2 takın 1)" Yoksa onlar gibi kolayca dize puanı ile göndererek, bir SQL enjeksiyonu saldırısı gönderebilir;