Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

MySql insert greska

[es] :: PHP :: MySql insert greska

[ Pregleda: 2417 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon MySql insert greska01.08.2009. u 14:42 - pre 179 meseci
Code:
<?php
    $menu_name = mysql_prep($_POST['menu_name']);
    $position = mysql_prep($_POST['position']);
    $visible = mysql_prep($_POST['visible']);
?>

<?php
    $query = "INSERT INTO subjects (
    menu_name, position, visible
    ) VALUES (
    '{$menu_name}', {$position}, {$visible}
           )";
     $result = mysql_query($query, $connection);
     if ($result){
         //Success;
           header("Location: content.php");
           exit;
     }
     else{
         //Display error message
         echo "<p>Subject creation failed </p>";
         echo "<p>" .mysql_error() . "</p>";
     }
?>

Kad se ovaj kod izvrsi(preko submit dugmeta) daje mi gresku
Code:
Subject creation failed

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' )' at line 4

Negde u SQL sintaksi imam gresku samo ja nju ne vidim, ako neko vidi nek mi javi. Greska se javlja samo ako pokusam da izvrsim insert preko php-a, a ako pokusam preko phpmyadmin-a
sve radi ok.
Code:
<?php
function mysql_prep($value)
    {
        $magic_quotes_active = get_magic_quotes_gpc();
        $new_enough_php = function_exists("mysql_real_escape_string"); //i.e PHP >= 4.3.0
        if($new_enough_php) 
        { // PHP 4.3.0 or higher 
        //undo any magic quotes so mysql_real_escapre_string can do the work  
           if($magic_quotes_active) { $value = stripslashes($value); } 
           $value = mysql_real_escape_string($value);
        } 
        else 
        { //before PHP 4.3.0 
        // if magic quotes aren't already on then add slashes manually 
            if (!$magic_quotes_active)
            {
                $value = addslashes($value); 
            } 
            return $value;
        }    
?>
}

Konekcija na MySql radi ok, posto mogu da povucem podatke iz baze i prikazem ih na content.php
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
79.101.133.*



+33 Profil

icon Re: MySql insert greska01.08.2009. u 14:46 - pre 179 meseci
A kog su tipa "position" i "visible" polja u tabeli? Da nisi i oko njih zaboravio da staviš jednostruke navodnike?

btw A i šta će ti te vitičaste zagrade?
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: MySql insert greska01.08.2009. u 14:53 - pre 179 meseci
Da, zaboravih menu_name je string (varchar u mysqlu) position je int a visible je tinyint(sluzi kao bool)
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: MySql insert greska01.08.2009. u 15:07 - pre 179 meseci
Ovo radim po ovom kursu PHP with MySQL Essential Training with:Kevin Skoglund. Stigao sam do 13. dela aplication crud. Uspeo sam da uradim Read iz baze, ali ovaj Create mi ne ide. Ako je od pomoci mogu da postavim sve sto sam do sada uradio.
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
Prikačeni fajlovi
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: MySql insert greska01.08.2009. u 15:14 - pre 179 meseci
Citat:
Nikola Poša: A kog su tipa "position" i "visible" polja u tabeli? Da nisi i oko njih zaboravio da staviš jednostruke navodnike?

btw A i šta će ti te vitičaste zagrade?
 
Probao sam tvoj savet Nikola, sklonio sam zagrade i dalje ne radi, menu_name je string zato mi treba jednostruke navodnike oko njega
Code:
<?php
    $query = "INSERT INTO subjects (
    menu_name, position, visible
    ) VALUES (
    '$menu_name', $position, $visible
           )";
     $result = mysql_query($query, $connection);
     if ($result){
         //Success;
           header("Location: content.php");
           exit;
     }
     else{
         //Display error message
         echo "<p>Subject creation failed </p>";
         echo "<p>" .mysql_error() . "</p>";
     }
?>

http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
79.101.133.*



+33 Profil

icon Re: MySql insert greska01.08.2009. u 15:33 - pre 179 meseci
Ja stvarno ne vidim gde može da bude ta sintaksna greška. Pošto si rekao da ti u PHPMyAdmin-u taj upit radi, onda je problem verovatno u toj tvojoj f-ji mysql_prep... Probaj čisto testiranja radi da direktno INSERT-uješ to iz POST-a, bez prethodnog "provlačenja" promenljivih kroz tu mysql_prep f-ju.

edit: Ili još bolje, odmah posle kreiranje tog upita, samo ispiši tu promenljivu $query, čisto da vidiš kako uopšte izgleda taj upit koji se šalje...
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: MySql insert greska01.08.2009. u 15:57 - pre 179 meseci
Interesantno bez mysql_prep f-je radi ok, ali ta f-ja koristi mysql_real_escape_string za escape-ovanje specijalni karaktera koji se prosledjuju kao string u mysql naredbi. (Pod uslovom da je PHP >= 4.3.0)

