Veritabanı INSERT yer almaz

5 Cevap php

Aşağıdaki gibi benim kod:

<?php
include("config.php");

$ip=$_SERVER['REMOTE_ADDR']; 

if($_POST['id'])
{
    $id=$_POST['id'];
    $id = mysql_escape_String($id);

    $ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
    $count=mysql_num_rows($ip_sql);

    if($count==0)
    {
        $sql = "update Messages set up=up+1  where mes_id='$id'";
        mysql_query($sql);

        $sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
        mysql_query($sql_in) or die(mysql_error());
        echo "<script>alert('Thanks for the vote');</script>";


    }
    else
    {
        echo "<script>alert('You have already voted');</script>";
    }

    $result=mysql_query("select up from Messages where mes_id='$id'");
    $row=mysql_fetch_array($result);
    $up_value=$row['up'];
    echo "<img src='button.png' width='110' height='90'>";
    echo $up_value;

}
?>

My problem is that the insert process does not take place at all. The script tags echos an alert box. Even the img tag is echoed to the web page. But the insert process does not take place. The config file is fine. Note: This code works on my local machine which has PHP 5.3 but it does not work on the server which has PHP 5.2.

5 Cevap

Tek açıklama $count==0 onay yanlış olmasıdır. Bu geçici çözüm ile deneyin:

$ip_sql=mysql_query("select count(*) from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$rc=mysql_fetch_row($ip_sql);
$count=$rc[0];

yerine:

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);

Eğer tırnak etrafında karıştırmasını denediniz mi? Yanılıyorsam birileri beni düzeltin lütfen, ama AFAIK, tek tırnak içinde değişkenler PHP genişletilmiş alamadım.

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='".$id."' and ip_add='".$ip."'");

Cevaplar ve yorumlarına baktığımızda, eski okul olsun zamanı:

    $sql = "update Messages set up=up+1  where mes_id='$id'";
    echo $sql . '<br>';
    mysql_query($sql);

    $sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
    echo $sql_in . '<br>';
    mysql_query($sql_in) or die(mysql_error());
    echo "<script>alert('Thanks for the vote');</script>";

Ne arıyorsun?

Sen $ id $ ve ip boyunca değerleri koyarak - belki bunlardan biri boş ya da bir şekilde "garip" sonucunu yapıyor bir karakter içeriyor. Bunun değişken parçaları üzücü şeyler eğer çalıştırmak üzeresiniz ham sorgu iyi bir göz alarak, görürsünüz.

İlk sorgu başarılı eğer kontrol etmiyoruz:

$ip_sql=mysql_query("select ip_add from Voting_IP where mes_id_fk='$id' and ip_add='$ip'");
$count=mysql_num_rows($ip_sql);

Orada hiçbir ... or die(mysql_error()) var, ama sorgu başarısız ise zaman yok mysql_num_rows(), "Geçersiz ifadesi kolu" tür hatası almak istiyorum çünkü bu, büyük olasılıkla değil sorun sonra hemen arayın. Bir üslup ipucu olarak, aşağıdaki gibi ilk sorguyu yeniden öneririm:

SELECT COUNT(*) FROM Voting_IP
WHERE (mes_id_fk = $id) AND (ip_add = $ip)

Sen alınan verilerin, sadece satır sayısı herhangi birini kullanarak değil, bu nedenle tüm olası değerleri hakkında en az BAZI işlem yapmak için veritabanı zorlayan bir "select *" türü bir sorgu, yapmanın hiçbir anlamı yok. Bu sistem sayısı kullanılarak, oy ve IP'lerin çok sayıda ölçekler ise () sürümü daha verimli olacaktır.

Sen insert yer almaz söylüyorlar, ama demek ki, alert() oluştuğu söylemiyorum orada insert sorgusu ile bir hata var, ya da ilk sorgu 0 döndürür, ve insert ile tüm blok ya Sorgu atlanır.

Eğer güncelleme / insert sorguları çalıştıran elle denediniz mi? Güncelleştirme başarılı olursa or die(mysql_error()) sonra orada gibi, kontrol etmiyorsunuz. Belki vb bir yabancı anahtar bir hata, bir sözdizimi hatası var, ..

Bir kimliği dayalı bir giriş güncelleştirmek istiyorsanız, o zaman tabii ki sayısı sıfır değil zaman güncellemek ve eklemek istediğiniz .... veya sıfırdan büyük .. ya da 1

Basitçe == 0 yaptırmayı, bunu düzeltmek gerekir

if($count)
{
    $sql = "update Messages set up=up+1  where mes_id='$id'";
    mysql_query($sql);

    $sql_in = "insert into Voting_IP (mes_id_fk,ip_add) values ('$id','$ip')";
    mysql_query($sql_in) or die(mysql_error());
    echo "<script>alert('Thanks for the vote');</script>";


}