Avatar billede davidabk Nybegynder
14. maj 2010 - 22:11 Der er 6 kommentarer og
1 løsning

Slet fra MySQL med PHP??

Hej

Jeg er absolut PHP begynder og følger en bog om emnet. Dog er det noget kode som ikke virker som det skal!

Nedenstående kode logger fint ind i min database og jeg kan også indtaste data i formularen som gemmes korrekt, men jeg kan ikke slette noget igen via knappen "DELETE RECORD".

Kan I gennemskue hvorfor? (det virker fint via CMD!)

KODEN:

<?php // sqltest.php
require_once 'login.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());
mysql_select_db($db_database, $db_server)
or die("Unable to select database: " . mysql_error());

if (isset($_POST['author']) &&
    isset($_POST['title']) &&
    isset($_POST['category']) &&
    isset($_POST['year']) &&
    isset($_POST['isbn']))
{
    $author = get_post('author');
    $title = get_post('title');
    $category = get_post('category');
    $year = get_post('year');
    $isbn = get_post('isbn');
if (isset($_POST['delete']) && $isbn != "")
{
    $query = "DELETE FROM classics WHERE isbn='$isbn'";
    if (!mysql_query($query, $db_server))
    echo "DELETE failed: $query<br />" .
    mysql_error() . "<br /><br />";
}
else
{
    $query = "INSERT INTO classics VALUES" .
    "('$author', '$title', '$category', '$year', '$isbn')";
    if (!mysql_query($query, $db_server))
    echo "INSERT failed: $query<br />" .
    mysql_error() . "<br /><br />";
}
}
echo <<<_END
<form action="sqltest.php" method="post"><pre>
    Author <input type="text" name="author" />
    Title <input type="text" name="title" />
    Category <input type="text" name="category" />
    Year <input type="text" name="year" />
    ISBN <input type="text" name="isbn" />
    <input type="submit" value="ADD RECORD" />
</pre></form>
_END;
$query = "SELECT * FROM classics";
$result = mysql_query($query);
if (!$result) die ("Database access failed: " . mysql_error());
$rows = mysql_num_rows($result);
for ($j = 0 ; $j < $rows ; ++$j)
{
$row = mysql_fetch_row($result);
echo <<<_END
    <pre>
        Author $row[0]
        Title $row[1]
        Category $row[2]
        Year $row[3]
        ISBN $row[4]
    </pre>
    <form action="sqltest.php" method="post">
    <input type="hidden" name="delete" value="yes" />
    <input type="hidden" name="isbn" value="$row[4]" />
    <input type="submit" value="DELETE RECORD" /></form>
_END;
}
mysql_close($db_server);
function get_post($var)
{
    return mysql_real_escape_string($_POST[$var]);
}
?>
Avatar billede RexReptiles Nybegynder
15. maj 2010 - 02:05 #1
jeg tror $isbn er dit problem -->

  $query = "DELETE FROM classics WHERE isbn='$isbn'";
    if (!mysql_query($query, $db_server))
    echo "DELETE failed: $query<br />" .
    mysql_error() . "<br /><br />";

smid evtl. en extract($_POST);
lige oven over den der og prøv igen - for eller fanger du ik den POST
Avatar billede RexReptiles Nybegynder
15. maj 2010 - 02:13 #2
eller sludder - tror bare det er alt det sludder kodning der forvirrer mig --> prøv det her:

<?php // sqltest.php
require_once 'login.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());
mysql_select_db($db_database, $db_server)
or die("Unable to select database: " . mysql_error());

if (isset($_POST['author']) &&
    isset($_POST['title']) &&
    isset($_POST['category']) &&
    isset($_POST['year']) &&
    isset($_POST['isbn']))
{
    $author = get_post('author');
    $title = get_post('title');
    $category = get_post('category');
    $year = get_post('year');
    $isbn = get_post('isbn');
if (isset($_POST['delete']) && $isbn != "")
{
    $query = "DELETE FROM classics WHERE isbn='$isbn'";
    if (!mysql_query($query, $db_server))
    echo "DELETE failed: $query<br />" .
    mysql_error() . "<br /><br />";
}
else
{
    $query = "INSERT INTO classics VALUES" .
    "('$author', '$title', '$category', '$year', '$isbn')";
    if (!mysql_query($query, $db_server))
    echo "INSERT failed: $query<br />" .
    mysql_error() . "<br /><br />";
}
}
?>
<form action="sqltest.php" method="post"><pre>
    Author <input type="text" name="author" />
    Title <input type="text" name="title" />
    Category <input type="text" name="category" />
    Year <input type="text" name="year" />
    ISBN <input type="text" name="isbn" />
    <input type="submit" value="ADD RECORD" />
