errore

  • Creatore Discussione Creatore Discussione salgio
  • Data di inizio Data di inizio

salgio

Nuovo Utente
30 Mag 2010
14
0
0
Salve.
Non riesco a trovare un errore e ho di bisogno l'aiuto di qualcuno più esperto di me.
il messaggio di errore è questo: 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 'on)' at line 3.

Ho una pagina che mi aggiunge o cancella dei dati da un database.
Lo script mi carica correttamente i dati nel database, ma quando cerco di cancellarli non li cancella e mi dà l'errore di cui sopra.
qualcuno può darmi una mano?
Grazie.

lo script è questo:


PHP:
<?php
require 'include/db.inc.php';

$db = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD) or 
    die ('Unable to connect. Check your connection parameters.');
mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));

switch ($_POST['action']) {

case 'Add Character':

    // escape incoming values to protect database
    $alias = mysql_real_escape_string($_POST['alias'], $db);
    $real_name = mysql_real_escape_string($_POST['real_name'], $db);
    $address = mysql_real_escape_string($_POST['address'], $db);
    $city = mysql_real_escape_string($_POST['city'], $db);
    $state = mysql_real_escape_string($_POST['state'], $db);
    $zipcode_id = mysql_real_escape_string($_POST['zipcode_id'], $db);
    $alignment = ($_POST['alignment'] == 'good') ? 'good' : 'evil';

    // add character information into database tables
    $query = 'INSERT IGNORE INTO comic_zipcode
            (zipcode_id, city, state)
        VALUES
            ("' . $zipcode_id . '", "' . $city . '", "' . $state . '")';
    mysql_query($query, $db) or die (mysql_error($db));

    $query = 'INSERT INTO comic_lair 
            (lair_id, zipcode_id, address)
        VALUES 
            (NULL, "' . $zipcode_id . '", "' . $address . '")';
    mysql_query($query, $db) or die (mysql_error($db));

    // retrieve new lair_id generated by MySQL
    $lair_id = mysql_insert_id($db);
    $query = 'INSERT INTO comic_character
            (character_id, alias, real_name, lair_id, alignment) 
        VALUES
            (NULL, "' . $alias . '", "' . $real_name . '", ' .
            $lair_id . ', "' . $alignment . '")';
    mysql_query($query, $db) or die (mysql_error($db));

    // retrieve new character_id generated by MySQL
    $character_id = mysql_insert_id($db);
    if (!empty($_POST['powers'])) {
        $values = array();
        foreach ($_POST['powers'] as $power_id) {
            $values[] = sprintf('(%d, %d)', $character_id, $power_id);
        }
        $query = 'INSERT IGNORE INTO comic_character_power
                (character_id, power_id)
            VALUES ' .
                implode(',', $values);
        mysql_query($query, $db) or die (mysql_error($db));
    }

    if (!empty($_POST['rivalries'])) {
        $values = array();
        foreach ($_POST['rivalries'] as $rival_id) {
            $values[] = sprintf('(%d, %d)', $character_id, $rival_id);
        }
        
        // alignment will affect column order
        $columns = ($alignment = 'good') ? '(hero_id, villain_id)' : 
            '(villain_id, hero_id)';

        $query = 'INSERT IGNORE INTO comic_rivalry   
                ' . $columns . '
            VALUES
                ' . implode(',', $values);
        mysql_query($query, $db) or die (mysql_error($db));
    }

    $redirect = 'list_characters.php';
    break;

case 'Delete Character':

    // make sure character_id is a number just to be safe
    $character_id = (int)$_POST['character_id'];

    // delete character information from tables
    $query = 'DELETE FROM c, l
        USING
            comic_character c, comic_lair l
        WHERE
            c.lair_id = l.lair_id AND 
            c.character_id = ' . $character_id;
    mysql_query($query, $db) or die (mysql_error($db));

    $query = 'DELETE FROM comic_character_power
        WHERE
            character_id = ' .  $character_id;
    mysql_query($query, $db) or die (mysql_error($db));

    $query = 'DELETE FROM comic_rivalry
        WHERE
            hero_id = ' . $character_id . ' OR villain_id = ' . $character_id;
    mysql_query($query, $db) or die (mysql_error($db));

    $redirect = 'list_characters.php';
    break;

case 'Edit Character':

    // escape incoming values to protect database
    $character_id = (int)$_POST['character_id'];
    $alias = mysql_real_escape_string($_POST['alias'], $db);
    $real_name = mysql_real_escape_string($_POST['real_name'], $db);
    $address = mysql_real_escape_string($_POST['address'], $db);
    $city = mysql_real_escape_string($_POST['city'], $db);
    $state = mysql_real_escape_string($_POST['state'], $db);
    $zipcode_id = mysql_real_escape_string($_POST['zipcode_id'], $db);
    $alignment = ($_POST['alignment'] == 'good') ? 'good' : 'evil';

    // update existing character information in tables
    $query = 'INSERT IGNORE INTO comic_zipcode
            (zipcode_id, city, state)
        VALUES
            ("' . $zipcode_id . '", "' . $city . '", "' . $state . '")';
    mysql_query($query, $db) or die (mysql_error($db));

    $query = 'UPDATE comic_lair l, comic_character c
            SET   
                l.zipcode_id = ' . $zipcode_id . ', 
                l.address = "' . $address . '", 
                c.real_name = "' . $real_name . '", 
                c.alias = "' . $alias . '", 
                c.alignment = "' . $alignment . '" 
        WHERE
            c.character_id = ' . $character_id . ' AND 
            c.lair_id = l.lair_id';
    mysql_query($query, $db) or die (mysql_error($db));

    $query = 'DELETE FROM comic_character_power
        WHERE
            character_id = ' . $character_id;
    mysql_query($query, $db) or die (mysql_error($db));

    if (!empty($_POST['powers'])) {
        $values = array();
        foreach ($_POST['powers'] as $power_id) {
            $values[] = sprintf('(%d, %d)', $character_id, $power_id);
        }
        $query = 'INSERT IGNORE INTO comic_character_power
                (character_id, power_id)
            VALUES 
                ' . implode(',', $values);
        mysql_query($query, $db) or die (mysql_error($db));
    }

    $query = 'DELETE FROM comic_rivalry
        WHERE
            hero_id = ' . $character_id . ' OR villain_id = ' . $character_id;
    mysql_query($query, $db) or die (mysql_error($db));

    if (!empty($_POST['rivalries'])) {
        $values = array();
        foreach ($_POST['rivalries'] as $rival_id) {
            $values[] = sprintf('(%d, %d)', $character_id, $rival_id);
        }
        
        // alignment will affect column order
        $columns = ($alignment = 'good') ? '(hero_id, villain_id)' : 
            '(villain_id, hero_id)';

        $query = 'INSERT IGNORE INTO comic_rivalry
                ' . $columns . '
            VALUES 
                ' . implode(',', $values);

        mysql_query($query, $db) or die (mysql_error($db));
    }

    $redirect = 'list_characters.php';
    break;

case 'Delete Selected Powers':

    if (!empty($_POST['powers'])) {
        // escape incoming values to protect database-- they should be numeric
        // values, but just to be safe
        $powers = implode(',', $_POST['powers']);
        $powers = mysql_real_escape_string($powers, $db);

        // delete powers
        $query = 'DELETE FROM comic_power 
            WHERE 
                power_id IN (' . $powers . ')';
        mysql_query($query, $db) or die (mysql_error($db));

        $query = 'DELETE FROM comic_character_power 
            WHERE
                power_id IN (' . $powers . ')';
        mysql_query($query, $db) or die (mysql_error($db));
    }

    $redirect = 'edit_power.php';
    break;

case 'Add New Power':

    // trim and check power to prevent adding blank values
    $power = trim($_POST['new_power']);
    if ($power != '')
    {
        // escape incoming value
        $power = mysql_real_escape_string($power, $db);

        // create new power
        $query = 'INSERT IGNORE INTO comic_power
                (power_id, power)
            VALUES 
                (NULL, "' . $power . '")';
        mysql_query($query, $db) or die (mysql_error($db));
    }

    $redirect = 'edit_power.php';
    break;

default:
    $redirect = 'list_characters.php';
}

header('Location: ' . $redirect);
?>
 
Ultima modifica di un moderatore:
Scusa ma è la prima volta che posto qui.
Ma il punto su parameters potrebbe avere a che fare con il collegamento. Io non ho problemi di collegamento, lo script carica i dati soltanto che non riesce a cancellare gli stessi dati che ho caricato prima.
 
ciao
l'errore ti indica a che riga avviene
....at line 3.
e se non vado errato la riga 3 e la riga 3 è
mysql_select_db(MYSQL_DB, $db) or die(mysql_error($db));
quindi l'errore è sulla riga o prima.
secondo me la riga e sintatticaemnte corretta quindi l'errore nasce da prima
sul require non mi sembra, l'unica cosa che vedo è quel punto che non dovrebbe esserci.
dico questo a meno che col copia/incolla tu non abbia postato solo una parte di codice.
poi che non ti cancelli i dati è logico perche php arresto lo script alla riga tre e le seguenti non vengono eseguite
 
E' quello il problema la riga tre è vuota e all'inizio c'è solo il collegamento e il collegamento lo fà e carica i dati e poi non riesce a cancellarli, perciò lo script funziona a meta una prima volta mi dice che va tutto bene infatti i dati sono nel database poi però non riesce a cancallarli.
ciao
 
ciao
è quello che non capisco, perchè o si connette o non si connette.
intanto cosa c'è dentro db.inc.php? che non derivi da quello l'errore?

un'altra piccola cosa (non dovrebbe essere, ma non si sa mai) usa il
require_once per non avere un'eventuale doppia inclusione
 
Dentro il require ci sono i dati per il collegamento, userID e password e quello funziona bene.
il problema dovrebbe essere molto in basso
dove c'è:
case 'Delete Selected Powers':
 
ciao
quello che non capisco perchè ti dia errore alla riga tre quando cerchi di eliminare, mentre per l'insert no e errore di sintassi mysql
o l'errore c'è sempre o non non c'è mai, non può apparire all'improvviso a suo piacimento su righe che non vengono modificate e che comunque vengono sempre eseguite indipendentemente dallo switch
è inutile che tu cerchi l'errore dopo, le righe successive alla 3 non vengono eseguite.
o hai letto male e la riga è 30 o 33 o 43, ma ribadisco se l'errore è alla 3 quello che segue non c'entra per nulla (salvo altri errori che potrebbero saltar fuori una volta risolto quello alla 3).
 
Guardate che quell'errore è del server MySQL, dunque la riga 3 non si riferisce alla terza riga nello script, ma alla terza riga nella query SQL che stai cercando di eseguire. Non è un errore di PHP. Lo script, in un certo senso, si comporta correttamente. La query no.
 
Quindi non dovete cercare nel codice PHP, ma in quello SQL. Il problema, qui, è che le query sono parecchie e hanno tutte parametri dinamici, quindi non è facile capire quale sia quella che da problemi. Suggerirei di riempire la pagina di var_dump per capire se le variabili contenenti i codici SQL vengono valorizzate correttamente.
 

Discussioni simili