Avatar billede qub- Novice
11. april 2005 - 16:53 Der er 8 kommentarer og
1 løsning

Find fejlen

Hei.. Jeg er igang med at kode en indkøbskurv. Men er støt ind i et problem, når mine produkter skal tilføjes!

Men jeg kan ikke finde fejlen? :/ Jeg har brugt mange timer de sidste mange dage, men jeg kan bare ikke finde den fejl!


Min mysql tabel ser således ud (et dump):
CREATE TABLE cybertape_product (
  prod_id int(16) NOT NULL default '0',
  cat_id int(16) NOT NULL default '0',
  prod_name varchar(250) NOT NULL default '',
  prod_price decimal(30,2) NOT NULL default '0.00',
  prod_price_sale decimal(30,2) NOT NULL default '0.00',
  prod_description text NOT NULL,
  prod_image varchar(250) NOT NULL default '',
  UNIQUE KEY prod_id (prod_id)
) TYPE=MyISAM;






Min product_add.php ser så således ud:

<?php

include("config.php");

?>
<? include("header.inc.php"); ?>
      <table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td valign="top">
<?
    if($_POST['submit']) {   

        if (!$_POST['prod_name']) {
            echo "<td valign=\"top\"><h2>Tilføj produkt</h2><p align=\"center\">Produkt navn er ikke angivet!</p><p align='center'><a href=\"java script:history.back()\">Prøv Igen</a></p>";

        } else if ($_POST['cat_id'] == "none") {
            echo "<td valign=\"top\"><h2>Tilføj produkt</h2><p align=\"center\">Kategori er ikke angivet!</p><p align='center'><a href=\"java script:history.back()\">Prøv Igen</a></p>";

        } else if (!$_POST['prod_price']) {
            echo "<td valign=\"top\"><h2>Tilføj produkt</h2><p align=\"center\">Normal Pris er ikke angivet!</p><p align='center'><a href=\"java script:history.back()\">Prøv Igen</a></p>";

        } else if(preg_match('/[a-z]+/i', $_POST["prod_price"])) {
            echo "<td valign=\"top\"><h2>Tilføj produkt</h2><p align=\"center\">Normal Pris er ikke gyldig!</p><p align='center'><a href=\"java script:history.back()\">Prøv Igen</a></p>";


        } else if (isset($_POST['upload_image'])) {
       
            // Upload Category Image
                $destination    = "images/product/";

                //Her skal filen flyttes fra
                $from    = $_FILES['prod_image']['tmp_name'];

                //Hvilken type fil arbejder vi med?
                $ext = strtolower(end(explode(".", $_FILES['prod_image']['name'])));

                //Hvis filen er et jpg, jpeg eller gif billede
                if($ext == "jpg" || $ext == "jpeg" || $ext == "gif" || $ext == "png")
                {
                $date = time();

                //Her giver vi billedet et andet navn, så der ikke kommer to ens navne…
                $newname = $date . "_" . rand() . "." . $ext;

                //Her er vores destination
                $to = "$destination" . $newname;

                //Her sker det magiske:
                move_uploaded_file($from, $to);

        mysql_query("INSERT INTO cybertape_product (prod_id, cat_id, prod_name, prod_price, prod_price_sale, prod_description, prod_image) values ('$_POST[prod_id]', $_POST[cat_id]', $_POST[prod_name]', $_POST[prod_price]', $_POST[prod_price_sale]', $_POST[prod_description], '$newname')");
            }
echo "tilføjet";

        } else {
       
        $noimage = "";
        mysql_query("INSERT INTO cybertape_product (prod_id, cat_id, prod_name, prod_price, prod_price_sale, prod_description, prod_image) values ('$_POST[prod_id]', $_POST[cat_id]', $_POST[prod_name]', $_POST[prod_price]', $_POST[prod_price_sale]', $_POST[prod_description], '$noimage')");

echo "tilføjet";
        }

} else {
?>
<h2>Tilføj produkt</h2>
   
<FORM ENCTYPE='multipart/form-data' ACTION='product_add.php' METHOD='POST'>
<table align='center' width='600' border='0' cellspacing='0' cellpadding='0'>
<tr><td bgcolor='#B8C9D8'>
<table width='100%' align='center' border='0' cellpadding='2' cellspacing='1'>
  <tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'><b>Titel:</b></td>
    <td width='400' valign='top'><input class='textbox' type='textbox' name='prod_name'><font color='990000'><b>*</b></font></td>
  </tr>
  <tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'><b>Produkt/Vare Nummer:</b></td>
    <td width='400' valign='top'><input class='textbox' type='textbox' name='prod_id'></td>
    </tr>
  <tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'><b>Beskrivelse:</b><br>Tips: Brug html for at fremhæve din beskrivelse!</td>
    <td width='400' valign='top'><textarea name='prod_description' cols='40' rows='8'></textarea></td>
  </tr>
  <tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'><b>Kategori</b></td>
    <td width='400' valign='top'>
      <select name='cat_id'>
          <option value='none'>Venligst vælg...</option>
<?
$query = mysql_query("SELECT * FROM cybertape_category ORDER BY cat_id DESC");
    while ($row = mysql_fetch_array($query)) {
       
        $cat_id = $row[cat_id];
        $cat_name = $row[cat_name];
?>
        <option value='<? echo $cat_id ?>'><? echo $cat_name ?>/</option>
<?
}
?>
      </select><font color='990000'><b>*</b></font></td>
  </tr>
  <tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'><b>Normal Pris:</b></td>
    <td width='400' valign='top'>DKK&nbsp;<input class='textbox' type='textbox' name='prod_price'><font color='990000'><b>*</b></font></td>
  </tr>
<tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'><b>Udsalgs Pris:</b></td>
    <td width='400' valign='top'>DKK&nbsp;<input class='textbox' type='textbox' name='prod_price_sale'><br>(Lad dette felt være tomt hvis du ikke ønsker dette produkt inkuderet i salgs status!)</td>
  </tr>
  <tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'><b>Upload billede?</b></td>
    <td width='400' valign='top'><input name='upload_image' type='checkbox'>(SKAL være markeret af for at uploade billeder!)</td>
  </tr>
  <tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'><b>Billede:</b></td>
    <td width='400' valign='top'><INPUT class='file' NAME='prod_image'  TYPE='file'> kun gif, jpg, jpeg & png!</td>
  </tr>
  <tr bgcolor='#EFF5FA'>
    <td width='200' valign='top'>&nbsp;</td>
    <td width='400' valign='top'><INPUT class='submit' type='submit' name='submit' VALUE='Tilføj produkt'></td>
  </tr>
</table>
</td></tr></table>
</FORM></td>
</tr>
<?
}
?>
</table>
<?
 
  include("footer.inc.php");