Znaci ako menu_name-u prosledim string kao npr That's all dace mi gresku
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's all', 6, 1 )' at line 4

http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
79.101.133.*



+33 Profil

icon Re: MySql insert greska01.08.2009. u 16:34 - pre 179 meseci
Vidim da koristi mysql_real_escape_string, a vidim da ima i dosta petljanja sa magic_quotes, stripslashes, addslashes, itd. Ja odskora uvek u .htaccess-u isključim tu opciju (php_flag magic_quotes_gpc Off), i onda nema problema... A ona će biti ukinuta od PHP v6 (valjda).

Aj' baš echo-uj taj upit, pa pošalji da vidimo šta se ispisuje, i da li se uopšte escape-uju karakteri...
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: MySql insert greska01.08.2009. u 16:37 - pre 179 meseci
Greska u mysql_prep f-ju return $value je bio na pogresnom mestu. Znao sam da je neka glupa greska

novije instalacije PHP-a imaju magic_quotes_gpc off po default-u. Normalno da imam otvorenu konekciju
Code:
<?php require_once("includes/connection.php"); ?>

Koristim WAMP.
Code:
connection.php
<?php
require("constants.php");
// Create database conection
$connection = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD);
if(!$connection){
    die("Database connection failed: " . mysql_error());
}
//Select database to use
$db_select = mysql_select_db(DB_NAME, $connection);
if(!$db_select){
    die("Database selection failed: " . mysql_error());
}
?>

http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
79.101.133.*



+33 Profil

icon Re: MySql insert greska01.08.2009. u 16:40 - pre 179 meseci
Haha, eto... Uopšte nisam obraćao pažnju na te poslednje linije koda tvoje f-je...
 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: MySql insert greska02.08.2009. u 15:59 - pre 179 meseci
Ovo se nadovezuje na istu stvar.

Naime radim Update koji radi ali imam jednu gresku
Code:
<p>Visible: 
                           <input type="radio" name="visible" value="0" <?php if($sel_subject['visible'] == 0) {echo " checked"; }?> />No
                           &nbsp;
                           <input type="radio" name="visible" value="1" <?php if($sel_subject['visible'] == 1) {echo " checked"; }?> />Yes
                       </p>
<input type="submit" name="submit" value="Edit Subject" />       

Ako je Visible radio value = 1 odnosno Yes update radi normalno, ali ako je value = 0 odnosno No ne radi
Kako nula(0) da mi ne bude empty?

Citat:
Empty funkcija
Return Values

Returns FALSE if var has a non-empty and non-zero value.

The following things are considered to be empty:

* "" (an empty string)
* 0 (0 as an integer)
* "0" (0 as a string)
* NULL
* FALSE
* array() (an empty array)
* var $var; (a variable declared, but without a value in a class)


Update sa error handling
Code:
 <?php if(isset($_POST['submit']))
    {
     $errors = array();
     $required_fields = array('menu_name', 'position', 'visible');
     foreach($required_fields as $fieldname)
     {
         if(!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && !is_int($_POST[$fieldname]))) //fieldname (visible) je 0 i nije int. Mislim da je ovde greska. 
          {
             $errors[] = $fieldname;
         }
     }
          
    $field_with_lengts = array('menu_name' => 30);
    foreach($field_with_lengts as $fieldname => $maxlenght)
      {
        if(strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlenght)
        {
            $errors[] = $fieldname;
        }
      }
     if(empty($errors))
     { 
         //Perform update
        $id = mysql_prep($_GET['subj']);
        $menu_name = mysql_prep($_POST['menu_name']);
        $position = mysql_prep($_POST['position']);
        $visible = mysql_prep($_POST['visible']);
        $query = "UPDATE subjects SET 
                   menu_name = '{$menu_name}', 
                   position = {$position},
                   visible = {$visible} 
                   WHERE id = {$id} ";
                   $result = mysql_query($query, $connection);
                   if(mysql_affected_rows() == 1)
                   {
                       //Succes
                   }
                   else 
                   {
                       //Failed
                   }
     }   
     else 
     {
         //Errors ocured
     }
?>
    
    }

http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
93.86.93.*



+33 Profil

icon Re: MySql insert greska02.08.2009. u 16:52 - pre 179 meseci
Pa malo je u startu nelogično da na isti način vršiš validaciju text polja i radio button-a. Za radio dugmad ne treba neka posebna validacija sem da eventualno "pitaš" da li je izabran bar jedan od njih. Tekstualno polje obično prvo trim-uješ, pa proveravaš da li je prazno.

