2017-03-16 15 views
1

私はここに来て、いろいろな形のコードを勉強し始めました。私はあなたの多くがこのウェブサイトに投稿した役に立つヒントの多くを使用しましたが、私は最終的に私の人生のためにどのように修正するのか分かりません。だから私は皆さんに助けを求めることにしました。それは私にとっては単純な解決策でなければならないようですが、私はそれを見つけることができないので、新鮮な目が助けになるかもしれません。だから、ここで私は誰かが私を助けることができるかもしれないことを願っています。私はカラオケの目的のためにビデオゲームのロックバンドを使用する私の都市でイベントをここで実行するのを助けます。私は 'Artist'と 'Song Title'の2つの列を持つrbn_setlist_smallというテーブル設定を持っています。私は定期的にテーブルに新しい曲を追加する曲を挿入しなければなりません。そこで、テーブルにデータを挿入するためのフォームを作成しました。これは、アーティストと曲のタイトルの2つのフィールドを持つシンプルなフォームです。テスト情報を入力すると(例えば、アーティスト:123、曲名:テスト)、データが入力されたと言われますが、テーブルを確認すると、入力された新しいデータにアーティスト名とタイトルの空白が表示されます。だから私はコンマかどこかに行方不明があると確信していますが、私はそれを見つけることができません。PHPを使ってhtmlフォームからデータをmysqlデータベースのデータテーブルに挿入する

<?php 
/* Attempt MySQL server connection.*/ 
$link = mysqli_connect("host", "user", "pass", "db"); 

/*Check connection*/ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

/*attempt insert query execution*/ 
$query = "INSERT INTO `rbn_setlist_small`(`Artist`, `Song Title`) 

VALUES ('$Artist', '$Song Title')"; 
if ($result = mysqli_query($link, $query)) { 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not execute $sql. " . mysqli_error($link); 
} 

/*close connection*/ 
mysqli_close($link); 
?> 

と、このフォームのHTML::

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>Add Music to Database</title> 
</head> 
<body> 
<form action="insert.php" method="post"> 
    <p> 
     <label for="Artist">Artist:</label> 
     <input type="text" name="Artist" id="Artist"> 
    </p> 
    <p> 
     <label for="Song Title">Song Title:</label> 
     <input type="text" name="Song Title" id="Song Title"> 
    </p> 
    <input type="submit" value="Submit"> 
</form> 
</body> 
</html> 

また、私のコードではどのような援助が、私はスーパー初心者だ高く評価され

これは、フォームのPHPです。 ありがとうございました。

+1

?あなたのコード出力に 'mysqli_error()'は何か出力されますか?また、変数には空白を入れることはできません。データベースに列名をスペースで区切っておくことは悪いことです。代わりにアンダースコアを使用してください。 – Qirel

+0

この '$ Song Title'のような変数を定義することはできません。' $ Song_Title'になる可能性があります。 –

+0

私はフォームに入力されたものが何であれ、間違っているかもしれないと思いました。 データが正しく接続されて追加されるため、エラーは報告されません。追加したいデータだけではありません。 空欄ではなく、列名にアンダースコアを付けるように変更できました。それはそこに行く正しい方法でしょうか? – RSanchez

答えて

0

フォームから値を取得するのを忘れてしまったようです。さて、あなたの$Song Titleは変数ではなく、それは変数で、次にスペースで、文字列 "Title"です。

フォームまたはスペースを含むデータベースに名前を使用しないことをお勧めします。アンダースコアを代わりに使用してください(またはより簡単な名前を選択する)。だから、例えば、あなたの

<input type="text" name="Song Title" id="Song Title"> 

$_POST['Song_Title']とPHPでフェッチすることができ、

代わり
<input type="text" name="Song_Title" id="Song_Title"> 

でなければなりません。それを使ってデータベースに送ることができます。私は、次の改善であなたのコードを変更した:

  • フォームから値をフェッチ、SQLインジェクションに対して
  • を追加しました小切手を保護するためのプレースホルダ(mysqli::prepare)と$_POST
  • 追加パラメータ化クエリを使用して(isset()を)私たちは、フォームが

を送ってきた場合にのみ、上記のポイントは、以下のPHPスニペット

ことになる値を挿入しますトラブルシューティング時あなたは自分のファイルの先頭に

<?php 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 

を追加することで、エラー報告を有効にした場合

/* Attempt MySQL server connection.*/ 
$link = mysqli_connect("host", "user", "pass", "db"); 

/*Check connection*/ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

if (isset($_POST['Artist'], $_POST['Song_Title'])) { 
    if ($stmt = $link->prepare("INSERT INTO `rbn_setlist_small`(`Artist`, `Song Title`) VALUES (?, ?)")) { 
     $stmt->bind_param("ss", $_POST['Artist'], $_POST['Song_Title']); 
     if (!$stmt->execute()) { 
      error_log("Execute failed ".$stmt->error); 
     } else { 
      echo "Data successfully inserted! Artist ".$_POST['Artist']." and song ".$_POST['Song_Title']; 
     } 
     $stmt->close(); 
    } else { 
     error_log("Prepare failed ".$link->error); 
    } 
} 

