Installerat lamp-server – kan inte lägga till information i mysql-databas

Tråden skapades och har fått 11 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Karlskrona
  • 2007-08-21 18:13

Har precis installerat Apache2, php5 och mysql på en debian-burk.

När jag försöker att lägga till rader i en mysql-databas med två fält (ett id och ett för text) från en php-sida blir det fel.
Raden läggs till med ett unikt id-nr, men i fältet där det skulle hamnat text blir det tomt.
Om jag kör samma kod i phpmyadmin (med samma användare och lösen) funkar allt som det ska.

Någon som vet vad som kan vara fel?

Ska väl nämna att jag är ganska ny på både linux och allt som har med webben att göra …

  • Medlem
  • Kiruna
  • 2007-08-26 13:19

Svårt att säga utan att ha sett den kod du du använder i ditt php-script och själva felmeddelandet. Kan du visa dem?

Hej,

Hur ser tabellen ut? ("DESCRIBE table?name" visar det).
Hur ser koden som lägger till raden ut?

//QuickEye

  • Medlem
  • Karlskrona
  • 2007-08-27 11:03

Konstiga är att samma kod funkar bra på en annan server som jag kopierat grejerna från.

Så här ser koden ut:
if ($kat = $_REQUEST['action'] == 'todo' ){
$query = "INSERT INTO `todo` ( `todo` )
values ( '$todo' )";

Och tabellen:

  • Medlem
  • Kiruna
  • 2007-08-27 13:36

Visa gärna den kod du använder för att utföra själva databasanropet också, inte bara hur du bygger SQL-strängen.

Visa också vad du får för felmeddelande.

Kommentarer som inte riktigt har med din fråga att göra men som kan vara av intresse:
1. Du bör se till att $todo är ordentligt escapad, annars kan du råka ut för SQL-injektion. Allra helst bör du använda prepared statements.

2. Om $todo är av typen text är det bättre att spara den i ett fält med typen TEXT, istället för BLOB. Bl a sortering kommer inte att fungera som förväntat annars.

  • Medlem
  • Karlskrona
  • 2007-08-27 15:38

Databasanropet går genom include "conn.php";
Något felmeddelande får jag aldrig.

conn.php ser ut så här:
<? $user = "xxxxxxxx"; $pass = "xxxxxxxxx"; $db = "xxxxxxxx"; $link = mysql_connect( "localhost", $user, $pass );if ( ! $link ) die( "Ingen kontakt med databasen ");mysql_select_db( $db, $link )or die ( " ingen kontakt $db: ".mysql_error() );

// En funktion att anv‰ndas n‰r magic_quotes_gpc inte ‰r satt.
// Fˆr att fˆrhindra SQL-injections, eller i lidrigare fall MySQl-fel.
function db_escape ($post)
{
if (is_string($post)) {
if (get_magic_quotes_gpc()) {
$post = stripslashes($post);
}
return mysql_real_escape_string($post);
}

foreach ($post as $key => $val) {
$post[$key] = db_escape($val);
}

return $post;
}

?>

  • Medlem
  • Kiruna
  • 2007-08-27 19:14

Hänger inte riktigt med på vad du menar med att du inte får något felmeddelande... Du måste ju kolla detta själv med mysql_error() och mysql_errno(). Returnerar de tom sträng resp. 0 så har inget fel inträffat.

Det skulle som sagt underlätta om du visar koden där du gör själva databasanropet (mysql_query), och felhanteringen däromkring.

  • Medlem
  • Karlskrona
  • 2007-09-01 18:19
Ursprungligen av spot:

Hänger inte riktigt med på vad du menar med att du inte får något felmeddelande... Du måste ju kolla detta själv med mysql_error() och mysql_errno(). Returnerar de tom sträng resp. 0 så har inget fel inträffat.

Det skulle som sagt underlätta om du visar koden där du gör själva databasanropet (mysql_query), och felhanteringen däromkring.

Så här ser hela stycket ut (med lite ändringar sen sist dock, men samma problem):

if ($kat = $_REQUEST['action'] == 'addnyhet'){
$query = "INSERT INTO nyheter ( date, text, bild )
values( '$date', '$text', 'blank.gif' )";
mysql_query($query)
or die ( "ingen data addad \"domains\" table: " .mysql_error() );
echo "<script>document.location.href='nyheter.php'</script>";
}

Koden funkar kanon på Netlands webserver, har även provat på B-One men där får jag samma problem som på min egen server.
Känns som det är något enkelt, grundläggande jag missat, men jag kan som sagt inte så mycket om det här …

Passar på att fråga om det är någon som har bra tips på litteratur att lära sig mera om php?

if ($kat = $_REQUEST['action'] == 'todo' ){
$query = "INSERT INTO `todo` ( `todo` )
values ( '$todo' )";

Det kan vara tecknet efter "INSERT TODO ` som borde vara INSERT TODO '

  • Medlem
  • Kiruna
  • 2007-09-02 21:42

Lägg till

echo mysql_errno() . ": " . mysql_error() . "\n";

efter raden med mysql_query, så ser du om något fel inträffar på databasnivå.

  • Medlem
  • Karlskrona
  • 2007-09-03 08:36

Då får jag detta:
Parse error: syntax error, unexpected T_ECHO in /home/www-data/nyheter.php on line 145
(Rad 145 är den jag la till nu)

  • Medlem
  • Karlskrona
  • 2007-09-04 21:57

Fick lite hjälp av vår it-kille på jobbet, det som saknades var (innan databasanropet):
$text = $_REQUEST['text'];
$date = $_REQUEST['date'];

Hade med säkerhetsinställningar på servern att göra.

1
Bevaka tråden