Avatar billede barklund Nybegynder
11. april 2005 - 17:01 #1
mysql_query("INSERT INTO cybertape_product (prod_id, cat_id, prod_name, prod_price, prod_price_sale, prod_description, prod_image) values ('$_POST[prod_id]', $_POST[cat_id]', $_POST[prod_name]', $_POST[prod_price]', $_POST[prod_price_sale]', $_POST[prod_description], '$noimage')");

Dine quotes sidder fjollet?

mysql_query("INSERT INTO cybertape_product (prod_id, cat_id, prod_name, prod_price, prod_price_sale, prod_description, prod_image) values ('$_POST[prod_id]', '$_POST[cat_id]', '$_POST[prod_name]', '$_POST[prod_price]', '$_POST[prod_price_sale]', '$_POST[prod_description]', '$noimage')");

Ser lidt bedre ud - og det samme i den anden query.

Men derudover skal du også lige validere input data - for eksempel med mysql_real_escape_string og tilsvarende :)

Og at bruge sprintf kan være en stor fordel - højner overblikket kraftigt :)

--
Morten barklund
Avatar billede qub- Novice
11. april 2005 - 17:04 #2
De 2 er da fuldstændige ens ??
Avatar billede qub- Novice
11. april 2005 - 17:07 #3
hvad mener du med at vailidere umput dataen ?
Avatar billede barklund Nybegynder
11. april 2005 - 17:07 #4
Ja, hvis du påstår det, så er det klart, at du aldrig finder dine fejl ;)

Der er sådan nogle små tegn kaldet apostroffer (eller single quotes), og de ser ud som ' - de skal være i din query de rigtige steder.

Og jeg har tilføjet lidt ekstra i den sidste af ovenstående.

--
Morten Barklund
Avatar billede barklund Nybegynder
11. april 2005 - 17:07 #5
Hvis nu jeg skriver "hej '" i et input felt, så giver det en mysql-fejl.
Avatar billede barklund Nybegynder
11. april 2005 - 17:08 #6
Og har du overvejet at kaste en or die(mysql_error()) efter alle dine kald til mysql_query()?
Avatar billede qub- Novice
11. april 2005 - 17:08 #7
Det var det der var galt.. mange tak! Men hvad mener du med mysql_real_escape_string  og  sprintf ???
Avatar billede barklund Nybegynder
11. april 2005 - 17:11 #8
Kig i manulen - og prøv at indtaste en ' i din formular og se, om der kommer en fejl. Derefter vil du vide, hvorfor du nok bør håndtere data.
Avatar billede barklund Nybegynder
11. april 2005 - 17:25 #9
Tark for points :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester