質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

3回答

1878閲覧

phpでファイルとの接続が切れません。

Gnr4A

総合スコア30

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/05/18 05:59

編集2021/05/18 06:44

前提・実現したいこと

ファイルを結合して外部ファイルを結合する際、プログラムに書かれていないファイルを結合していました。
top.php→index2.php に飛ばしたいのに top.php→index1.phpに固定で飛んでしまう現象を何とかしたい。
if文より下を消したとしても何故かは知りませんが更新されずに永遠とtop.php→index1.phpに接続されてしまう
※index.phpとindex1.phpのプログラムは以下のコメント欄に載せてあります。

該当のソースコード

top.php
$local='localhost';
$user_name='root';
$pass='';
$db_name='ph23_sample';
$sql='';

$name='';
$age='';

if(empty($name && $age)){ require_once 'index.php'; exit; } $name=$_GET['name']; $age=$_GET['age']; $link=mysqli_connect($local,$user_name,$pass,$db_name); mysqli_set_charset($link,'utf8'); //これがベース!! $sql=$mysqli_query($link,"INSERT INTO sample(name,age)VALUES('".$name."',".$age.")"); mysqli_close($link); // require_once 'index1.php';

試したこと

まずフォルダからindex1.phpファイルを消しました、消したら見つかりませんと言う
エラーが出てきたので接続されています
次に(上記のような)一番下に書かれてあるコメントアウトをしてみたのですがそれでもまだindex1.phpに接続されています。
次にフォルダ名を変更しました。それでもまだ表示部分との接続は切れません。
次にコメントアウトしました。それでも変更と同様に接続が切れません。
次にurlを改めて打ち込んでみました。それでも変更と同様に接続が切れません。
最後にif文の中身以外をすべて消してみました。それでも変更と同様に接続が切れませんでした。

補足情報(FW/ツールのバージョンなど)

バージョンなどもわかりませんが自分はファイルを作り、そこで新規作成し、phpファイルを作りました。そのファイルをVSコードで開きプログラムをしています。
本当にここで1時間以上も詰まっていて先に進めません。誰か詳しい方アドバイスください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

K_3578

2021/05/18 06:01

ソースコードはMarkDownでコードブロック化してご提示ください。 ```PHP ソースコード ``` 上記みたいな感じです。
m.ts10806

2021/05/18 06:09

文章含めておかしいところは多々ありますが >永遠に同じページを行き来しています。 これはどういう現象ですか? あと該当のソースコードのファイル名はなんですか? まさか、自身で自身をrequireしてる?
m.ts10806

2021/05/18 06:10

var_dump する情報も間違ってますね。
退会済みユーザー

退会済みユーザー

2021/05/18 06:21 編集

主語がない文章が混乱を招く。丁寧に説明してくださいね。接続が切れませんを連呼していますが、何を期待していますか?
Gnr4A

2021/05/18 06:23

回答ありがとうございます。すいません。説明不足でした。 <?php if(empty($name && $age)){ require_once 'index.php'; exit; } $name=$_GET['name']; $age=$_GET['age']; $link=mysqli_connect($local,$user_name,$pass,$db_name); mysqli_set_charset($link,'utf8'); //これがベース!! $sql=$mysqli_query($link,"INSERT INTO sample(name,age)VALUES('".$name."',".$age.")"); mysqli_close($link); var_dump($sql); // require_once 'index.php'; ?> が全体図ですね。あとは初期化などしています 永遠に同じページを行き来しています。というのは変更しても変更内容が更新されず永遠にループするということです。つまり $name=$_GET['name']; $age=$_GET['age']; $link=mysqli_connect($local,$user_name,$pass,$db_name); mysqli_set_charset($link,'utf8'); //これがベース!! $sql=$mysqli_query($link,"INSERT INTO sample(name,age)VALUES('".$name."',".$age.")"); mysqli_close($link); var_dump($sql); // require_once 'index.php'; を丸々消したとしてもindex1.phpに接続されてしまいます。index1.phpに接続するような命令が書いていません。 あと説明不足なのでindex.phpとindex1.phpのソースも置いときますね index.php※すべてhtml <form action="index1.php" nethod="get"> <input type="text" name="name"><br> <input type="text" name="age"><br> <input type="submit" value='登録'> </form> index1.php※すべてhtml <p>登録完了</p> また説明不足がありましたら返信してください。
otn

