Autor Zpráva
David Mokan
Profil
Zdravíčko, našel jsem kód pro fórum, a chtěl bych se zeptat, proč to nepostne do topics_o odpověď a vyhlásí to error.

<?php
                                        if (isset($_SESSION['realname'])) {
                                        if(isset($_POST['content']) and $_POST['content']!=''){
                                        $message = $_POST['content'];
                                        if(get_magic_quotes_gpc()){$message = stripslashes($message);}
                                        $message = $db_web_conn-> real_escape_string($message);
                                        if(mysqli_query($db_web_conn, 'insert into topics_o (parent, id, id2, title, message, authorid, timestamp, timestamp2) select "'.$dn1['parent'].'", "'.$id.'", "", "", "'.$message.'", "'.$nick.'", "'.time().'", "'.time().'" from topics where id="'.$id.'"') /*and mysqli_query($db_web_conn, 'update topics_o set id2=id2+1 where id="'.$id.'"')*/
                                        ){?>
                                         <meta http-equiv="refresh" content="0; url=/forum/detail/<?php echo $id;?>">
                                        <?php }else{echo 'Vyskytla se chyba.';}}else{?>
                                        <form action="" method="POST">
                                            <p>
                                                <label>
                                                    <textarea style="height:166px" maxlength="5000" name="content" class="bbEditor"></textarea>
                                                </label>
                                            </p>
                                            <ul class="inline-block-list">
                                                <li>
                                                    <button type="submit" class="button purple" name="add-reply">Odeslat</button>
                                                </li>
                                            </ul>
                                        </form>
                                        <?php }}else{;?>
                                        <center><h1>Pro přidání komentáře musíš být přihlášen!</h1></center>
                                        <?php }; ?>
                                    

Děkuji moc za rady.
David
Keeehi
Profil
A jak máme vědět, jaký error se zobrazil? Nějaký PHP, nebo něco o SQL, nebo máš na mysli to "Vyskytla se chyba"?
David Mokan
Profil
Myslim tu chybu vyskytla se chyba.
anonym_
Profil *
Tím dotazem se na telefonu probírat nechci, vypis si mysql_error. Chybova hláska ti řekne co a kde je špatně.

Prosím, premxslej o te chybě, nez ji sem obratem bezhlavě nakopirujes.


Autpkorekce na telefonu, mysqli_error samozrejme.
Kajman
Profil
Jak si vypsat chybu je v obou FAQ
Nejčastější potíže s PHP (FAQ) » Warning mysql_*: supplied argument is not a valid MySQL result resource…
Některé časteji řešené dotazy pro MySQL - FAQ » Jak si vypsat chybu

Navíc pozor, že v kódu ošetřujete jen $message a ostatní hodnoty mohou být cílem pro sql injection (např. se někdo zaregistruje se školivým nickem).
lionel messi
Profil
David Mokan:

Celý kód nie je práve najkvalitnejší. Kombinácia magic_quotes, real_escape_string, objektového a procedurálneho prístupu k db... Možno by stálo za úvahu zahodiť a napísať lepší. Alebo nájsť iný tutoriál či niekoho, kto ho lepšie napíše.

SQL na r. 7 je na prvý pohľad dosť divoké, je otázka, či je vhodné ho takto skladať a či nie je lepšie siahnuť po nejakej db vrstve, prípadne si na to skúsiť napísať nejaký vlastný handler.

Vážne máš id v db ako string (reťazec) a nie ako int? Ak nie, netreba dané hodnoty pri vkladaní do db dávať do úvodzoviek.

Tipnem si, že chyba bude v tom, že timestamp je v sql kľúčové slovo pre rovnomenný dátový typ.

Čo s tým? Máš na výber 2 možnosti:

1) Vyhýbaj sa kolíziám názvov stĺpcov s kľúčovými slovami sql.
2) Ak sa nemôžeš/nechceš vyhnúť, obaľ daný názov stĺpca do spätných apostrofov `. Na českej klávesnici je to pravý alt + ý (na hornom riadku klávesnice).

'insert into topics_o (parent, id, id2, title, message, authorid, `timestamp`, timestamp2) select "'.$dn1['parent'].'", "'.$id.'", "", "", "'.$message.'", "'.$nick.'", "'.time().'", "'.time().'" from topics where id="'.$id.'"'

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0