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

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

ただいまの
回答率

88.04%

PHP switch breakについて

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,012

score 52

edit3.phpの

        case 'insert' :
            if (empty ( $_REQUEST ['name'] ) || ! preg_match ( '/[0-9]+/', $_REQUEST ['price'] ))
                break;
            $sql = $pdo->prepare ( 'insert into product values(null,?,?)' );
            $sql->execute ( array (
                    htmlspecialchars ( $_REQUEST ['name'] ),
                    $_REQUEST ['price']
            ) );

この部分の
if(empty($_REQUEST['name']) || !preg_match('/[0-9]+/', $_REQUEST['price']))
break;
このbreakって、もし$_REQUEST['name']の値が空または$_REQUEST['price']の値が数字じゃなかったら処理を中断して、
$sql = $pdo->prepare ( 'insert into product values(null,?,?)' );
$sql->execute ( array (
htmlspecialchars ( $_REQUEST ['name'] ),
$_REQUEST ['price']
) );
は通らないという意味でしょうか。
if(empty($_REQUEST['name']) || !preg_match('/[0-9]+/', $_REQUEST['price']))以外だったら
$sql = $pdo->prepare('insert into product values(null,?,?)' );
$sql = execute(array(htmlspecialchars($_REQUEST['name']),$_REQUEST['price']));
を実行するという意味でしょうか。

<?php require 'header.php'; ?>
<table>
    <tr>
        <th>商品番号</th>
        <th>商品名</th>
        <th>商品価格</th>
    </tr>
<?php
$pdo = new PDO ( 'mysql:host=localhost;dbname=shop;charset=utf8', 'staff', 'password' );
if (isset ( $_REQUEST ['command'] )) {
    switch ($_REQUEST ['command']) {
        case 'insert' :
            if (empty ( $_REQUEST ['name'] ) || ! preg_match ( '/[0-9]+/', $_REQUEST ['price'] ))
                break;
            $sql = $pdo->prepare ( 'insert into product values(null,?,?)' );
            $sql->execute ( array (
                    htmlspecialchars ( $_REQUEST ['name'] ),
                    $_REQUEST ['price']
            ) );
            break;
        case 'update' :
            if (empty ( $_REQUEST ['name'] ) || ! preg_match ( '/[0-9]+/', $_REQUEST ['price'] ))
                break;
            $sql = $pdo->prepare ( 'update product set name=?, price=? where id=?' );
            $sql->execute ( array (
                    htmlspecialchars ( $_REQUEST ['name'] ),
                    $_REQUEST ['price'],
                    $_REQUEST ['id']
            ) );
            break;
        case 'delete' :
            $sql = $pdo->prepare ( 'delete from product where id=?' );
            $sql->execute ( array (
                    $_REQUEST ['id']
            ) );
            break;
    }
}
foreach ( $pdo->query ( 'select * from product' ) as $row ) {
    echo '<tr>';
    echo '<form action="edit3.php" method="post">';
    echo '<input type="hidden" name="command" value="update">';
    echo '<input type="hidden" name="id" value="', $row ['id'], '">';
    echo '<td>', $row ['id'], '</td>';
    echo '<td>';
    echo '<input type="text" name="name" value="', $row ['name'], '">';
    echo '</td>';
    echo '<td>';
    echo '<input type="text" name="price" value="', $row ['price'], '">';
    echo '</td>';
    echo '<td><input type="submit" value="更新"></td>';
    echo '</form>';
    echo '<form action="edit3.php" method="post">';
    echo '<input type="hidden" name="command" value="delete">';
    echo '<input type="hidden" name="id" value="', $row ['id'], '">';
    echo '<td><input type="submit" value="削除"></td>';
    echo '</form>';
    echo '</tr>';
    echo "\n";
}
?>
<tr>
        <form action="edit3.php" method="post">
            <input type="hidden" name="command" value="insert">
            <td></td>
            <td><input type="text" name="name"></td>
            <td><input type="text" name="price"></td>
            <td><input type="submit" value="追加"></td>
        </form>
    </tr>
</table>
<?php require 'footer.php'; ?>
<?php require 'header.php'; ?>
<table>
<tr><th>商品番号</th><th>商品名</th><th>商品価格</th></tr>
<?php
$pdo=new PDO('mysql:host=localhost;dbname=shop;charset=utf8',
    'staff', 'password');
foreach ($pdo->query('select * from product') as $row) {
    echo '<tr>';
    echo '<form action="edit3.php" method="post">';
    echo '<input type="hidden" name="command" value="update">';
    echo '<input type="hidden" name="id" value="', $row['id'], '">';
    echo '<td>', $row['id'], '</td>';
    echo '<td>';
    echo '<input type="text" name="name" value="', $row['name'], '">';
    echo '</td>';
    echo '<td>';
    echo '<input type="text" name="price" value="', $row['price'], '">';
    echo '</td>';
    echo '<td><input type="submit" value="更新"></td>';
    echo '</form>';
    echo '<form action="edit3.php" method="post">';
    echo '<input type="hidden" name="command" value="delete">';
    echo '<input type="hidden" name="id" value="', $row['id'], '">';
    echo '<td><input type="submit" value="削除"></td>';
    echo '</form>';
    echo '</tr>';
    echo "\n";
}
?>
<tr>
<form action="edit3.php" method="post">
<input type="hidden" name="command" value="insert">
<td></td>
<td><input type="text" name="name"></td>
<td><input type="text" name="price"></td>
<td><input type="submit" value="追加"></td>
</form>
</tr>
</table>
<?php require 'footer.php'; ?>
<?php require 'header.php'; ?>
<table>
<tr><th>商品番号</th><th>商品名</th><th>商品価格</th></tr>
<tr>
<form action="edit3.php" method="post">
<input type="hidden" name="command" value="insert">
<td></td>
<td><input type="text" name="name"></td>
<td><input type="text" name="price"></td>
<td><input type="submit" value="追加"></td>
</form>
</table>
<?php require 'footer.php'; ?>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+3

質問者様の理解で合っています。
if分は括弧が無い場合、次の1文の命令のみが対象になります。

ご提示頂いたコードは以下と同じです。

        case 'insert' :
            if (empty ( $_REQUEST ['name'] ) || ! preg_match ( '/[0-9]+/', $_REQUEST ['price'] )) {
                break;
            }
            $sql = $pdo->prepare ( 'insert into product values(null,?,?)' );
            $sql->execute ( array (
                    htmlspecialchars ( $_REQUEST ['name'] ),
                    $_REQUEST ['price']
            ) );

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/20 17:24

    なるほど。やっとわかりました。
    すっきりしました!
    一行しか実行されないことに気づいていませんでした。
    ご迷惑をお掛けして申し訳ございません。
    ありがとうございました。

    キャンセル

  • 2017/02/20 17:33

    解決したようで何よりです!

    キャンセル

  • 2017/02/20 17:33

    本当にありがとうございました。

    キャンセル

0

SQL実行処理は通らないという意味です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る