2021/05/18 06:26

何を言ってるのか分からないので、「接続」という単語を使わないで質問を書き直してみてください。
m.ts10806

2021/05/18 06:26

質問は編集できます。
退会済みユーザー

退会済みユーザー

2021/05/18 06:32

ソースコードは、質問文の編集にて反映してください。コメント欄に書かれても見づらい。
退会済みユーザー

退会済みユーザー

2021/05/18 06:34

「index1.phpに接続されてしまいます」の意味がわからない。そもそもどういう状態なのか、接続されてはいけない理由も伝わらないし、いろいろ惜しい。
Gnr4A

2021/05/18 06:45

バージョンは3.2.4です
退会済みユーザー

退会済みユーザー

2021/05/18 06:47

あー、たぶんそれ、XAMPP Control Panelのバージョン表記かな
Gnr4A

2021/05/18 06:50

m.ts10806さんが送ってくれたurlで実行してみた結果7.4.6でした
guest

回答3

0

まさか、これをindex.phpに書いている?

php

1if(empty($name && $age)){ 2require_once 'index.php'; 3 4exit; 5}

$name$ageもこの時点では宣言されていませんし。
本当にこのコードを動かすと、
まず冒頭に「<?php」を書いていないことで書いてあるテキストがそのままwebブラウザに表示される。
じゃぁ、冒頭に「<?php」を補うと「Notice: Undefined variable: name」が出る。

やったことを丁寧に説明してください。
質問者さんがやったこと、遭遇したことが再現できません。
話はそれから。


php

1<?php 2 3 $local = 'localhost'; 4 $user_name = 'root'; 5 $pass = ''; 6 $db_name='ph23_sample'; 7 8 $name = $_GET['name']; 9 $age = $_GET['age']; 10 11 // ホントはここに$nameや$ageの検証処理を置くべき 12 13 $link = mysqli_connect($local, $user_name, $pass, $db_name); 14 mysqli_set_charset($link,'utf8'); 15 16 //これがベース!! 17 $stmt = mysqli_prepare($link, "INSERT INTO sample(name, age) VALUES (?, ?)"); 18 mysqli_stmt_bind_param($stmt, "si", $name, $age); 19 mysqli_stmt_execute($stmt); 20 $row_count = mysqli_stmt_affected_rows($stmt); 21 22 mysqli_close($link); 23 24 header('Location: http://~~~/~~~/index.php'); 25 exit();

みたいな感じ?(あくまで机上のコード)
POSTやGETなどで外部から来た値を直接SQL文文字列に連結しないでくださいね、
今話題のSQLインジェクション攻撃を喰らいますし。

index.phpが入力フォームで、index1.phpがデータベースへの登録処理(のみ)の構造かな。
だとすると、header()関数でリダイレクトさせるような出力をすれば良さそうな気がする。

投稿2021/05/18 06:20

編集2021/05/18 06:43
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gnr4A

2021/05/18 06:26

回答ありがとうございます。 $local='localhost'; $user_name='root'; $pass=''; $db_name='ph23_sample'; $sql=''; $name=''; $age=''; で初期化しています。そのプログラムの上に書いています。 index.phpとindex1.phpのソースは別の回答者の所で説明していますのでそちらを参考にしてください。
guest

0

自己解決

ファイルパスを間違えていました。回答してくれた皆さんありがとうございました。

投稿2021/05/18 07:30

Gnr4A

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/05/18 07:40

なんのファイルに、何を書いているのか、あんまりわかってないので、 それを回答欄に書いたほうがいいんじゃないかな。 あと、SQLインジェクションだけはやめようね。
guest

0

接続を保持してるのはこちらですよね。

php

1var_dump($link);

これと永遠に以下略は別問題なので、require_onceの機能を調べてやりたいことができるかどうかを一考してください。

リダイレクトしたいなら機能選択間違ってますね。

投稿2021/05/18 06:26

m.ts10806

総合スコア80857

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問