また、PHPはあなたに正確なエラーを与えるだろう。MySQLiは、通常のMySQLi関数の場合は$link->error、それ以外の場合は$stmt->errorと表示されます($link->prepare()で作成されたオブジェクトに対して呼び出されたオブジェクトの場合)。

参照

+0

クイック返信ありがとうQirel私のコードをあなたのスニペットに置き換えようとしましたが、私がしたら "レコードが正常に追加されました。"コードはこれを言ってくれないので、私はこれを仮定しています。今は空白のページに移動します。また、私はテーブルにデータをチェックするためにそれを追加しませんでした。しかし、私は重要なビットを完全に忘れてしまったのかもしれません。テーブルは実際に3列(id、Artist、Song_Title)ですが、IDカラムは自動インクリメントに設定されていますので、データベースが作成するので、ここに何も挿入する必要はありません。 – RSanchez

+0

id-columnをクエリに指定しないので、実際には問題ありません。コードにエラーがある可能性があるので、私はあなたの回答アドバイスの一番下のようなエラー報告を追加し、ログを読むことをお勧めします。それはあなたに何が間違っているかを正確に伝えるかもしれないそして、いいえ、このコードには元々は正常に挿入されたことを示す何もありませんが、必要に応じて編集します。 – Qirel

+0

また、(mysqli :: prepare)に関する質問はこれについて読んでいましたが、私はそれを読んで特殊文字を止めるので、それに対して決定しました。これは異なるアーティストや曲であるため、時には特殊文字が必要になるのですが、これは間違っていますか? – RSanchez

0

あなたは、変数を定義していませんでした。あなたたいが、上の操作を挿入しない場合

はまた

0

「SONG_TITLE」にあなたのHTMLに「曲名」の名前を変更するPHPコードの先頭付近に

$Artist = $_POST['Artist']; 
    $Song_title= $_POST['Song_title']; 

を追加すると、このPHPコードを試してみてください同じページ

PHPコード

$hostname = "localhost"; //HOSTNAME 
$user = "root"; //USERNAME 
$password = ""; //PASSWORD 
$db_name = "stacky"; //DBNAME 

$conn = new mysqli($hostname,$user,$password,$db_name); 
if(@mysqli_errno($conn)){ 
    echo 'Error:('.mysqli_connect_errno().')'.mysqli_connect_error(); 
} 
if(isset($_POST['btnsubmit'])){ 
    $artist = $_POST['artist']; 
    $song = $_POST['song']; 
    $insert = "INSERT INTO `songs` (`id` ,`artist` ,`song`)VALUES (NULL , '".$artist."', '".$song."');"; 
    mysqli_query($conn,$insert); 
    //header("location:insertdemo.php"); 
} 


HTML CODE 


<html lang="en"> 
    <body> 
     <form method="post"> 
    <p> 
     <label for="Artist">Artist:</label> 
     <input type="text" name="artist" id="Artist"> 
    </p> 
    <p> 
     <label for="Song Title">Song Title:</label> 
     <input type="text" name="song" id="Song Title"> 
    </p> 
    <input type="submit" name="btnsubmit" value="Submit"> 
     </form> 
    </body> 
</html> 

あなたならば、PHP、このPHPコードを試してみてくださいコードが異なるファイルである

PHPコード

$hostname = "localhost"; //HOSTNAME 
$user = "root"; //USERNAME 
$password = ""; //PASSWORD 
$db_name = "stacky"; //DBNAME 

$conn = new mysqli($hostname,$user,$password,$db_name); 
if(@mysqli_errno($conn)){ 
    echo 'Error:('.mysqli_connect_errno().')'.mysqli_connect_error(); 
} 

    $artist = $_POST['artist']; 
    $song = $_POST['song']; 
    $insert = "INSERT INTO `songs` (`id` ,`artist` ,`song`)VALUES (NULL , '".$artist."', '".$song."');"; 
    mysqli_query($conn,$insert); 
    //header("location:insertdemo.php"); 

HTMLコードあなたは `$ Artist`と` $ Song`を定義します

<html lang="en"> 
<body> 
     <form action="phpcodefile" method="post"> 
    <p> 
     <label for="Artist">Artist:</label> 
     <input type="text" name="artist" id="Artist"> 
    </p> 
    <p> 
     <label for="Song Title">Song Title:</label> 
     <input type="text" name="song" id="Song Title"> 
    </p> 
    <input type="submit" name="btnsubmit" value="Submit"> 
     </form> 
    </body> 
</html> 
関連する問題