У меня возникла проблема с попыткой заставить PHP-скрипт работать на моем сайте, где я могу добавлять новые предметы в свой интернет-магазин.PHP MySQLi проблема с подготовленными операторами, вызывающими ошибку
Фрагмент кода, у меня возникли проблемы с это:
$error = '';
$success = '';
if(isset($_POST['submit']))
{
define("MAX_SIZE", "4096");
$errors=0;
$name = $_POST['name'];
$price = $_POST['price'];
$desc = filter_var($_POST['desc'], FILTER_SANITIZE_STRING);
$image = $_FILES['image']['name'];
$uploadedfile = $_FILES['image']['tmp_name'];
if($image)
{
$filename = stripslashes($_FILES['image']['name']);
$extension = getExtension($filename);
$extension = strtolower($extension);
if(($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif"))
{
$error .= '<p class="error">The file must be one of the following file types(jpg|jpeg|png|gif)</p>';
$errors=1;
}
else
{
$size=filesize($_FILES['image']['tmp_name']);
if($size > MAX_SIZE*1024)
{
$error .= '<p class="error">The file cannot exceed 4MB in size.</p>';
$errors=1;
}
if($extension=="jpg" || $extension=="jpeg")
{
$uploadedfile = $_FILES['image']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png")
{
$uploadedfile = $_FILES['image']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
}
else
{
$src = imagecreatefromgif($uploadedfile);
}
list($width,$height)=getimagesize($uploadedfile);
$newwidth=128;
$newheight=128;
$tmp=imagecreatetruecolor($newwidth,$newheight);
imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);
$filename = "../store/images/" . $_FILES['image']['name'];
imagejpeg($tmp,$filename,100);
$fname = $_FILES['image']['name'];
imagedestroy($src);
imagedestroy($tmp);
}
}
if($name == '')
{
$error .= '<p class="error">You must enter a name for the product.</p>';
}
if(!preg_match('/^[a-zA-Z\s]+$/', $name))
{
$error .= '<p class="error">The product name can only contain letters and spaces.</p>';
}
if($_POST['type'] == 'KIT')
{
$type = 'KIT';
}
else if($_POST['type'] == 'VIP')
{
$type = 'VIP';
}
else if($_POST['type'] == 'OTHER')
{
$type = 'OTHER';
}
else
{
$error .= '<p class="error">You must select a valid type for the product.</p>';
}
if($price == '')
{
$error .= '<p class="error">You must enter a price for the product.</p>';
}
if(!preg_match('/^\d+(:?[.]\d{2})$/', $price))
{
$error .= '<p class="error">You must enter a valid price for the product.</p>';
}
if($desc == '')
{
$error .= '<p class="error">You must enter a description for the product.</p>';
}
$stmt = $db->prepare("SELECT * FROM products WHERE name = ?");
if($stmt)
{
$stmt->bind_param('s',$name);
$stmt->execute();
if($stmt->num_rows > 0)
{
$error .= '<p class="error">This product already exists. Please choose a different name.</p>';
}
}
else
{
$error .= '<p class="error">An error occurred at line 135. Please contact the site administrator.</p>';
}
if(empty($error) && !$errors)
{
$stmt = $db->prepare("INSERT INTO products (name, image, price, prod_desc, type) VALUES (?, ?, ?, ?, ?)");
if($stmt)
{
$stmt->bind_param('sssss', $name, $fname, $price, $desc, $type);
if($stmt->execute())
{
$success .= '<p class="success">Product added successfully.</p>';
}
else
{
$error .= '<p class="error">An error occured at line 158. Please contact the site administrator.</p>';
}
}
else
{
$error .= '<p class="error">An error occured at line 154. Please contact the site administrator.</p>';
}
}
}
раздел У меня возникли проблемы с является, если ($ STMT) блокировать сразу после того, если (пусто ($ ошибка) & & ! & ошибок).
Согласно каждой проверке синтаксиса, которую я использовал как для самого PHP, так и для запроса на вставку MySQL, все они не сообщают об ошибках. Но он продолжает выплевывать ошибку для строки 154, и я не могу понять, почему. Я уже проверил, что переменные хранятся должным образом из формы, повторяя их, и я также проверил, что столбцы таблицы mysql существуют и написаны правильно.
Это начинает отвлекать меня от орехов, и когда я попытался отследить ошибку mysql, используя ошибку $ stmt-> error или $ db->, она вернулась в прошлое, без каких-либо ошибок.
Единственный результат я когда-либо получал, когда я сделал mysqli_errno ($ дб), возвращающей 0.
Каждый знает, что не так с этим кодом, или почему он не работает?
HTML Markup для формы:
<div id="form">
<form action="" method="post" enctype="multipart/form-data">
<table>
<th colspan="2">Add to Store</th>
<tr>
<td colspan="2">
<p>Please use the form below to add items to the store.</p>
<?php
if($error)
{
echo $error;
}
if($success)
{
echo $success;
}
?>
<hr>
<tr>
<td><label for="name">Product Name:</label></td>
<td><input type="text" name="name" id="name" value="<?php if(isset($name)) { echo $name; } else { echo ''; } ?>" /></td>
</tr>
<tr>
<td><label for="price">Product Price:</label></td>
<td><input type="text" name="price" id="price" size="6" maxlength="6" value="<?php if(isset($price)) { echo $price; } else { echo ''; } ?>" /></td>
</tr>
<tr>
<td><label for="image">Product Image:</label></td>
<td><input type="file" name="image" id="image" /><br /><small>File must be 128x128 pixels, and no larger than 4MB.</small></td>
</tr>
<tr>
<td><label for="type">Product Type:</label></td>
<td>
<select name="type">
<option value="VIP">VIP Package</option>
<option value="KIT">Donator Kit</option>
<option value="OTHER">Other</option>
</select>
</td>
</tr>
<tr>
<td colspan="2"><label for="desc">Product Description:</label></td>
</tr>
<tr>
<td colspan="2"><textarea name="desc" style="width: 500px; height:250px;"><?php if(isset($desc)) { echo $desc; } ?></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" id="submit" value="Add Product" /></td>
</tr>
</table>
</form>
</div>
Какая ошибка это выплевывание? Что такое строка 154? –
Строка 154 относится к блоку if ($ stmt) непосредственно после следующей строки внизу кода: $ stmt = $ db-> prepare ("INSERT INTO products (имя, изображение, цена, prod_desc, type) VALUES (& Alpha;, & alpha;, & alpha;, & alpha;, & alpha;) "); нет погрешность выливание, кроме того это сообщение. – Bryan
Проверьте свои журналы ошибок для * актуальной * ошибки. С '$ stmt' что-то не так, что указывает на проблему с вашим запросом. –