</pre></form>
<?
$query = "SELECT * FROM classics";
$result = mysql_query($query);
if (!$result) die ("Database access failed: " . mysql_error());
$rows = mysql_num_rows($result);
for ($j = 0 ; $j < $rows ; ++$j)
{
$row = mysql_fetch_row($result);
?>
    <pre>
        Author <?=$row['0']?>
        Title <?=$row['1']?>
        Category <?=$row['2']?>
        Year <?=$row['3']?>
        ISBN <?=$row['4']?>
    </pre>
    <form action="sqltest.php" method="post">
    <input type="hidden" name="delete" value="yes" />
    <input type="hidden" name="isbn" value="<?=$row['4']?>" />
    <input type="submit" value="DELETE RECORD" /></form>
<?
}
mysql_close($db_server);
function get_post($var)
{
    return mysql_real_escape_string($_POST[$var]);
}
?>
Avatar billede davidabk Nybegynder
15. maj 2010 - 10:21 #3
Hej RexReptiles

Tak for forslaget!
Jeg kan se at du "hopper" ud af PHP når der er HTML og tilbage efterfølgende. Der skal dog rettes i variablerne hvis det skal virke - sådan som jeg forstår det.

Men kan det ikke lade sig gøre at blive i PHP og få den til at slette det ønskede fra databasen?

Hvordan skal variablerne i HTML se ud hvis jeg skal benytte den metode du foreslår?
Avatar billede RexReptiles Nybegynder
15. maj 2010 - 14:06 #4
Author <?=$row['0']?>
       
er det samme som <?php echo "Author".$row['0']; ?>
Avatar billede RexReptiles Nybegynder
15. maj 2010 - 14:08 #5
men jeg syntes den er voldsom den omgang der, det ligner bare et simpel udtræk, indsæt og slet - det kunne gøres uden alt det pjat som er med.
Avatar billede RexReptiles Nybegynder
15. maj 2010 - 14:22 #6
<?php
// sqltest.php
require_once 'login.php';
// vi kan godt finde ud af vores sql login og pass!!!
mysql_connect($db_hostname, $db_username, $db_password);
mysql_select_db($db_database, $db_server);

//extract - så har vi $var uden POST
extract($_POST);
if (isset($author) &&
    isset($title) &&
    isset($category) &&
    isset($year) &&
    isset($isbn))
{
   
if (isset($delete) && $isbn != "")
{
    $query = "DELETE FROM classics WHERE isbn='$isbn'";
    mysql_query($query);
    echo "<br /><br />";
}
else
{
    $query = "INSERT INTO classics VALUES" .
    "('$author', '$title', '$category', '$year', '$isbn')";
    mysql_query($query);
    echo "<br /><br />";
}
}
?>
<form action="sqltest.php" method="post">
    Author <input type="text" name="author" />
    Title <input type="text" name="title" />
    Category <input type="text" name="category" />
    Year <input type="text" name="year" />
    ISBN <input type="text" name="isbn" />
    <input type="submit" value="ADD RECORD" />
</form>
<?
$query = "SELECT * FROM classics";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
for ($j = 0 ; $j < $rows ; ++$j)
{
$row = mysql_fetch_row($result);
?>
   
        Author <?=$row['0']?>
        Title <?=$row['1']?>
        Category <?=$row['2']?>
        Year <?=$row['3']?>
        ISBN <?=$row['4']?>
 
    <form action="sqltest.php" method="post">
    <input type="hidden" name="delete" value="yes" />
    <input type="hidden" name="isbn" value="<?=$row['4']?>" />
    <input type="submit" value="DELETE RECORD" /></form>
<?
}
mysql_close($db_server);
?>
Avatar billede davidabk Nybegynder
08. juni 2010 - 16:44 #7
Lukke tråd
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester