+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Datenbankabfrage, SQL Delete Problem

  1. #1
    Neu an Board
    Registriert seit
    23.09.2008
    Beiträge
    49
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard Datenbankabfrage, SQL Delete Problem

    Hi,

    Habe jetzt mal versucht über Joomla einen Datenbankeintrag zu löschen, mir wird zwar angezeigt, dass der SQL Befehl ausgeführt wurde allerdings wurde der Datensatz nicht gelöscht.

    PHP-Code:
    function delete_matchbericht()
    {
      
    $id=$_POST["id"];
      
    $db  =& JFactory::getDBO();
      
      if(
    count($id)==0)
      {
        echo 
    "Kein Matchbericht zum Löschen ausgewählt";
        
    matchbericht_anzeigen();
        return;
      }
      
      for(
    $i=0;$i<count($id);$i++)
      {
        
    $sql="DELETE FROM matchberichte WHERE matchbericht_id=".$id[$i];
        
    $db->setQuery($sql);
      }
      
      if(
    $db->getAffectedRows()>0)
        echo 
    "Matchbericht(e) erfolgreich gelöscht";
      else
        echo 
    "Matchbericht(e) nicht gelöscht";
      
    matchbericht_anzeigen();

    Der SQL Befehl funktioniert in phpmyadmin.
    $id = Der Primärschlüsseleintrag in der Tabelle, hat auch den richtigen Wert.

    Zeilen wo der Eintrag gelöscht werden soll:
    PHP-Code:
        $sql="DELETE FROM matchberichte WHERE matchbericht_id=".$id[$i]; 
        
    $db->setQuery($sql); 
    Mir wird angezeigt
    PHP-Code:
      if($db->getAffectedRows()>0)
        echo 
    "Matchbericht(e) erfolgreich gelöscht"
    Obwohl nichts gelöscht wurde...
    Mit mit .$id[$i] sollte die id ausgegeben werden, das ist doch korrekt oder?

  2. #2
    Neu an Board Avatar von MikeyMouse
    Registriert seit
    09.12.2008
    Beiträge
    39
    Bedankte sich
    0
    1 Danksagung in 1 Beitrag

    Standard

    wenn du die $id mal mit echo ausgibst kommt da auch id nummer raus?
    Wer nämlich mit "h" schreibt ist dämlich und Mickey Mouse ohne "ck" schreibt ist am dämlichsten.

  3. #3
    Neu an Board
    Registriert seit
    23.09.2008
    Beiträge
    49
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Ja die ID ist die Richtige und es gibt auch einen Eintrag in der db mit dieser id, habe sie auch testweise ausgegeben.

    Was ich nicht verstehe obwohl nichts gelöscht wird, affected_rows >0 ?!

  4. #4
    Gehört zum Inventar Avatar von deejey
    Registriert seit
    22.04.2006
    Ort
    HH
    Beiträge
    9.309
    Bedankte sich
    509
    Erhielt 1.791 Danksagungen
    in 1.583 Beiträgen

    Standard

    Mit $id=$_POST["id"]; wird ja kein array erzeugt, brauchst kein count oder Schleifen, wenn $id nicht null ist: löschen where key = $id.
    Kein Support über PM; Ignoriermodus aktiv bei "dringend", "schnell", "eilt", denn: Zeit ist relativ

  5. #5
    Ex-Über-Mod Avatar von rico
    Registriert seit
    04.12.2005
    Ort
    Potsdam
    Alter
    47
    Beiträge
    1.699
    Bedankte sich
    237
    Erhielt 466 Danksagungen
    in 383 Beiträgen

    Standard

    Und das: $_POST["id"] und damit die DB-Abfragen zu machen halte ich ja für den reinen Wahnsinn.

    Sorry. MFG. Ricola
    Kleines Tutorial zum Objektorientierten Programmieren mit PHP

  6. #6
    Neu an Board
    Registriert seit
    23.09.2008
    Beiträge
    49
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Zitat Zitat von ricola Beitrag anzeigen
    Und das: $_POST["id"] und damit die DB-Abfragen zu machen halte ich ja für den reinen Wahnsinn.

    Sorry. MFG. Ricola
    Was wäre deiner Meinung nach die saubere Lösung?

    Zu der ID:

    Oja es ist ein Array
    <input type=checkbox name=id[] value=$row->matchbericht_id>

  7. #7
    Hat hier eine Zweitwohnung
    Registriert seit
    16.09.2008
    Ort
    Braunschweig
    Beiträge
    1.189
    Bedankte sich
    89
    Erhielt 430 Danksagungen
    in 365 Beiträgen

    Standard

    was rikola sicher sagen will, ist, dass du keine super globalen benutzen solltest.
    benutz lieber die JRequest klasse von joomla...
    zb
    JRequest::getVar('id');
    bzw
    JRequest::getInt('id'); für integer...


    edit...
    zu deinem problem...
    du schickst glaube ich den query garnicht ab...
    du setzt den query "nur"

    setz hinter setQuery noch ein
    db->query()

  8. #8
    Ex-Über-Mod Avatar von rico
    Registriert seit
    04.12.2005
    Ort
    Potsdam
    Alter
    47
    Beiträge
    1.699
    Bedankte sich
    237
    Erhielt 466 Danksagungen
    in 383 Beiträgen

    Standard

    Zitat Zitat von JoomlaHatesMe Beitrag anzeigen
    JRequest::getVar('id');
    bzw
    JRequest::getInt('id'); für integer...
    Ganz genau.
    Sich auf eine Integer-ID ausschließlich über Post zu verlassen, ist gefährlich. Dazu gibt es ja in Joomla JRequest::getVar oder JRequest::getInt. Beim letzteren weisst Du wenigstens, dass ausschließlich ein sauberer Wert übergeben wird.

    MFG. Ricola
    Kleines Tutorial zum Objektorientierten Programmieren mit PHP

  9. #9
    Gehört zum Inventar
    Registriert seit
    18.02.2005
    Beiträge
    8.841
    Bedankte sich
    85
    Erhielt 2.269 Danksagungen
    in 1.936 Beiträgen

    Standard

    PHP-Code:
    function delete_matchbericht()
    {
      global 
    $mainframe;
      
    $db =& JFactory::getDBO();
      
    $id JRequest::getVar('id'null'post');
      
    $id JArrayHelper::toInteger($id);

    if (
    count($id))
    {
        
    $sql 'DELETE FROM matchberichte ' .
                 
    'WHERE matchbericht_id IN (' implode(', '$id). ')';
        
    $db->setQuery($sql);
        
    $db->query();
    }
    else
    {
    // hier wäre schon was schief gelaufen, das darf gar nicht sein!
    // Formular vor dem Absenden überprüfen
    $msg 'Kein Matchbericht zum Löschen ausgewählt';
    $mainframe->redirect('index2.php?option=com_hastenichtgesehen&task=show'$msg);
    }
      
    $msg 'Matchbericht(e) nicht gelöscht';
    if (
    $db->getAffectedRows()>0)
    {
        
    $msg 'Matchbericht(e) erfolgreich gelöscht';
    }

    $mainframe->redirect('index2.php?option=com_hastenichtgesehen&task=show'$msg);


  10. #10
    Neu an Board
    Registriert seit
    23.09.2008
    Beiträge
    49
    Bedankte sich
    3
    Erhielt 0 Danksagungen
    in 0 Beiträgen

    Standard

    Danke für die Antworten, das Delete funktioniert zwar aber ein paar Probleme gibt es noch:

    PHP-Code:
    function delete_matchbericht()
    {
      global 
    $mainframe;
      
    $id JRequest::getVar('id'null'post');
      
    $id JArrayHelper::toInteger($id);
      
    $db  =& JFactory::getDBO();
      
      if(
    count($id))
      {
        
    $sql 'DELETE FROM matchberichte WHERE matchbericht_id IN (' implode(', '$id). ')';
        
    $db->setQuery($sql);
        
    $db->query();
      }
      else
      {
        echo 
    "Kein Matchbericht zum Löschen ausgewählt";
        echo 
    var_dump($id);
        
    matchbericht_anzeigen();
        return;
      }
      
      if(
    $db->getAffectedRows()>0)
        echo 
    "Matchbericht(e) erfolgreich gelöscht";
      else
        echo 
    "Matchbericht(e) nicht gelöscht";
      
    matchbericht_anzeigen();

    ID Wert = NULL...

    Wenn ich mir per $_POST die id hole, dann funktioniert das Löschen!
    $id = JRequest::getVar('id', null, $_POST);
    $id = JArrayHelper::toInteger($id);

    Liefert NULL als Ergebnis...
    Für was steht das global $mainframe?

    Und eine Frage habe ich auch noch:
    Wenn ich in einer Funktion eine Variable mittels JRequest::setVar('mannschaft', $mannschaft); setze. Und sie später in einer anderen Funktion mit $mannschaft=JRequest::getVar('mannschaft'); hole dann erhalte ich die Variable. Wenn ich in einer Funktion nachher dann nochmal mittels getVar dieselbe Variable holen will, hat sie keinen Wert...

+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein