2016-10-11 3 views
2

コメント行のコメントを外すと、以下のコードはうまく動作しますが、コメント行を含めると何も表示されない理由はわかりません。あなたの時間と援助をありがとう。私のコメント行を含めると結果は表示されません

電話番号が検索されるたびにチェックするコードが必要です。自動的にテーブル「ノート」が期限切れに更新され、登録が既に期限切れになっていることがわかります。

<?php 

include_once('assets/inc/db_login.inc'); 
session_start(); 

if($_SERVER["REQUEST_METHOD"] == "POST"){ 

if(empty($_POST["phone"])) { 
    $unameErr = "Phone is required"; 
} 
else { 
    $phone = clean_input($_POST["phone"]); 
} 
} 

$check = sql_entry($phone); 

/* Functions */ 

function clean_input($login){ 

$login = trim($login); 
$login = stripslashes($login); 
$login = htmlspecialchars($login); 

return $login; 

} 

function sql_entry($phone){ 

//do not touch anything beyond this part 
$conn = mysqli_connect(DB_HOST,DB_USERNAME,DB_PASSWORD,DB_NAME); 

//error catcher for connection failure 
if($conn->connect_error){ 
    die("Connection failed: " . $conn->connect_error); 
} 

//clean themmmmmm! 
$clean_phone = mysqli_real_escape_string($conn, $phone); 

//prepare queries 
$verification = "SELECT * FROM ".DB_TBL." WHERE phone = ".$clean_phone; 
$verification_result = mysqli_query($conn,$verification); //run query to validate phone number 

/* 

$row = mysqli_fetch_array($verification_result, MYSQLI_ASSOC); 

$startdate = $row['register_date']; 
$expire = strtotime($startdate. ' + 182 days'); 
$today = strtotime("today midnight"); 

if($today >= $expire){ 
$update = "UPDATE ".DB_TBL." SET notes='Expired' WHERE phone = ".$clean_phone; 
$run_update = mysqli_query($conn,$update); 
} 

*/ 

return $verification_result; 
} 

?> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title> - | User Registration</title> 

<link rel="stylesheet" type="text/css" href="styles.css" /> 

</head> 

<body> 
    <center><br> 
    <br> 
    <br> 
    <br> 
    <br> 
    <br> 
    <table width="500", cellpadding=5 callspacing=5 border=1> 
    <tr> 
     <th>Name</th> 
     <th>Register Date</th> 
     <th>Phone</th> 
     <th>Points</th> 
     <th>Note</th> 
    </tr> 

    <?php while($rows = mysqli_fetch_array($check, MYSQLI_ASSOC)): ?> 
     <tr> 
      <td><?php echo $rows['username']; ?></td> 
      <td><?php echo $rows['register_date']; ?></td> 
      <td><?php echo $rows['phone']; ?></td> 
      <td><?php echo $rows['points']; ?></td> 
      <td><?php echo $rows['notes']; ?></td> 
     </tr> 
    <?php endwhile; ?> 
    </table> 
    </center> 
</body> 
</html> 
+0

死の白い画面:エラーチェック\表示がオフで、エラーを表示するにはそれらをオンにします。 PHPページの最上部に次の行を追加します: 'ini_set( 'display_errors'、 'On'); ini_set( 'html_errors'、0); error_reporting(-1); ' – nogad

+0

こんにちは、それは私がコメントしたコードのブロックをコメント解除すると、私は完璧に実行されます、それはもう何も出力を表示しません。 コメント:http://prntscr.com/cscsov コメントを外してください:http://prntscr.com/cscsww 注:既に提供しているコードを追加しました。エラー表示はありません。コードブロックにコメントする限り、意図したとおりに動作します。 –

+0

ok出力は出力されません。出力は明らかです。 – nogad

答えて

0

コメント部分の前に次の行を追加します。

$verification_result_clone = clone($verification_result); 

$row = mysqli_fetch_array($verification_result_clone, MYSQLI_ASSOC); 

UPDATEと

$row = mysqli_fetch_array($verification_result, MYSQLI_ASSOC); 

を置き換える:

mysql_resultクラスがクローン可能でないことはわかりませんでした。そのために残念。

さて、私はあなたのクエリを2回実行すべきだと思います。これを試してみてください:

上記の私の答えから

$verification_result_clone = mysqli_query($conn,$verification); 

$verification_result_clone = clone($verification_result); 

を交換してください。それは今働くはずです。

+0

こんにちは@人、私はあなたが提案したものを試して、私は次のエラーがあります。 '致命的なエラー:未知のエラー:C:\ xampp \ htdocs \ testing \ sql.phpのクラスmysqli_resultのクローン不可能なオブジェクトを複製しようとしています:49スタックトレース:#0 C:\ xampp \ htdocs \ testing \ sql.php (18):sql_entry( '7083281100')#1 {main}はC:\ xampp \ htdocs \ testing \ sql.php 49行目に投げた ' –

+0

@CyanHijirikawa私は自分の答えを更新しました。 – someone

1

結果セットを再度巻き戻すことができるように、結果セットをリワインドするか、1回の反復で表示と更新の両方のデータ構造を構築する必要があります(実際にはクエリのDB使用条件からデータを取り出さずに更新できます)。巻き戻しにはコードの変更が少なくて済みます。コメント部分の最後にこれを追加するだけです。

mysqli_data_seek($verification_result, 0); 

Btw。 UPDATEは、最初に返された行のみで動作し、後で結果がさらに多くなるように反復しようとします。その場合(巻き戻しなし)、最初に更新して残りの部分を表示します。

+0

これは私の答えよりも優れています。 +1 – someone

関連する問題