WAMP - PHP / MySQL - Почему мой POST-вызов искажается - PullRequest
1 голос
/ 12 февраля 2012

РЕДАКТИРОВАТЬ: исправление исправлено - основной проблемой является подключение php / mysql

В попытке узнать, как использовать базу данных MySQL на веб-странице, я следую базовому руководству по подключению кэкземпляр MySQL через PHP (все управляется через WAMP2)

Учебное пособие: http://www.freewebmasterhelp.com/tutorials/phpmysql/4 использует метод PHP_SELF (который, как я понимаю, теперь устарел).

Я пробовал несколько других предложений, которые я нашел, но не нашел решения для следующей ошибки, которую вижу в журнале apache:

(20024)The given path is misformatted or contained invalid characters: Cannot map POST /%3C$SEARCH.PHP%3E HTTP/1.1 to file, referer: http://localhost/search.php

Thisошибка препятствует возвращению HTML-страницы, и в моем браузере появляется ошибка 403

Похоже, что эта строка HTML / PHP является виновником:

<form name="search" method="post" action="<?=$PHP_SELF?>">

Я видел предложениякоторый говорит либо включить short_open_tag (плохая идея согласно некоторым), изменить

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 

Я не могу заставить работать ни один из этих методов, и подумал, может ли кто-нибудь дать мне знать, какая глупость у меня естьпропустил это время ...

Весь php-файл, который я использую:

<?php 
// // This is only displayed if they have submitted the form 
 if ($searching =="yes") 
 { 
 echo "<h2>Results</h2><p>"; 

 //If they did not enter a search term we give them an error 
 if ($find == "") 
 { 
 echo "<p>You forgot to enter a search term"; 
 exit; 
 } 

 include("dbinfo.php");
 mysql_connect($host,$username,$password);
 mysql_select_db("database") or die(mysql_error()); 

 // We preform a bit of filtering 
 $find = strtoupper($find); 
 $find = strip_tags($find); 
 $find = trim ($find); 

 //Now we search for our search term, in the field the user specified 
 $data = mysql_query("SELECT * FROM main WHERE upper($field) LIKE'%$find%'"); 

 //And we display the results 
 while($result = mysql_fetch_array( $data )) 
 { 
 echo $result['Item1']; 
 echo " "; 
 echo $result['Item2']; 
 echo "<br>"; 
 echo "<br>"; 
 } 

 //This counts the number or results - and if there wasn't any it gives them a little  message explaining that 
 $anymatches=mysql_num_rows($data); 
 if ($anymatches == 0) 
 { 
 echo "Sorry, but we can not find an entry to match your query<br><br>"; 
 } 

 //And we remind them what they searched for 
 echo "<b>Searched For:</b> " .$find; 
 } 
 ?> 


 <h2>Search</h2> 
 <form name="search" method="post" action="<?=$PHP_SELF?>">
 Seach for: <input type="text" name="find" /> in 
 <Select NAME="field">
 <Option VALUE="item1">Item1</option>
 <Option VALUE="item2">Item2</option>
 </Select>
 <input type="hidden" name="searching" value="yes" />
 <input type="submit" name="search" value="Search" />
 </form> 

Ответы [ 3 ]

1 голос
/ 12 февраля 2012

Избегайте ярлыков, они устарели, убедитесь, что вы используете:

<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">

Как выглядит HTML-код формы при загрузке страницы?

РЕДАКТИРОВАТЬ: после просмотрамой ответ Я хотел бы перефразировать его немного, так как они не являются «устаревшими», как говорят, но они, как правило, вызывают проблемы (для тех, кто не знает, как полностью настроить php), поэтому для начинающих япредложил бы избегать их.

0 голосов
/ 12 февраля 2012

Переменная $ _SERVER ['PHP_SELF'] содержит полный путь вашего php-скрипта, например: /your_server_path/your_file_name.php

Очевидно, что при запуске ваш скрипт не может найти файл, потому что он ищет что-то вроде /your_server_path/your_server_path/your_file_name.php

Попробуйте сделать что-то вроде этого:

<form method="post" action="<?='http://localhost'.$_SERVER['PHP_SELF']?>"> 
0 голосов
/ 12 февраля 2012

Я уверен, что это, вероятно, плохой дизайн, но я всегда просто жестко кодировал имя сценария в таких случаях (так, просто action="search.php").

...