В настоящее время я разрабатываю веб-сайт, где пользователи могут загружать списки сообщества. Я реализую это через PHP и MySQL.
В настоящее время все, кроме фотографии и описания, работает, и системная ошибка: «Вы не можете зарегистрироваться из-за системной ошибки. Приносим извинения за неудобства». показывает при загрузке страницы.
База данных выглядит следующим образом:
Код формы:
<form action="NewPost.php" method="post" enctype="multipart/form-data">
<p>First Name: <input type="text" name="PosterName" size="40" maxlength="40" required/></p>
<p>Email: <input type="email" name="Email" size="40" maxlength="40" required/></p>
<p><label>Neighborhood:
<select name="Neighborhood">
<optgroup label="Uptown">
<option value="Inwood">Inwood</option>
<option value="Fort George">Fort George</option>
<option value="Washington Heights">Washington Heights</option>
<option value="Hamilton Heights">Hamilton Heights</option>
<option value="Harlem">Harlem</option>
<option value="East Harlem">East Harlem</option>
<option value="Morningside Heights">Morningside Heights</option>
<option value="Upper West Side">Upper West Side</option>
<option value="Lincon Square">Lincoln Square</option>
<option value="Upper East Side">Upper East Side</option>
<option value="Yorkville">Yorkville</option>
<option value="Lenox Hill">Lenox Hill</option>
</optgroup>
<optgroup label="Midtown">
<option value="Clinton">Clinton</option>
<option value="Hells Kitchen">Hells Kitchen</option>
<option value="Theater District">Theater District</option>
<option value="Midtown">Midtown</option>
<option value="Turtle Bay">Turtle Bay</option>
<option value="Sutton">Sutton</option>
<option value="Beekman">Beekman</option>
<option value="Murray Hill">Murray Hill</option>
<option value="Tudor">Tudor</option>
<option value="Garment District">Garment District</option>
<option value="Chelsea">Chelsea</option>
<option value="Midtown South">Midtown South</option>
<option value="Kips Bay">Kips Bay</option>
<option value="Medical City">Medical City</option>
<option value="Gramercy Park">Gramercy Park</option>
<option value="Stuyvesant">Stuyvesant</option>
</optgroup>
<optgroup label="Downtown">
<option value="Meat Packing">Meat Packing</option>
<option value="West Village">West Village</option>
<option value="Greenwich Village">Greenwich Village</option>
<option value="NoHo">NoHo</option>
<option value="East Village">East Village</option>
<option value="Alphabet City">Alphabet City</option>
<option value="SoHo">SoHo</option>
<option value="Little Italy">Little Italy</option>
<option value="Bowery">Bowery</option>
<option value="Lower East Side">Lower East Side</option>
<option value="Tribecca">Tribecca</option>
<option value="Chinatown">Chinatown</option>
<option value="Civic Center">Civic Center</option>
<option value="Two Bridges">Two Bridges</option>
<option value="White Hall">White Hall</option>
<option value="Wall Street">Wall Street</option>
</optgroup>
<option value="Brooklyn">Brooklyn</option>
<option value="Queens">Queens</option>
<option value="Bronx">Bronx</option>
<option value="Staten Island">Staten Island</option>
</select>
</label></p>
<p><label>What would you like to do:
<select name="Method">
<option value="Buy">Buy</option>
<option value="Sell">Sell</option>
<option value="Swap">Swap</option>
<option value="Rent">Rent</option>
</select>
</label></p>
<p>Title: <input type="text" name="Title" size="140" maxlength="140" required/></p>
<p><label>Description:
<br>
<textarea name="Description" rows="10" cols="50" maxlength="1000" required>Please provide some details</textarea></label></p>
<p>Price: <input type="number" name="Price" min="0" max="999999"/></p>
<p><label>Condition:
<select name="Condition">
<option value="New">New</option>
<option value="Used">Used</option>
</select>
</label></p>
<p><input type="hidden" name="MAX_FILE_SIZE" value="102400">
Photo: <input type="file" name="Photo" accept="image/jpeg"/></p>
<p><input type="submit" name="Post" value="Post" /></p>
PHP:
<?php
// This script performs an INSERT query to add a record to the Listings table.
//This is the directory where images will be saved
$target = "image directory";
$target = $target . basename( $_FILES['Photo']['name']);
// Get information from the form
$Name = trim($_POST['PosterName']);
$Email = trim($_POST['Email']);
$Neighborhood = ($_POST['Neighborhood']);
$Method = ($_POST['Method']);
$Title = trim($_POST['Title']);
$Descrption = trim($_POST['Description']);
$Price = ($_POST['Price']);
$Condition = ($_POST['Condition']);
$Photo = ($_FILES['photo']['name']);
// Connects to your Database
$con = mysql_connect('localhost', 'admin', 'password') or die(mysql_error()) ;
mysql_select_db('Listings', $con) or die(mysql_error()) ;
// Writes the information to the database
$q = mysql_query("INSERT INTO Listings (Name, Email, Neighborhood, Method, Title, Description, Price, Condit, Photo, Date) VALUES ('$Name', '$Email', '$Neighborhood', '$Method', '$Title', '$Description', '$Price', '$Condition', '$Photo', NOW() )") ;// Write the photo to server
if(move_uploaded_file($_FILES['photo']['tmp_name'], $target)) { // If it ran OK.
// Print a message:
echo 'Your listing has been posted.';
} else { // If it did not run OK.
// Public message:
echo '<h1>System Error</h1>
<p class="error">You could not be registered due to a system error. We apologize for any inconvenience.</p>';
// Debugging message:
echo '<p>' . mysqli_error($con) . '<br /><br />Query: ' . $q . '</p>';
} // End of if ($r) IF.
mysqli_close($con); // Close the database connection.
?>
После отправки, все сообщения в базе данных, кроме фотографии и описания.
Кажется, у вас есть опечатка в имени индекса:
Фото! = Фото
$target = $target . basename( $_FILES['Photo']['name']);
<input type="file" name="Photo" accept="image/jpeg"/></p>
$_FILES['photo'] // small letter p
$Descrption // another typo (missing letter i)
Обязательное примечание:
Пожалуйста, не используйте
mysql_*
функции в новом коде. Они больше не поддерживаются и официально устарели. Увидеть красная коробка? Узнать о готовые заявления вместо этого и использовать PDO или же MySQLi — Эта статья поможет вам решить, какой. Если вы выбираете PDO, вот хороший урок.
У вас есть опечатка в вашем PHP. Ваш код:
$Descrption = trim($_POST['Description']);
должно быть:
$Description = trim($_POST['Description']);
P фото в верхнем регистре в вашем HTML. Ваш код:
$Photo = ($_FILES['photo']['name']);
должно быть:
$Photo = ($_FILES['Photo']['name']);
Напомним, что сохранение фактического имени файла и последующая попытка сослаться на него не очень хорошая идея. Вы должны хешировать имя входящего файла, сохранить оригинал и хеш в БД, но убедитесь, что файл, хранящийся на диске, назван как хеш.