簡體   English   中英

PHP和MySQL中的多個輸入字段搜索不起作用

[英]Multiple input field search in PHP and MySQL not working

我必須在一個搜索中輸入多個輸入(成對輸入):例如:

1 Vorname and Strasse
2 Nachname and Strasse
3 Vorname and Email
4 Nachname and Email
5 Only Vorname
6 Only nickname
7 Only email
8 Vorname, Nachname, and Strasse
9 Vorname, Nachname, and Email
10 like that all separately and together

我在下面的代碼中執行了此操作,但對於上述條件不起作用。 有人在這里幫助我使用PHP / MySQL。 真的很感激

PHP代碼:

if(isset($_POST['submit']) ){

    if(isset($_POST['text1'], $_POST['text7'])){
        // we got both vorname and ort 

        $statement= $myconnection->prepare(
                "SELECT * FROM OL_trans WHERE vorname = ? AND ort = ? OR nachname = ? OR strasse = ? OR email = ?");

        $statement->execute( [$_POST['text1'], $_POST['text7'], $_POST['text2'],$_POST['text8'], $_POST['text3']] ); 

    }
    else{
        if(isset($_POST['text1'])){
            // vorname
            $statement= $myconnection->prepare(
                "SELECT * FROM OL_trans WHERE vorname = ?");

            $statement->execute( [$_POST['text1']] ); 
        }
        if ( isset($_POST['text7'] )) {
            // ort 
            $statement= $myconnection->prepare(
                "SELECT * FROM OL_trans WHERE ort = ?");

            $statement->execute( [$_POST['text7']] ); 
        }
    }
    // generate the output
    $rows = $statement->fetchAll(); 

    foreach($rows as $row){ 
            echo '<br/>'.$row['vorname'].
           ' - '.$row['nachname'].

           ' - '.$row['strasse'].
           ' - '.$row['plz'].
           ' - '.$row['ort'].
           ' - '.$row['email'].
           ' - '.$row['telefon'].
           ' - '.$row['mobil'].'<br/><br/>';
           }    
}

HTML代碼:

<form method="post" action="sample.php">
    <br><br>
<br><br>
    <!--Beginn des Anrede-->
<div class="form1"><br><br>
<div class="names">
    <div class="anrede"> 
    <label for="Anrede">Anrede
        <select id="select" name="anrede" >
        <option value="">--Please choose an option--</option>
        <option value="herr">Herr</option>
        <option value="frau">Frau</option>
        <option value="andere">Andere</option>
        </select>
    </label></div>
    <br><br>
  <div><br>
    <label class="desc" id="title1" for="text1">Vorname</label>
    <div>
      <input id="text1" name="text1" type="text" class="field text fn" value="" size="8" tabindex="1" placeholder="vorname">
    </div>
  </div>
    <div><br><br>
    <label class="desc" id="title1" for="text2">Nachname</label>
    <div>
      <input id="text2" name="text2" type="text" class="field text fn" value="" size="8" tabindex="1" placeholder="Ihr Nachname">
    </div>
  </div>
    <div><br>
    <label class="desc" id="title1" for="text3">E-mail-Addresse</label>
    <div>
      <input id="text3" name="text3" type="text" class="field text fn" value="" size="8" tabindex="1" placeholder="Deine Email">
    </div>
  </div>
    <div><br>
    <label class="desc" id="title1" for="text4">Telefonnummer</label>
    <div>
      <input id="text4" name="text4" type="number" class="field text fn" value="" size="8" tabindex="1" placeholder="Deine Telefonnummer">
    </div>
  </div>
  <div><br><br>
    <label class="desc" id="title3" for="text5">
      Geburtstag
    </label>
    <div>
      <input id="text5" name="text5" type="date" spellcheck="false" value="" maxlength="255" tabindex="3"> 
   </div>
  </div>
 <div><br><br>
    <label class="desc" id="title3" for="text6">
      Plz
    </label>
    <div>
      <input id="text6" name="text6" type="number" spellcheck="false" value="" maxlength="255" tabindex="3" placeholder="Ihre Postleitzahl"> 
   </div><br><br>
   <label class="desc" id="title3" for="text7">
      Ort
    </label>
    <div>
      <input id="text7" name="text7" type="text" spellcheck="false" value="" maxlength="255" tabindex="3" placeholder="Dein Platz"> 
   </div><br><br>
  </div>

 <div>
    <label class="desc" id="title1" for="text8">Stra&szlig;e</label>
    <div>
      <input id="text8" name="text8" type="text" class="field text fn" value="" size="8" tabindex="1" placeholder="Deine Stra&szlig;e">
    </div>
  </div>

 <div><br><br>
    <label class="desc" id="title3" for="text9">
      Hausnummer
    </label>

      <input id="text9" name="text9" type="number" spellcheck="false" value="" maxlength="255" tabindex="3" placeholder="Ihre Hausnummer">

      <label class="desc" id="title3" for="text9">
      Hausnummerzusatz
    </label>
      <input id="text10" name="text10" type="number" spellcheck="false" value="" maxlength="255" tabindex="3" placeholder="Zus&#228;tzliche Adresse">
      <div><br><br>
      <div class="sub">
      <input type="submit" name="submit" value="Suche">
      <input type="reset" name="reset" value="Reset">
      </div>
    <br><br><br></div>
    </div>
  </div>