Al' dobro, svejedno, u tom tvom primeru, trebao bi samo da promeniš to is_int u is_string, i možda dodaš još jedan OR uslov: is_string($_POST[$fieldname]) && (('' === $_POST[$fieldname]) || preg_match('/^\s+$/s', $_POST[$fieldname])), pa bi taj if izgledao ovako:
Code:
if(!isset($_POST[$fieldname]) || (!is_string($_POST[$fieldname]) && empty($_POST[$fieldname])) || (is_string($_POST[$fieldname]) && ('' === $_POST[$fieldname] || preg_match('/^\s+$/s', $_POST[$fieldname]))))
{
   $errors[] = $fieldname;
}

 
Odgovor na temu

AMD guy
Miroslav
.NET developer

Član broj: 128930
Poruke: 1007

Sajt: www.its.edu.rs


+38 Profil

icon Re: MySql insert greska02.08.2009. u 17:27 - pre 179 meseci
Sta znaci trostruki znak jednakosti?
= znaci dodeljivanje
== znaci proveru

edit:
Hvala na pomoci, radi.

[Ovu poruku je menjao AMD guy dana 02.08.2009. u 18:40 GMT+1]
http://i.imgur.com/V3feW.jpg
http://on.wsj.com/H9yjz6 -- India Graduates Millions, but Too Few Are Fit to Hire
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
212.200.202.*

Sajt: https://avramovic.info


+46 Profil

icon Re: MySql insert greska02.08.2009. u 17:56 - pre 179 meseci
=== se koristi (uglavnom) kod boolean vrednosti

Ako neka f-ja može da vrati nulu i false (i još nešto pored toga), kad proveravaš ako staviš if ($rez_funkcije == false) a funkcija vrati nulu, uslov će biti ispunjen. Ako staviš if ($rez_funkcije === false) a funkcija vrati nulu, onda uslov neće biti ispunjen, odnosno biće ispunjen ako i samo ako funkcija vrati false.
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: MySql insert greska02.08.2009. u 18:27 - pre 179 meseci
Tj. koristi se kad hoces da se uveris da li je osim vrednosti i tip promenljivih koje poredis isti.

Samo jedno nebitno zapazanje, ovaj deo moze da se izostavi:

Code:

(!is_string($_POST[$fieldname]))


jer sve sto je poslato na post ce uvek biti string kad se preuzme sa post niza, nece se nikad desiti da kad posaljes neku brojcanu vrednost sa forme,
proverom tipa dobijes int, bez prethodne konverzije sa (int) ili necim takvim. Znaci ako si poslao broj 1 dobices kao rezultat stirng '1',
pa mozes sa is_numeric da proveris da li je u pitanju broj ili ne.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
93.86.93.*



+33 Profil

icon Re: MySql insert greska02.08.2009. u 20:05 - pre 179 meseci
Citat:
AMD guy: Sta znaci trostruki znak jednakosti?

Evo recimo najbolji primer za korišćenje trostrukog znaka jednakosti je ovaj slučaj:
Code:
$s = 'foo';
if (strpos('f', $s) == false) {
   echo 'Ovo ce se ispisati.';
}

if (strpos('f', $s) === false) {
   echo 'A ovo nece.';
}

U oba if-a strpos() će da vrati 0, a nula može da bude "shvaćena" kao false, tako da će taj prvi if biti tačan, bez obzira što povratna vrednost strpos() u tom slučaju nije onog tipa sa kojim se vrši poređenje (bool). U drugom if se vrši striktno poređenje, tačnije, porede se i tipovi, a kako su int i bool različiti tipovi, taj if uslov neće biti ispunjen.

Ako pogledaš manual, videćeš da za znak '==' piše Equal, a za '===' Identical, a to su različite stvari.

Citat:
Tudfa: Samo jedno nebitno zapazanje, ovaj deo moze da se izostavi:

Code:

(!is_string($_POST[$fieldname]))


Ali problem je ako to izostaviš, a kao drugi uslov ostane ono empty($_POST[$fieldname]), tada će opet doći do onog problema prepoznavanja stringa "0" kao empty. Trebalo bi u stvari izostaviti ta druga dva uslova, i ostaviti samo onaj prvi i onu treću grupu uslova.
 
Odgovor na temu

stough_ser
stojadinovic milan

Član broj: 57571
Poruke: 84
*.static.isp.telekom.rs.



Profil

icon Re: MySql insert greska03.08.2009. u 13:58 - pre 179 meseci
ako se ne varam
== poredi vrednosti
a === poredi i tip

iliti, kako je kolega lepo opisao

0 == false prolazi

a 0=== false ne

jer je 0 logichki false
kao i prazan string, prazan niz...


 
Odgovor na temu

[es] :: PHP :: MySql insert greska

[ Pregleda: 2417 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.