Problemi anomalo insermento in db

rino2002

Utente Attivo
13 Set 2018
34
0
6
Ciao a tutti, ultimamente sto progettando un piccolo blog.
Ma all'inserimento dell'articolo alcune volta procede tutto alla perfezione ed altre volte mi da errore.
Ho provato anceh vairi inserimenti ed anche con caratteri lunari l'inserimento va a buon fine, poi quando mi metto e scrivo io un'articolo, mi da errore...sembra prorpio una presa in giro.... se qualcuno può dare un'occhiata al codice e magari dirmi qual'è il problema...grazie mille!
questo è il form in html
HTML:
<form align="left" action="add_articolo.php" method="post" enctype="multipart/form-data">

<hr>
   
<br><input type="text" name="titolo" value="" placeholder="titolo"><br>
<br><textarea name="articolo" value="" placeholder="articolo"></textarea><br>    

    <br> <input type="hidden" name="action" value="upload"/>
            <label>Carica la tua foto dalla libreria:</label>
    <input type="file" name="fileToUpload" id="fileToUpload">

<input type="submit" value="Create" name="submit">
</form>
ecco invece l'inserimento:
PHP:
 if (isset($_POST['titolo']))
    {
    
        $titolo = $_POST['titolo'];
        $articolo = $_POST['articolo'];
        $name = $_FILES["fileToUpload"]["name"];
        $evidenza = 0;


        $sql = "INSERT INTO blog (titolo,articolo,name,evidenza) VALUES ('$titolo','$articolo','$name','$evidenza')";
        
        if ($conn->query($sql) === TRUE) {
            echo "Pubblicato!<br />";
        }
        else {
            echo "Errore!<br />";
        }
    }
    include_once("includes/menu.php");
Grazie per l'attenzione.
 

Alex_70

Utente Attivo
13 Nov 2018
371
14
18
HELL
un blog?
:rolleyes:
non e' una cosa facile da riscrivere da zero , ti consiglio d'installare WordPress ;)
 

rino2002

Utente Attivo
13 Set 2018
34
0
6
Ciao, guarda l'ho chiamato blog ma effettivamente mi serve solamente per pubblicare un notizia. Il sito ha altre caratteristiche per questo non installo wordpress...il problema però è che non capisco perchè solo a volte mi dà l'errore in queso inserimento.
 

macus_adi

Utente Attivo
5 Dic 2017
1.294
85
48
IT/SW
se qualcuno può dare un'occhiata al codice e magari dirmi qual'è il problema...
Il codice potrebbe comportarsi male per diversi fattori:
1- Mancata sanitizzazione delle string
2- Mancato cast delle stesse
3- Record troppo lungo
4- Field mancante
5- File non passato
6- Aggiungi apostrofi nei testi (come giusto che sia), di conseguenza la query (per come scritta) genera error...

Ti consiglio di modificare come segue:


PHP:
//Messa qui per comodità
function only_string($string){
    return filter_var($string, FILTER_SANITIZE_STRING) ;
}
$sql = 'INSERT INTO blog (titolo,articolo,name,evidenza) VALUES ("'.only_string($titolo).'","'.only_string($articolo).'","'.only_string($name).'","'.only_string($evidenza).'")';
Lascia stare WP, non serve un cannone per sparare ad una formica....
 

rino2002

Utente Attivo
13 Set 2018
34
0
6
grazie mille, adesso sembra funzionare molto meglio, finalmente!
Posso solo domandarti una cosa?
Perchè adesso non mi esegue il codice?
Ad esempio se nell'articolo inserisco dei tag <h2> non me li esegue!
grazie comuque
 

rino2002

Utente Attivo
13 Set 2018
34
0
6
Il problema che poi se elimino only_string, non mi pubblica l'articolo...mi da il problema che avevo all'inizio
 

marino51

Utente Attivo
28 Feb 2013
2.920
164
63
Lombardia
Il problema che poi se elimino only_string, non mi pubblica l'articolo...mi da il problema che avevo all'inizio
guardando il tuo primo post, noto che non fai nessun controllo per la gestione degli apici,
se nel titolo o nell'articolo fossero presenti degli apici, questi modificano la query,
esempio, supponi che nel titolo ci sia l' albero, il risultato nella query sarà, VALUES ('l' albero',
puoi verificare che ci sono 3 apici e nasce l'errore

verifica se questo motivo è la vera causa dell'errore,
perché se non lo indichi, chi ti risponde può solo sperare di indovinare

ho comunque preparato una modifica al tuo codice, prova ad applicarla, attento solo alla variabile $slash che dipende dal db usato

PHP:
function FixSQL($param)
{
    $slash = "\\";    // la doppia barra rovescia vale per mySQL, se db fosse ms sql va messo $slash = "'";
    if ( strpos($param, "'") !== false ) $param = str_replace("'", $slash."'", $param);
    return $param;
}

if (isset($_POST["titolo"]))
{
    $titolo   = FixSQL($_POST["titolo"]);
    $articolo = FixSQL($_POST["articolo"]);
    $name     = $_FILES["fileToUpload"]["name"];
    $evidenza = 0;

    $sql = "INSERT INTO blog (titolo, articolo, name, evidenza) VALUES ('$titolo','$articolo','$name','$evidenza')";
  
    if ($conn->query($sql) === TRUE) { echo "Pubblicato!<br />"; }
    else                             { echo "Errore!<br />"; }
}
include_once("includes/menu.php");
 

rino2002

Utente Attivo
13 Set 2018
34
0
6
ciao marino51 , grazie mille del consiglio! Non avevo pensato che l'errore potesse essere quello degli apici.....sembra funzionare! Ti ringrazio e spero che funzionerà tutto per il meglio...buonaserata