2015-08-28 101 views
0

有一个脚本,它会ping“ip_address”列中的所有ip地址,我需要在他写在“status”列中的报告之后ping。即如果计算机处于联机状态,在列“状态”写入值1,如果离线数据库设置为0。例:不想将值写入数据库

http://i.stack.imgur.com/BTiAT.jpg

他不想写这个值。这里是我的脚本:

<?php 
include('db.php'); 
foreach($test as $value){ 
    exec("ping -c 4 " . $value->ip_address, $output, $result); 
    if ($result == 0) { 
     $insert_sql = "INSERT INTO test ('status')VALUES('1');"; 
    }else{ 
    $insert_sql = "INSERT INTO test ('status')VALUES('0');"; 
} 
    echo "<br/>" . $insert_sql; 
    } 
?> 

这是发生了什么:

http://i.stack.imgur.com/6vfyu.png

UPD:

<?php 
include('db.php'); 
foreach($test as $value){ 
    exec("ping -c 4 " . $value->ip_address, $output, $result); 
    if ($result == 0) { 
     $insert_sql = "update test set status='1' where ip_addres = '".$value->ip_address."'"; 
     mysqli_query($insert_sql); 
    }else{ 
     $insert_sql = "update test set status='0' where ip_addres = '".$value->ip_address."'"; 
     mysqli_query($insert_sql); 
} 
    } 
?> 

这是正确的?

+1

你必须使用更新不能插入。 – Jens

+0

你能写怎么样? PLS – TriSTaR

+0

'状态'是一个字符串。 'status'是一个列标识符 – Strawberry

回答

0

你必须使用更新的语法:

<?php 
include('db.php'); 
foreach($test as $value){ 
    exec("ping -c 4 " . $value->ip_address, $output, $result); 
    if ($result == 0) { 
     $insert_sql = "update test set status='1' where ip_addres = '".$value->ip_address."'"; 
    }else{ 
     $insert_sql = "update test set status='0' where ip_addres = '".$value->ip_address."'"; 
} 
    echo "<br/>" . $insert_sql; 
    } 
?> 

,不要使用围绕列名的单qoutes。单引号仅用于字符值。如果您必须转义列名称,则必须使用反引号。

+0

谢谢,但是他没有写入底座:( 我不知道为什么 – TriSTaR

+1

@TriSTaR你只能打印语句,你永远不会执行它 – Jens

+0

这是永远不可能写入数据库? 我还是这个区域的新手 – TriSTaR

0

您需要:

  • Initalize一个连接到你的MySQL数据库,使用和地址,用户名和密码(你的情况来netmap.inp.uz)。就像你在HeidiSQL中一样。也许这是在你的db.php文件中完成的。如果不是,请参阅http://php.net/manual/es/function.mysqli-connect.php
  • 而不是(或不是)回显您的查询,您必须使用msqli_query($ insert_sql),即数据库执行执行

现在,您只是将语句发送到输出。

+0

我加了mysqli_query($ insert_sql ),并给出了这个错误: _Message:mysqli_query()期望至少有2个参数,1 given_ – TriSTaR

+0

阅读文档:http://php.net/manual/de/ mysqli.query.php。你必须添加数据库连接作为第一个参数 – Jens

0

这是你的问题的一个样本工作代码试试这个:

$test = array('www.google.com','msn.com','yahoo.com','stackoverflow.com','bhokat.com'); 

var_dump($test); 
foreach ($test as $key => $value) { 
    exec("ping -n 1 $value",$output[],$retval); 
    if (strlen($output[$key][0]) > 0) { 
     $sql = "UPDATE test SET status='1' WHERE ip_address=$value"; 
    } else { 
     $sql = "UPDATE test SET status='1' WHERE ip_address=$value"; 
    } 

    echo "<br/>" ; 
} 

变化更新查询根据自己的需要。如果已经存在其他插入,则需要更新字段,您可以在if和else部分内添加额外的检查。