2012-01-03 9 views
0

を動作しません、私は動作しません。しかし、送信私のウェブサイト上でPMシステムを作成しようとしています...MySQLの「INSERT」

ここでは私のコードです:

<?php 
$from = $_POST['from']; 
$to = $_POST['to']; 
$content = $_POST['content']; 
$date = date("Y-n-j H:i:s"); 
$id = rand(0000,9999); 

include('sql_connect.php'); 
mysql_query("INSERT INTO pm (`from`, `to`, `content`, `date`, `id`) VALUES ('".$from."', '".$to."', '".$content."', '".$date."', '".$id."')"); 
mysql_close($con); 
header('Location: members.php?sent'); 
?> 

誰かが教えてもらえますなぜ私はそれが動作しません?

編集:私はbacktitsを追加しましたが、結果はこれです:

NULL 
Warning: Cannot modify header information - headers already sent by (output started at /home/quebecen/public_html/new/do_pm.php:10) in /home/quebecen/public_html/new/do_pm.php on line 15 

EDIT 2:私は)($ QUEのするmysql_queryの前に結果を追加(私はそれを忘れてしまった)、今、私はこのコードを持っている:

<?php 
$from = $_POST['from']; 
$to = $_POST['to']; 
$content = $_POST['content']; 
$date = date("Y-n-j H:i:s"); 
$id = rand(0000,9999); 

include('sql_connect.php'); 
$result = mysql_query("INSERT INTO pm (`from`, `to`, `content`, `date`, `id`) VALUES ('".$from."', '".$to."', '".$content."', '".$date."', '".$id."')", $con); 

var_dump($result); 

if(!$result) { 
    echo mysql_error(); 
} 

mysql_close($con); 
header('Location: members.php?sent'); 
?> 
+0

Webサーバーのエラーログに役立つ情報はありますか? –

+0

残念ながら、いいえ。 –

+4

このコードはたくさんのSQLインジェクション可能です –

答えて

0

あなたがヘッダを追加しようと、バッファ&を出力するため、エラー、あなたが取得です。 (これは、単一のスペースかキャリッジリターンか、エラーメッセージの場合はその自己になりますが、あなたの場合はvar_dumpです)。また、あなたが ポスト変数をエスケープないから、SQLインジェクションの脆弱性を持って、私はあなたが機能のmysql_ *家族を忘れ示唆してPDOに移動しない書類を作成:

<?php 
//Start a session to hold the status 
session_start(); 
try { 
    $dbh = new PDO("mysql:host=localhost;dbname=yourDB", 'dbUser', 'dbPass'); 

    /*** set the error reporting attribute ***/ 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    /*** some variables ***/ 
    $from = $_POST['from']; 
    $to = $_POST['to']; 
    $content = $_POST['content']; 
    $date = date("Y-n-j H:i:s"); 

    $id = rand(0000,9999); //? This is wrongly implemented if you want a uniqie id, you should be using the AUTO INCREMENT value 

    /*** prepare the SQL statement ***/ 
    $stmt = $dbh->prepare("INSERT INTO pm (`from`, `to`, `content`, `date`, `id`)VALUES(:from, :to, :content, :date, :id)"); 

    /*** bind the paramaters ***/ 
    $stmt->bindParam(':id', $id, PDO::PARAM_INT); 
    $stmt->bindParam(':from', $from, PDO::PARAM_STR, strlen($from)); 
    $stmt->bindParam(':to', $to, PDO::PARAM_STR, strlen($to)); 
    $stmt->bindParam(':content', $content, PDO::PARAM_STR, strlen($content)); 
    $stmt->bindParam(':date', $date, PDO::PARAM_STR, strlen($date)); 


    /*** execute the prepared statement ***/ 
    $stmt->execute(); 
    /*** close the database connection ***/ 
    $dbh = null; 

    //Set as sent, redirect to members cleanly and then check session var is true 
    $_SESSION['sent']=true; 
    header('Location: ./members.php'); 
} 
catch(PDOException $e) 
{ 
    //Something went wrong 
    $_SESSION['sent']=false; 
    //You should log this error, and not output any internal errors to the user, just advise them something went wrong. 
    error_log("FATAL MSG ERROR:".$e->getMessage(), 3, "/home/quebecen/logs/my-errors.log"); 

    header('Location: ./members.php'); 
} 
?> 
0

クエリが終了していないことを確認してください。

​​

また、正しい接続を使用していない可能性があります。 $conmysql_queryに追加する必要があります。

mysql_query("...", $con); 
+0

私は試してみました: –

+0

NULL SQL構文に誤りがあります。 ( 'test'、 '113589'、 'kbnsrtnsrnrynynynswry'、 'at line 1) 警告:ヘッダ情報を変更することはできません - 彼すでに送信された広告主(出力は/home/quebecen/public_html/new/do_pm.php:10で開始されました)/home/quebecen/public_html/new/do_pm.php 15行 –

+0

'$ dateに間違っているようです'。あなたはクエリの直前にそれをエコーすることができますか? – letuboy

0

1)ヘッダすでに送信エラーはかなり明白です、ヘッダを(使用する前に、何かをエコーし​​ません)ので、コードは次のようになります。

if(!$result) { 
    echo mysql_error(); 
    mysql_close($con); 
} else { 
    mysql_close($con); 
    header('Location: members.php?sent'); 
} 

2)を使用してみてください$date = date("Y-m-d H:i:s");

0

警告:ヘッダー情報を変更することはできません - すでに(OUTPにより送信されたヘッダをあなたが/home/quebecen/public_html/new/do_pm.php:10で始まった/home/quebecen/public_html/new/do_pm.php 15行目

ヘッダー機能を使用する場合は、その機能の前にhtmlの内容が表示されることはありません。

さらに、ob_start()を使用できます。あなたのページのリダイレクトまたは最初の行の前に機能します。

希望します。

0

この問題は、使用しているウェブオーサリングツールによって発生している可能性があります。

次のようにしてください。

  1. ファイル名をどこかにコピーします。そしてあなたのファイルをバックアップしてください。

  2. は、++(単なるテキストエディタ)をメモ帳やメモ帳を使用して、新しいPHPファイルを作成し、既存のファイルを削除します。それを以前のファイル名に変更します。

  3. テキストエディタを使用してコードをファイルにコピーします。空白のない<?php?>に正確にコピーします。

はあなたが<?php前に空白がないことを確認してください。