</form>

配對搜索均無效。 我嘗試在“與”和“或”之間進行切換,但對我不起作用。

首先,給您的表單字段起一個合理的名稱,這樣您就可以知道當字段使用PHP時要處理的內容。 例如,至少我們正在腳本中處理的那些:

是text1:

<input id="vorname" name="vorname" type="text" class="field text fn" value="" size="8" tabindex="1" placeholder="vorname">

是text7

<input id="ort" name="ort" type="text" spellcheck="false" value="" maxlength="255" tabindex="3" placeholder="Dein Platz"> 

是text2

<input id="nachname" name="nachname" type="text" class="field text fn" value="" size="8" tabindex="1" placeholder="Ihr Nachname">

是text8

<input id="strasse" name="strasse" type="text" class="field text fn" value="" size="8" tabindex="1" placeholder="Deine Stra&szlig;e">

是text3

<input id="email" name="email" type="text" class="field text fn" value="" size="8" tabindex="1" placeholder="Deine Email">

的PHP

// while developing and debugging add these
// just in case you are developing on a PHP configured for a LIVE env
ini_set('display_errors', 1); 
ini_set('log_errors',1); 
error_reporting(E_ALL);

// this should really go in the db connect section
// will cause PDO to throw exceptions if errors happen in the PDO Code
// so you can actually see what the problems are

$myconnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if(isset($_POST['submit']) ){

    $sql = 'SELECT * FROM OL_trans WHERE ';

    if ( !empty($_POST['vorname']) ) {
        $sql .= ' vorname = ? AND ';
        $params[] =  $_POST['vorname'];
    }   

    if ( !empty($_POST['nachname']) ) {
        $sql .= ' nachname = ? AND ';
        $params[] =  $_POST['nachname'];
    }

    if ( !empty($_POST['email']) ) {
        $sql .= ' email = ? AND ';
        $params[] =  $_POST['email'];
    }

    if ( !empty($_POST['strasse']) ) {
        $sql .= ' strasse = ? AND ';
        $params[] =  $_POST['strasse'];
    }

    if ( !empty($_POST['ort']) ) {
        $sql .= ' ort= ? AND ';
        $params[] =  $_POST['ort'];
    }

    // remove trailing AND

    $sql = rtrim($sql, 'AND ');
    $stmt = $myconnection->prepare($sql);
    $stmt->execute($params);

    $rows = $stmt->fetchAll();

    foreach($rows as $row){ 
        echo '<br/>'.$row['vorname'].
       ' - '.$row['nachname'].

       ' - '.$row['strasse'].
       ' - '.$row['plz'].
       ' - '.$row['ort'].
       ' - '.$row['email'].
       ' - '.$row['telefon'].
       ' - '.$row['mobil'].'<br/><br/>';
    } 
}

編輯:RE問題

當我進入時,我正在運行一點測試床

$_POST = [  'submit' => 1, 
        'vorname' => 'Thomas', 
        'nachname' => 'Denly',
        'email' => 'xxxx@edfsd.com'
    ];

生成的查詢是

SELECT * FROM OL_trans WHERE  vorname = ? AND  nachname = ? AND  email = ?

$params數組是

Array
(
    [0] => Thomas
    [1] => Denly
    [2] => xxxx@edfsd.com
)

如果我輸入

$_POST = [  'submit' => 1, 
        'vorname' => 'Thomas', 
        ];

查詢是

SELECT * FROM OL_trans WHERE  vorname = ?

和參數是

Array
(
    [0] => Thomas
)

那么該查詢和參數值有什么問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM